脱壳是一种复杂的技术,针对不同的加壳软件需要采用不同的方法。以下是一些常见的脱壳步骤和技巧:
查壳
使用PEID、FI、PE-SCAN等工具对加壳程序进行查壳,以确定加壳的类型和特征。
寻找OEP(Entry Point)
单步跟踪法:
使用OD(OllyDbg)载入程序,点“不分析代码!”。
单步向下跟踪F8,实现向下的跳,遇到程序往回跳时,在断点处按F4。
通过观察绿色和红色线条,找到未实现的跳转和已实现的跳转。
如果程序中有CALL指令,可以通过F7进入CALL内部,快速找到OEP。
遇到大跳转(如jmp、JE、RETN)时,通常会很快找到OEP。
ESP定律法:
在OD中,通过命令行设置ESP的硬件访问断点。
运行程序,程序会在断点处暂停,此时可以读取ESP指向的地址,该地址即为OEP。
脱壳
使用脱壳工具:
LordPE、PeDumper、OD自带的脱壳插件、PETools等工具可以帮助脱壳。
例如,使用OllyDump或Load PE+ImportREC插件进行脱壳。
修复导入表:
使用Import REConstructor等工具修复程序的导入表,以便程序能够正常启动。
其他技巧
PUSHAD和POPAD:
通常在加壳程序中,PUSHAD和POPAD指令附近会有OEP的线索。
硬件断点:
在关键位置设置硬件断点,如ESP寄存器的访问,可以快速定位到OEP。
建议
选择合适的工具:根据不同的加壳软件选择合适的脱壳工具和技巧。
多次尝试:脱壳过程可能会遇到多种情况,需要多次尝试和调整。
备份数据:在进行脱壳操作前,建议备份重要数据,以防意外情况发生。
请注意,脱壳可能涉及软件版权和法律法规问题,请确保在合法合规的前提下进行操作。