软件破壳是指绕过软件的安全保护机制,提取出原始程序的过程。以下是一些常见的手动脱壳方法:
方法一:单步跟踪法
使用OD(OllyDbg)载入程序 ,并选择“不分析代码”选项。单步向下跟踪F8
,实现向下的跳转,遇到向上的跳转(包括循环)时,通过按F4(或右键单击代码,选择断点——运行到所选)来跳过。
观察绿色和红色线条: 绿色线条表示跳转未实现,红色线条表示跳转已实现。 如果程序中有CALL指令,可以通过F7跟进到被调用处,这有助于快速找到OEP(程序入口点)。 遇到大跳转(如jmp、JE、RETN等),通常很快就会到达OEP。 方法二:ESP定律法寻找CALL指令:
大跳转处理:
在OD中观察寄存器ESP
,找到其值。
在命令行下设置硬件访问断点: 输入`dd 0012FFA4`(指向当前代码中的ESP地址),然后按回车。选择断点地址
,设置WORD断点。
运行程序: 按F9运行程序,程序会在断点处停止,然后按F8单步跟踪,即可到达OEP。 方法三:内存跟踪使用OD打开软件
。
进入调试选项,取消所有异常忽略设置。
观察内存中的跳转和调用,通过单步跟踪和断点来找到OEP。
注意事项
选择合适的工具: 不同的软件可能需要不同的脱壳工具,如OD、IDA Pro、Ghidra等。 了解软件结构
注意反汇编和编辑:在找到OEP后,可能需要使用UltraEdit等工具进行代码编辑,以修改或替换不合法的代码。
示例
假设你正在使用OD进行脱壳,以下是一个简化的步骤:
1. 打开OD并载入待脱壳的程序。
2. 选择“不分析代码”选项。
3. 在代码窗口中,单步跟踪F8,跳过所有向上的跳转(使用F4)。
4. 观察绿色和红色线条,找到红色线条表示的跳转位置。
5. 在红色线条处设置断点,然后按F9运行程序,程序会在此处停止。
6. 此时,你已经到达了OEP,可以进行后续的分析和修改。
请根据具体情况选择合适的脱壳方法,并确保在操作过程中谨慎行事,避免对软件造成不可逆的损害。