ESP定律脱壳

   ESP定律是比较常用的脱壳方式,作为新手用的也比较多简单写一下我的看法。

  esp定律的使用过程大致为:

    1.开始就点F8,注意观察OD右上角的寄存器中ESP有没突现(变成红色),并且只有sp和ip为红色。

    

    2.Command窗口中输入dd 0012FFA4 后回车,跟随esp寄存器后的地址。

    3.选中下断的地址,断点--->硬件访--->WORD断点

    4.按一下F9运行程序,直接来到了跳转处,按下F8,到达程序OEP(程序入口)

  花了很长时间理解了一下原理,简单谈一下,可能有错。

我们把壳理解为一个对程序进行压缩和解压的子程序,相当于调用call指令:call xxxx,call指令遵循堆栈平衡,所以esp作为堆栈指针,程序前后入栈和出栈必须相同。

可刚开始的程序:

0040D000  60 pushad //注意这里ESP=0012FFC4(入栈)

0040D001 E8 00000000 call ASPACK.0040D006 //ESP=0012FFA4
PUSHAD就是把所有寄存器压栈!我们在到壳的最后看看:
代码:
0040D558 61 popad //ESP=0012FFA4(出栈)
0040D559 75 08 jnz short ASPACK.0040D563 //注意这里ESP=0012FFC4

我们在0012ffa4处设置下物理断点,壳在出栈时调用ESP=0012FFC4是截断。按下f8到达程序入口。

适用范围:

几乎全部的压缩壳,部分加密壳。只要是在JMP到OEP后,ESP=0012FFC4的壳,理论上我们都可以使用

  

原文地址:https://www.cnblogs.com/hatkids/p/8886325.html