程序被加壳后,可以通过以下方法进行脱壳:
单步跟踪法
使用OD(OllyDbg)载入待脱壳文件,选择“不分析代码”。
通过单条指令执行功能,从壳的入口一直执行到OEP(Original Entry Point),最终通过这个OEP将原程序dump出来。
在单步跟踪过程中,需要跳过一些不能执行到的指令,例如循环跳转等。
ESP定律法
利用ESP寄存器在加壳过程中的特性,通过硬件访问断点直接跳转到OEP。
具体操作包括:在命令行下设置ESP的硬件访问断点,然后运行程序,程序会直接跳转到OEP。
动态脱壳
加壳的程序运行时必须还原成原始形态,即通过抓取内存中的镜像并重构成标准的执行文件。
可以使用OD跟踪到OEP,然后进行dump和修复。
使用专门的脱壳工具
有一些专门的脱壳工具可以自动处理加壳程序,例如UPX Unpacker、Fart 脱壳王等。
这些工具通常会根据加壳软件的类型和版本提供相应的脱壳参数和方法。
建议
选择合适的工具:根据加壳软件的类型和版本选择合适的脱壳工具,可以提高脱壳的成功率。
手动与自动结合:对于复杂的加壳程序,可以结合手动和自动脱壳的方法,先通过手动方法找到OEP,然后使用工具进行脱壳。
不断学习:脱壳技术是一个不断发展的领域,新的加壳方法和工具不断出现,需要不断学习和更新知识。
通过以上方法,可以有效地对加壳程序进行脱壳,从而获取原始程序。