软件脱壳的方法可以分为手动脱壳和自动脱壳两种。
手动脱壳
手动脱壳需要使用调试工具,如OllyDbg或IDA Pro,并且需要一定的汇编语言和软件调试知识。以下是手动脱壳的一些关键步骤:
使用调试器载入程序
使用调试器(如OllyDbg)载入待脱壳的程序,并选择不分析代码。
单步跟踪
通过单步跟踪(F8)执行程序,跳过壳程序的解密和跳转代码。
遇到向上跳转(如JMP)时,通过F4跳过。
遇到大的跳转(如JMP XXXXXX)时,通常很快就会到达程序的OEP(Original Entry Point)。
找到OEP
跟踪过程中,找到程序的OEP,即程序的真实入口点。
OEP通常在程序入口点附近,可以通过观察PUSHAD和POPAD指令找到。
修复程序
在找到OEP后,可能需要修复程序的寄存器状态和代码段,以恢复原始程序的执行。
自动脱壳
自动脱壳使用专门的脱壳工具,这些工具可以自动执行上述手动步骤。以下是一些常用的自动脱壳工具及其使用方法:
UPX
UPX是一种常见的压缩工具,也提供了反压缩功能,可以直接用于脱壳。
使用方法:将待脱壳的程序和UPX工具放在同一目录下,执行`upx -d 文件名`即可。
ASPACK
ASPACK是一种加壳工具,可以使用UNASPACK或CASPR进行脱壳。
UNASPACK:类似于Lanuage,运行后选择待脱壳的软件即可,但只能脱早期版本的壳。
CASPR:需要将待脱壳的软件和caspr.exe放在同一目录下,执行`caspr 文件名`即可。
PECompact
PECompact是一种加壳工具,可以使用UNPECompact进行脱壳。
使用方法:将待脱壳的软件和unpecompact工具放在同一目录下,运行unpecompact即可。
注意事项
选择合适的工具:根据不同的加壳软件选择合适的脱壳工具,不同工具的脱壳能力各有侧重。
更新工具:壳代码更新后,之前的脱壳工具可能会失效,需要及时更新工具。
测试:脱壳后的程序可能需要进行测试,确保其功能正常。
通过以上方法,可以有效地对软件进行脱壳,从而方便进行后续的逆向分析和软件调试。