关于 ESP 定理

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

–>练习程序下载

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

这里写图片描述

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

这里写图片描述

这里写图片描述

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

这里写图片描述

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

这里写图片描述

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

dump可恢复导入表的 OD


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

如何对抗

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

这里写图片描述

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页