工具:OllyDBG
链接:https://pan.baidu.com/s/1ApV8xzmlI00TeokUF6cmZw?pwd=6ilp
提取码:6ilp
1、尾部跳转法
跳转指令位于代码的尾部且跳转到一个很远的位置
而且在这条指令的后面,会存在着非常多的0x00字节,也就是一大堆无意义的代码
进行跳转即可发现程序入口点
2、OD的插件法
点击:插件->OllyDump->Find OEP by setting Nop(Trace over)
会自动寻找入口点
3、利用pushad和popad查找入口点
a)可以一路F8,快速浏览程序,这里发现pushfd和pushad,用于保存所有的寄存器和标志。那么加壳程序很可能在跳转到OEP之前,再恢复所有的寄存器和标志,所以我们可以通过在栈上设置一个硬件访问断点来尝试定位OEP。一般来说,在尾部跳转的位置之前会有popad或者popfd指令,通过这个就可以找到OEP了
b)这些状态它在进入入口点之前一定会出栈,所以我们在该处设置硬件访问断点
先将程序单步运行至pushad之后,然后右键单击ESP,选择数据窗口跟随
然后选中数据窗口中的前四个字节,右键单击-》断点-》硬件访问-》Dword
然后F9,直接执行到出栈访问位置,然后在附近寻找跳转语句进入入口点
0040754f为断点位置,然后发现下方的retn,可能返回一个新位置
成功找到入口点
4、“ESP定律”(并不是真万能)
a)不断F8单步执行,直到ESP的值变成红色的时候停下来
b)在ESP值上单击鼠标右键,选择“数据窗口中跟随”
c)选中数据窗口中前四个字节的内容,单击鼠标右键,选择“断点”->“硬件访问”->“Dword