程序重新脱壳的方法有多种,以下是一些常用的步骤:
方法一:单步跟踪法
载入程序 :使用OD(OllyDbg)载入程序,并选择“不分析代码”选项。单步跟踪
按下F8键单步向下跟踪,实现向下的跳转。
遇到程序向上跳时,按下F4键(或右键单击代码,选择“运行到所选”)来跳过这些跳转。
识别OEP
如果程序在附近有一个CALL语句,使用F7键跟随调用进入函数内部。
如果程序执行到某个CALL后继续运行,同样使用F7键进入该CALL。
遇到大跳转(如jmp、JE、RETN)时,通常很快就会到达程序的OEP(入口点)。
方法二:ESP定律法
观察ESP寄存器
在OD中,观察右上角寄存器中的ESP值,看是否有异常(如变成红色)。
设置硬件断点
在命令行下,使用`dd`命令查看当前代码中的ESP地址,并设置硬件访问WORD断点。
运行程序
按下F9键运行程序,程序会在断点处停止。
确定OEP
按下F8键单步向下跟踪,程序会直接跳转到OEP。
方法三:内存跟踪法
载入程序
使用OD打开软件,并选择“调试选项”中的“异常”选项,忽略所有异常。
重载程序
按下CTRL+F2键重新载入程序。
打开内存镜像
按下ALT+M键,选择“DA”打开内存镜像。
找到.rsrc段
在内存镜像中找到第一个.rsrc段,并按F2键设置断点。
运行到OEP
按下SHIFT+F9键运行程序,程序会在.rsrc段断点处停止。
再次按ALT+M键,找到程序的.text或.code段(如00401000处),并按F2键设置断点。
按下SHIFT+F9键运行程序,程序会直接到达OEP。
注意事项
耐心:
脱壳过程可能较为繁琐,需要耐心跟踪和分析。
工具选择:根据不同的加壳类型选择合适的脱壳工具和方法。
OEP识别:确保准确识别程序的OEP,这是脱壳成功的关键。
通过以上方法,可以有效地对程序进行重新脱壳。建议在实际应用中结合多种方法,以提高脱壳的成功率和效率。