首页
社区
课程
招聘
[原创]关于关闭DEP
2013-1-19 10:41 2612

[原创]关于关闭DEP

2013-1-19 10:41
2612
近日在看0day安全:软件漏洞分析技术,里面介绍了如何关闭DEP,有一个办法是调用函数LdrpCheckNXCompatibility,下面是我根据书中的例子调试的结果:

这是在调用ret返回前的堆栈情况
  esp地址          内 容
0012FEAC      90909090
0012FEB0       7c92e270
0012FEB4        77ecfd43
0012FEB8        77e06a71
0012FEBC       7dd18930
0012FEC0       7c93be24
0012FEC4       ffff33e9
0012FEC8       909090ff

......
......
0012FEEC

1. ESP: 0012FEB0
EBP: 90909090
这里是执行到ret时的状态,ebp指向0012FEAC, 执行指令“mov esp, ebp”和“pop ebp”后,esp指向了0012FEB0,而ebp指向了90909090; 后面关闭DEP的函数要用到ebp,所以要重置ebp,使其指向一个可写的地址。
2. ESP: 0012FEB4
EBP: 90909090
这个步骤显示了执行ret后寄存器的值,执行ret指令后,从esp指向的栈底取出指令地址并放在了eip中,同时esp+4
3. ESP: 0012FEB8
EBP: 90909090
地址7c92e270指向的指令是”mov eax, 1; ret;”, 将eax置一,是为了满足关闭DEP的条件;ret后,esp指向了0012FEB8
4. ESP: 0012FEC0
EBP: 0012FEB8
上步的ret指令后,esp变成了0012FEB8,同时将eip指向了77ecfd43,该地址的指令是”push esp; pop ebp; ret 4”,用于调整ebp;在执行到ret 4时,esp变成了0012FEB8,ebp也变成了0012FEB8;ret 4后,esp变成了0012FEC0
5. ESP: 0012FEEC
EBP: 0012FEB8
上步的ret 4指令后,eip指向了77e06a71,该地址的指令是”ret 28”,用于增大esp,避免在关闭DEP过程中破坏ebp中的值,执行ret 28后,ESP指向了0012FEEC
6. ESP: 0012FEC4
EBP: 77E06A71
上步的ret 28指令后, eip指向了7c93be24,该地址的指令是关闭DEP,最后的几条指令是”leave; ret 4”,执行leave后esp指向0012FEBC,和ebp指向77E06A71, ret 4后,esp指向0012FC4;
7. ESP: 0012FEC4
EBP: 77E06A71
上步的ret 4指令后, eip指向了7dd18930,该地址的指令是”jmp esp”, 而这时esp指向了0012FEC4,所以eip指向了0012FEC4,并从该地址取出指令“jmp ”,跳转到shellcode的起始地址开始执行;

[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回