-
-
[原创]常见脱壳方法总结
-
发表于:
2020-1-3 00:21
13350
-
小弟刚刚学逆向不久,希望可以和大佬们交流交流
拖进OK第一条指令就是PUASAD,这个说明加壳了。

然后按下F8,当只有ESP和EIP为红色时,说明可以使用ESP定律:

此时选中ESP然后右键 HW Break [ESP]

然后F9运行,会自动断下,代码大概格式如下:
这里重点来了,选中jnz指定下一行,jmp指令上一行,将此处设为新EIP:

然后F8跳转过后,就会来到OEP处。

在程序进入后一直疯狂按F8,但是不能让程序回跳。也就是在回跳的地方的下一行按F4然后继续F8,有Call的话直接跟进:

一直F8,到达要回跳的地方:

又遇到一个:

一直反复刚刚的动作,直到遇到call后按F7跟进:

然后继续F8,遇到Call跟进(其实可以不用跟进,因为跟进是怕程序跑飞),到这里已经找到OEP了:

OK->选项->调试设置->SFX设置如下:

然后把程序拖到OD中,自动跳转到了入口点:

首先查看区段:

在data段下内存断点:

然后F9运行程序,会自动断下,断下后删除data的内存断点:

在Text段下内存访问断点:

再次F9就会来到程序入口处:

首先观察第一行代码为pushad,既然有pash那就有pop,所以我们搜索popad,有很多个:

一个一个看,找popad后面有返回的,有就下断,断下了就说明是我们要找的。

下断运行,成功断下:

然后单步到返回处,返回后就到了OEP了:

首先必须得知道是什么语言写的,然后直接根据语言特性下断
比如说MFC程序,会在OninitDialog调用GetSystemMenu此函数,我们就直接在此函数下断。


然后运行会自动断下,一直执行到返回:

[培训]科锐逆向工程师培训第53期2025年7月8日开班!