好友
阅读权限10
听众
最后登录1970-1-1
|
残情·离天
发表于 2015-9-30 21:34
楼主是新的不能再新的人,最近空闲了一些开始看官方培训视频。看了xiaomo的视频前两集,对ESP定律很感兴趣,于是搜了一些资料,希望能了解ESP定律的原理。实例解释用的就是官方培训第一课的UPX壳的程序。有任何不对的地方,还请各位大牛多多指点,新人求罩。第一次发帖,不符合规则的地方还版主大大请告诉我。
1. ESP是什么
ESP(Extended stack pointer)是指向当前栈的栈顶
EBP(Extended base pointer )指向系统栈最上面一个栈(当前栈)的底部。
2. ESP定律的原理
“堆栈平衡原理”
a. 基础知识[3]:
PUSHAD: 依次把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI等压入栈中
POPAD: 把栈中的值依次弹到EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX等寄存器中,栈需要状态还原。
OEP(Original Entry Point)程序的入口点
b. 实例解释
初始ESP:0012FFC4
执行完PUSHAD后的ESP:0012FFA4指向栈顶,此时寄存器的值被存放在0012FFC0~0012FFA4中,图片上用红圈圈出来了。
设置硬件访问断点,目的是实现在访问同一内存时,截获中断。我们希望在POPAD的时候截获中断,此时应当处于POPAD命令后,OEP之前。
然后再单步执行到ESP:0012FFC4的OEP,就可以脱壳了。
P.S. 硬件断点和内存断点的区别([1])
内存访问:你下断后OD把你下断的内存设置为不可访问,这样你下访问断点就异常,就被OD捕获.
内存写入:下这个断后OD把内存设置为不可写.然后捕获写入时产生的异常.
硬件断点:硬件断点是利用CPU中的DRx寄存器来设置的.硬件断点最多能同时设置4个
3. ESP定律的适用范围([2])
几乎全部的压缩壳,部分加密壳。只要是在JMP到OEP后,ESP=0012FFC4的壳,理论上我们都可以使用
一般可以认为[2]:
1、在命令行下断hr esp-4(此时的ESP就是OD载入后当前显示的值)
2、hr ESP(关键标志下一行代码所指示的ESP值(单步通过))
参考:
[1] http://bbs.pediy.com/archive/index.php?t-125305.html
[2] http://www.52pojie.cn/thread-294844-1-1.html
[3] http://blog.chinaunix.net/uid-20776863-id-121973.html
[4] http://www.52pojie.cn/thread-14335-1-1.html
OEP
|
-
刚载入OD时
-
ESP突变时
-
硬件断点
-
OEP前的JMP
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|