在linux下,通过shc
(shell script compiler)加密的脚本本质上是将原始脚本转换为c代码,然后编译成二进制文件。shc
并不是真正的加密,而是一种混淆和编译手段。要还原被shc
处理的脚本,通常有以下几种方法:
1. 直接运行二进制文件提取
shc
生成的二进制文件仍然是一个可执行的shell脚本解释器(如/bin/bash
)的封装。你可以尝试:
strings /path/to/encrypted_script
或者:
strace /path/to/encrypted_script 2>&1 | grep -a 20 "execve"
这可能会在输出中显示部分原始脚本内容(尤其是未混淆的部分)。
2. 使用gdb调试工具
通过调试工具(如gdb
)动态分析二进制文件:
gdb /path/to/encrypted_script (gdb) set disassembly-flavor intel (gdb) disassemble main (gdb) break execve (gdb) run
在execve
断点处,可能会看到传递给shell解释器的脚本内容。
3. 反编译工具
使用反编译工具(如ghidra
、radare2
)分析二进制文件:
# 安装 radare2 sudo apt install radare2 # debian/ubuntu # 分析文件 r2 /path/to/encrypted_script > aaa # 自动分析 > afl # 列出函数 > s main # 跳转到main函数 > pdf # 反汇编
在反汇编代码中,可能会找到原始脚本的字符串或逻辑。
4. 动态内存转储
通过工具(如gcore
)在脚本运行时转储内存,然后搜索shell脚本内容:
# 运行脚本并获取其pid /path/to/encrypted_script & pid=$! # 生成核心转储文件 gcore -o /tmp/dump $pid # 搜索可能的脚本内容 strings /tmp/dump.* | grep -a 20 "#!/bin/bash"
5. 使用专门的解包工具
社区中有一些针对shc
的解包工具(如unshc
),但效果因版本而异:
git clone https://github.com/yanncam/unshc.git cd unshc ./unshc.sh /path/to/encrypted_script
注意:工具可能无法完全还原高版本shc
生成的脚本。
6. 模拟执行(高级)
通过qemu
或ptrace
模拟执行二进制文件,监控其行为并提取脚本逻辑。
到此这篇关于linux中还原被shc处理的脚本的方法小结的文章就介绍到这了,更多相关linux还原被shc处理的脚本内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论