寻找真正的入口(OEP)--广义ESP定律
2007-01-14 16:44:36 来源:WEB开发网核心提示: 于是我们停在0040EE10这一行!总结:我们可以把壳假设为一个子程序,当壳把代码解压前和解压后,寻找真正的入口(OEP)--广义ESP定律(3),他必须要做的是遵循堆栈平衡的原理,让ESP执行到OEP的时候,F90040D05364:892500000000movdwordptrfs:[
于是我们停在0040EE10这一行!
总结:我们可以把壳假设为一个子程序,当壳把代码解压前和解压后,他必须要做的是遵循堆栈平衡的原理,让ESP执行到OEP的时候,使ESP=0012FFC4。
4.广义ESP定律
很多人看完了教程就会问:ESP定律是不是就是0012FFA4,ESP定律的适用范围是不是只能是压缩壳!
我的回答是:NO!
看完了上面你就知道你如果用0012FFA8也是可以的,ESP定律不仅用于压缩壳他也可以用于加密壳!!!
首先,告诉你一条经验也是事实---当PE文件运行开始的时候,也就是进入壳的第一行代码的时候。寄存器的值总是上面的那些值,不信你自己去试试!而当到达OEP后,绝大多的程序都第一句都是压栈!(除了BC编写的程序,BC一般是在下面几句压栈)
现在,根据上面的ESP原理,我们知道多数壳在运行到OEP的时候ESP=0012FFC4。这就是说程序的第一句是对0012FFC0进行写入操作!
最后我们得到了广义的ESP定律,对只要在0012FFC0下,硬件写入断点,我们就能停在OEP的第二句处!!
下面我们来举个例子,就脱壳进阶第一篇吧!
载入OD后,来到这里:
0040D042N> B800D04000 moveax,Notepad.0040D000//停在这里
0040D047 684C584000 pushNotepad.0040584C
0040D04C 64:FF3500000000pushdwordptrfs:[0] //第一次硬件中断,F9
0040D053 64:892500000000movdwordptrfs:[0],esp
0040D05A 66:9C pushfw
0040D05C 60 pushad
0040D05D 50 pusheax
直接对0012FFC0下硬件写入断点,F9运行。(注意硬件中断)
在0040D04C第一次硬件中断,F9继续!
更多精彩
赞助商链接