一般,压缩壳在执行加壳代码的开始和结束位置,分别会有 pushad 和 popad 来保存所有的寄存器环境,利用这一点,可以定位到程序真正入口代码的位置。

–>练习程序下载

打开程序后,程序的入口点就是汇编指令 pushad,下面的都是加壳代码。

关于 ESP 定理

执行 pushad 指令后,寄存器全部都入栈,此时栈顶以下的位置都存储了寄存器的环境。当加壳结束时,程序一定会恢复环境。所以,在右侧寄存器位置点击数据窗口跟随,再在栈顶位置下 硬件访问断点

关于 ESP 定理

关于 ESP 定理

按下 F9 键,可以看到断下的代码处恰好有汇编代码popad。再往下走就是主程序的代码了。

关于 ESP 定理

此时,如果如果使用 dump 功能,就可以将 dump 出脱壳的程序了。

关于 ESP 定理

该程序是 32 位程序,需要在 32 位系统下 dump。由于加壳程序都会将 导入表 抹去,所以 dump 时需要选中恢复导入表

dump可恢复导入表的 OD


后记:esp定理不一定只应用于开头只有 pushad 指令的程序,即使开头是 push eax,由于加壳结束后,一定会平到原来的栈,所以也会断到入口处。

如何对抗

只要将原来栈顶的数据复制到栈顶的以上部分,加壳结束后,以新的栈顶为起点,那么下的硬件断点就断不下来了。

关于 ESP 定理

相关文章:

  • 2022-03-15
  • 2021-11-23
  • 2021-05-23
  • 2021-05-30
  • 2021-09-11
  • 2021-11-15
  • 2021-11-30
  • 2021-06-23
猜你喜欢
  • 2021-07-25
  • 2022-12-23
  • 2021-11-10
  • 2021-12-10
相关资源
相似解决方案