如何从SHC编译的Bash脚本恢复原脚本?遇段错误未找到核心文件
恢复SHC编译Bash脚本的可行方案
先解决核心文件缺失问题
- 临时开启核心转储:执行
ulimit -c unlimited,之后再运行你之前尝试的恢复命令,系统就会在当前目录生成core文件。 - 如果需要永久开启,可编辑
/etc/security/limits.conf,添加一行* soft core unlimited,重启会话后生效。
尝试不同的脚本恢复方法
1. 用strings命令快速提取
SHC编译的二进制文件会把原脚本加密后内嵌,直接用strings命令过滤可能提取到关键内容:
strings ./your_compiled_script | grep -A 2000 '^#!/bin/bash'
如果原脚本开头是其他shell路径,把#!/bin/bash换成对应的路径(比如#!/bin/sh)。部分情况下能直接拿到完整或部分原脚本,就算是加密后的块,也能为后续解密提供素材。
2. 借助gdb调试提取
生成core文件后,用gdb加载调试:
gdb ./your_compiled_script core
在gdb交互界面中,用find命令搜索内存中的脚本特征字符串:
find &_start, +9999999, "#!/bin/bash"
找到内存地址后,用x/s命令查看该地址的内容,就能读取到解密后的原脚本。
3. 使用SHC专用解密工具
针对不同版本的SHC,有专门的解密脚本或工具,原理是模拟SHC运行时的解密流程。你可以自行编译对应版本的解密工具,直接加载编译后的二进制文件提取原脚本。
排查段错误的原因
- 段错误大概率是因为你用的恢复方法和SHC编译版本不兼容,SHC不同版本的加密算法有调整,要匹配对应版本的恢复方案。
- 检查编译后的文件是否损坏,或者当前系统架构和编译时的架构是否一致(比如x86_64和ARM混跑)。
内容的提问来源于stack exchange,提问作者Decodez
相关产品推荐
相关产品推荐

