ESP定律脱壳

Posted 戴帽子的小孩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的壳,理论上我们都可以使用

 

  

以上是关于ESP定律脱壳的主要内容,如果未能解决你的问题,请参考以下文章

常用断点设置

ESP定律学习

手工脱壳之 未知IAT加密壳 IAT加密+混淆+花指令哈希加密OD脚本

crackme---攻防世界

手动脱KBys Packer(0.28)壳实战

手工脱壳之 PESpin加密壳SHE链硬件反调试IAT重定向混淆+花指令