软件脱壳是指去除软件的保护层,以便分析其内部结构和工作原理的过程。以下是一些常用的脱壳方法:
单步跟踪法
使用调试器(如OD)载入待脱壳文件,选择“不分析代码”。
通过单条指令执行功能,从壳的入口一直执行到OEP(Original Entry Point,原程序入口点)。
在执行过程中,需要跳过一些不能执行到的指令,如循环跳转等。
通过绿色线条表示跳转未实现,红色线条表示跳转已实现,最终找到OEP并dump原程序。
ESP定律法
在调试器中观察ESP寄存器的值,找到其硬件访问断点。
通过命令行输入特定地址(如`dd 0012FFA4`)来直接跳转到OEP。
针对特定壳的工具
aspack壳:可使用unaspack或caspr。
unaspack:类似lanuage,只能脱aspack早些时候版本的壳。
caspr:可以脱aspack任何版本的壳,但需要DOS界面。
upx壳:使用upx命令`upx -d aa.exe`来脱壳。
PEcompact壳:使用unpecompact工具,类似lanuage。
procdump:万能脱壳但不精,一般不推荐使用。
文件分析工具
使用Fi、GetTyp、peid、pe-scan等工具来侦测壳的类型。
OEP入口查找工具
使用SoftICE、TRW、ollydbg、loader、peid等工具来查找OEP入口。
dump工具
使用IceDump、TRW、PEditor、ProcDump32、LordPE等工具来dump脱壳后的文件。
PE文件编辑工具
使用PEditor、ProcDump32、LordPE等工具来编辑PE文件。
重建Import Table工具
使用ImportREC、ReVirgin等工具来重建Import Table。
自动脱壳工具
使用专门的脱壳工具,如Procdump v1.62,可以解开绝大部分的加密外壳。
建议
选择合适的工具:根据不同的壳类型选择合适的脱壳工具,如aspack壳推荐使用caspr或unaspack,upx壳直接使用upx命令。
掌握调试技巧:熟练使用调试器进行单步跟踪和断点设置,找到OEP是脱壳的关键。
多尝试:不同的软件可能需要不同的脱壳方法,多尝试不同的工具和方法可以提高脱壳成功率。
请注意,脱壳可能涉及软件版权和合法性问题,请确保在合法授权的情况下进行脱壳操作。