-
-
[原创]关于关闭DEP
-
发表于: 2013-1-19 10:41 3002
-
近日在看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的起始地址开始执行;
这是在调用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的起始地址开始执行;
赞赏
他的文章
- [原创]关于关闭DEP 3003
- 扫雷之我析 3520
- [推荐]零日漏洞分析第二版可以网购拉 1151
- [原创]自己动手给MS06-040漏洞打补丁(申请邀请码) 1830
看原图
赞赏
雪币:
留言: