程序怎么重新脱壳

时间:2025-01-25 00:59:22 单机游戏

程序重新脱壳的方法有多种,以下是一些常用的步骤:

方法一:单步跟踪法

载入程序 :使用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,这是脱壳成功的关键。

通过以上方法,可以有效地对程序进行重新脱壳。建议在实际应用中结合多种方法,以提高脱壳的成功率和效率。