-
-
[旧帖]
[求助]关于ESP定律的问题!
0.00雪花
-
发表于:
2009-7-5 15:15
2873
-
[旧帖] [求助]关于ESP定律的问题!
0.00雪花
广义ESP定律中这样说到:
首先,告诉你一条经验也是事实---当PE文件运行开始的时候,也就是进入壳的第一行代码的时候。寄存器的值总是上面的那些值,不信你自己去试试!而当到达OEP后,绝大多的程序都第一句都是压栈!(除了BC编写的程序,BC一般是在下面几句压栈)
现在,根据上面的ESP原理,我们知道多数壳在运行到OEP的时候ESP=0012FFC4。这就是说程序的第一句是对0012FFC0进行写入操作!
最后我们得到了广义的ESP定律,对只要在0012FFC0下,硬件写入断点,我们就能停在OEP的第二句处!!
我有个问题麻烦大家下!
为什么说多数壳运行到OEP的时候ESP=0012FFC4 ?
pushad 压栈后如下! ESP指向0012FFA4
0012FFA4 77F517E6 返回到 ntdll.77F517E6 来自 ntdll.77F78C4E //EDI
0012FFA8 77F51778 返回到 ntdll.77F51778 来自 ntdll.77F517B5 //ESI
0012FFAC 0012FFF0 //EBP
0012FFB0 0012FFC4 //ESP
0012FFB4 7FFDF000 //EBX
0012FFB8 7FFE0304 //EDX
0012FFBC 0012FFB0 //ECX
0012FFC0 00000000 //EAX
我的理解是 当popad 从栈中取出完数据的时候 栈指针ESP应该指向 0012FFC0啊!
为什么会是0012FFC4 呢?
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!