寻找真正的入口(OEP)--广义ESP定律

http://tech.ddvip.com   2007年01月14日    社区交流 收藏本文

本文详细介绍寻找真正的入口(OEP)--广义ESP定律

  于是我们停在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继续!

来源:poptown.gamewan.com    作者:Lenus    责编:豆豆技术应用

正在加载评论...