WEB开发网
开发学院网络安全黑客技术 寻找真正的入口(OEP)--广义ESP定律 阅读

寻找真正的入口(OEP)--广义ESP定律

 2007-01-14 16:44:36 来源:WEB开发网   
核心提示:1.前言略……2.准备知识在我们开始讨论ESP定律之前,我先给你讲解一下一些简单的汇编知识,寻找真正的入口(OEP)--广义ESP定律,1.call这个命令是访问子程序的一个汇编基本指令,也许你说,一定要保证在RET这条指令之前,ESP指向的是我们压入栈中的地址,这个我早就知道了!别急请继续

1.前言

略……

2.准备知识

在我们开始讨论ESP定律之前,我先给你讲解一下一些简单的汇编知识。

1.call

这个命令是访问子程序的一个汇编基本指令。也许你说,这个我早就知道了!别急请继续看完。

call真正的意义是什么呢?我们可以这样来理解:1.向堆栈中压入下一行程序的地址;2.JMP到call的子程序地址处。例如:

00401029  . E8DA240A00  call004A3508
0040102E  . 5A      popedx

在执行了00401029以后,程序会将0040102E压入堆栈,然后JMP到004A3508地址处!

2.RET

与call对应的就是RET了。对于RET我们可以这样来理解:1.将当前的ESP中指向的地址出栈;2.JMP到这个地址。

这个就完成了一次调用子程序的过程。在这里关键的地方是:如果我们要返回父程序,则当我们在堆栈中进行堆栈的操作的时候,一定要保证在RET这条指令之前,ESP指向的是我们压入栈中的地址。这也就是著名的“堆栈平衡”原理!

3.狭义ESP定律

ESP定律的原理就是“堆栈平衡”原理。

让我们来到程序的入口处看看吧!

1.这个是加了UPX壳的入口时各个寄存器的值!

EAX00000000
ECX0012FFB0
EDX7FFE0304
EBX7FFDF000
ESP0012FFC4
EBP0012FFF0
ESI77F51778ntdll.77F51778
EDI77F517E6ntdll.77F517E6
EIP0040EC90note-upx.<ModuleEntryPoint>
C0 ES002332bit0(FFFFFFFF)
P1 CS001B32bit0(FFFFFFFF)
A0 SS002332bit0(FFFFFFFF)
Z0 DS002332bit0(FFFFFFFF)
S1 FS003832bit7FFDE000(FFF)
T0 GS0000NULL
D0
O0 LastErrERROR_MOD_NOT_FOUND(0000007E)

2.这个是UPX壳JMP到OEP后的寄存器的值!

1 2 3 4 5  下一页

Tags:寻找 真正 入口

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接