种好心田自有收!
寻找真正的入口(OEP)--广义ESP定律
上一篇 / 下一篇 2008-03-07 17:15:51 / 个人分类:实训项目
寻找真正的入口(OEP)--广义ESP定律
MG u Phk2t8C0
t;GU7vv+O{vHQY0作者:Lenus个人博客---梅州教育城域网JB8[3?J]t Y
FROM: poptown.gamewan.com/bbs
{?*Hv%SvL?x0E-MAIL:Lenus_M@163.com
4qgi0k1X0
Q:_Qdx\01.前言
%b7[:[-k5FE0
(uo4l!G?0 在论坛上看到很多朋友,不知道什么是ESP定律,ESP的适用范围是什么,ESP定律的原理是什么,如何使用ESP定律?看到了我在个人博客---梅州教育城域网m4?hq3W&U^|,[
个人博客---梅州教育城域网)}peiG
http://poptown.gamewan.com/dispbbs.asp?boardID=5&ID=54&page=1个人博客---梅州教育城域网G(cAtQe(v+G"y{
个人博客---梅州教育城域网:?*P"Dpt
调查结果发现,大家对ESP定律很感兴趣,当然因为实在是太好用了,现在我就来告诉大家什么是ESP定律,它的原理是什么!!个人博客---梅州教育城域网]#n^%Bm:YX@
9X5Z7np%g!n ai6Y0BTW:在看完了手动脱壳入门十八篇了以后,再看这篇文章也许会对你更有帮助!个人博客---梅州教育城域网M$MXNr7x+V k
)c.L Fw6`}L.E0在下面地址下载:
8W)e4Hkc C y{0
c1N`5ucU/bu2y0http://soft.winzheng.com/SoftView/SoftView_23125.htm
ogeLQY1z0个人博客---梅州教育城域网Ua:X'W3m^n'W
2.准备知识
u3B0U*N;y-Uy0
bZ$Jh)tU$BJ0 在我们开始讨论ESP定律之前,我先给你讲解一下一些简单的汇编知识。个人博客---梅州教育城域网 BX \*{ L%r X_
1.call
[ cxF'e0 这个命令是访问子程序的一个汇编基本指令。也许你说,这个我早就知道了!别急请继续看完。
0`/TMu{"K M2c}}U0 call真正的意义是什么呢?我们可以这样来理解:1.向堆栈中压入下一行程序的地址;2.JMP到call的子程序地址处。例如:个人博客---梅州教育城域网v9]h'd!cYM_ Px
;Ui#{g^|_g000401029 . E8 DA240A00 call 004A3508个人博客---梅州教育城域网2[!k$gX6M
0040102E . 5A pop edx个人博客---梅州教育城域网inlK%\
在执行了00401029以后,程序会将0040102E压入堆栈,然后JMP到004A3508地址处!个人博客---梅州教育城域网$V:f&M1R6g$sR
个人博客---梅州教育城域网p6kEWd*O I'qZ
2.RET个人博客---梅州教育城域网E^IS+C8d v+iUvS
与call对应的就是RET了。对于RET我们可以这样来理解:1.将当前的ESP中指向的地址出栈;2.JMP到这个地址。个人博客---梅州教育城域网xl k~ R_'{/i~
"@.`(}1D"s:lF7u0 这个就完成了一次调用子程序的过程。在这里关键的地方是:如果我们要返回父程序,则当我们在堆栈中进行堆栈的操作的时候,一定要保证在RET这条指令之前,ESP指向的是我们压入栈中的地址。这也就是著名的“堆栈平衡”原理!
$H.xYSRe0
"~3[7H!T%},g!h"kG B03.狭义ESP定律
MG u Phk2t8C0
t;GU7vv+O{vHQY0作者:Lenus个人博客---梅州教育城域网JB8[3?J]t Y
FROM: poptown.gamewan.com/bbs
{?*Hv%SvL?x0E-MAIL:Lenus_M@163.com
4qgi0k1X0
Q:_Qdx\01.前言
%b7[:[-k5FE0
(uo4l!G?0 在论坛上看到很多朋友,不知道什么是ESP定律,ESP的适用范围是什么,ESP定律的原理是什么,如何使用ESP定律?看到了我在个人博客---梅州教育城域网m4?hq3W&U^|,[
个人博客---梅州教育城域网)}peiG
http://poptown.gamewan.com/dispbbs.asp?boardID=5&ID=54&page=1个人博客---梅州教育城域网G(cAtQe(v+G"y{
个人博客---梅州教育城域网:?*P"Dpt
调查结果发现,大家对ESP定律很感兴趣,当然因为实在是太好用了,现在我就来告诉大家什么是ESP定律,它的原理是什么!!个人博客---梅州教育城域网]#n^%Bm:YX@
9X5Z7np%g!n ai6Y0BTW:在看完了手动脱壳入门十八篇了以后,再看这篇文章也许会对你更有帮助!个人博客---梅州教育城域网M$MXNr7x+V k
)c.L Fw6`}L.E0在下面地址下载:
8W)e4Hkc C y{0
c1N`5ucU/bu2y0http://soft.winzheng.com/SoftView/SoftView_23125.htm
ogeLQY1z0个人博客---梅州教育城域网Ua:X'W3m^n'W
2.准备知识
u3B0U*N;y-Uy0
bZ$Jh)tU$BJ0 在我们开始讨论ESP定律之前,我先给你讲解一下一些简单的汇编知识。个人博客---梅州教育城域网 BX \*{ L%r X_
1.call
[ cxF'e0 这个命令是访问子程序的一个汇编基本指令。也许你说,这个我早就知道了!别急请继续看完。
0`/TMu{"K M2c}}U0 call真正的意义是什么呢?我们可以这样来理解:1.向堆栈中压入下一行程序的地址;2.JMP到call的子程序地址处。例如:个人博客---梅州教育城域网v9]h'd!cYM_ Px
;Ui#{g^|_g000401029 . E8 DA240A00 call 004A3508个人博客---梅州教育城域网2[!k$gX6M
0040102E . 5A pop edx个人博客---梅州教育城域网inlK%\
在执行了00401029以后,程序会将0040102E压入堆栈,然后JMP到004A3508地址处!个人博客---梅州教育城域网$V:f&M1R6g$sR
个人博客---梅州教育城域网p6kEWd*O I'qZ
2.RET个人博客---梅州教育城域网E^IS+C8d v+iUvS
与call对应的就是RET了。对于RET我们可以这样来理解:1.将当前的ESP中指向的地址出栈;2.JMP到这个地址。个人博客---梅州教育城域网xl k~ R_'{/i~
"@.`(}1D"s:lF7u0 这个就完成了一次调用子程序的过程。在这里关键的地方是:如果我们要返回父程序,则当我们在堆栈中进行堆栈的操作的时候,一定要保证在RET这条指令之前,ESP指向的是我们压入栈中的地址。这也就是著名的“堆栈平衡”原理!
$H.xYSRe0
"~3[7H!T%},g!h"kG B03.狭义ESP定律