能力值:
( LV2,RANK:10 )
|
-
-
2 楼
copy("AA\x05\x10\x40");
我感觉是这个赋值有问题,可是不知道该怎么写 谢谢
|
能力值:
( LV4,RANK:50 )
|
-
-
3 楼
copy("AA\x01\x01\x02\x03\x04\x01\x02\x03\x04\x05\x40\x10\x40");
我的地址是0x401040
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
请问你x01\x01\x02\x03\x04\x01\x02\x03\x04\x05\这个是什么意思? 我是在win7下 所以地址和你不同 请教
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
我按照你的代码加上前面的还是不行啊 请教
|
能力值:
( LV4,RANK:50 )
|
-
-
6 楼
这个只能覆盖main函数的返回地址
你用OD调一下就知道了
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
我来猜一下
应该是copy("AA\x01\x02\x03\x04\x05\x06\x20\x10\x40");
str[2]在地址[ebp-4]处,占用两个字节,要对齐成4个字节,返回地址在[ebp+4],还要覆盖掉[ebp]的4个字节,所以要6个字节才能到达copy的返回地址。
这台机子没编译器,地址是我猜的,copy()的地址应该是401000,msg()的地址应该是401020,main()的地址应该是401040,直接用cl编译应该是这种情况。
不过这样的话msg的返回地址就乱了,应该会在弹出MessageBox后再弹出一个出错框吧。
|
能力值:
( LV7,RANK:110 )
|
-
-
8 楼
copy("\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xAA\x05\x10\x40");
Debug版
|
能力值:
( LV7,RANK:110 )
|
-
-
9 楼
为啥只能覆盖main的返回地址 不理解
|
能力值:
( LV4,RANK:50 )
|
-
-
10 楼
编译出来的代码不一样吧
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
谢谢你 用你这个是完全可以达到目的的 能解释一下吗
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
[QUOTE=xiilin;856627]我来猜一下
应该是copy("AA\x01\x02\x03\x04\x05\x06\x20\x10\x40");
str[2]在地址[ebp-4]处,占用两个字节,要对齐成4个字节,返回地址在[ebp+4],还要覆盖掉[ebp]的4个字节,所以要6个字节才能到达copy的返回地址。
这台机子没...[/QUOTE]
你的这个在我的机子上也是可以的 但是你和kkmylove填充的字节数不一样 但是效果相同呢 谢谢
|
能力值:
( LV3,RANK:20 )
|
-
-
13 楼
copy函数前的返回地址 如图 00401124
目的是要覆盖他
copy函数后的返回地址 如图 00401005 就是int msg(void)那个函数的地址
但是我不知道多余的覆盖会不会出问题0013ff28 那个地址也覆盖了
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
不一样么?一样的啊,都是填充了8个字节然后覆盖到位于[ebp+4]的返回地址。
终于换了这台机子,哈哈,有编译器了~恶搞一下。
copy("\x83\xec\x08\xe9\xa8\x8f\xff\xff\x20\x10\x40");
加了两条指令,刚好8个字节,构成一个死循环:-)
83 ec 08 sub esp,8
e9 a8 8f ff ff jmp 00401000
不过倒是发现一点挺好玩的,很显然字符串"\x83\xec\x08\xe9\xa8\x8f\xff\xff\x20\x10\x40"在.data区段,这个区段应该是不可执行的啊,为什么这里却可以执行?求指点。
上传附件,源代码和可执行文件。
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
[QUOTE=xiilin;856627]我来猜一下
应该是copy("AA\x01\x02\x03\x04\x05\x06\x20\x10\x40");
str[2]在地址[ebp-4]处,占用两个字节,要对齐成4个字节,返回地址在[ebp+4],还要覆盖掉[ebp]的4个字节,所以要6个字节才能到达copy的返回地址。
这台机子没...[/QUOTE]
你这里填充的是7个字节啊AA\x01\x02\x03\x04\x05\x06是7个字节 不是八个 所以我说不一样的 呵呵
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
回复 xiilin
83 ec 08 sub esp,8
e9 a8 8f ff ff jmp 00401000
你这个跳转有问题啊 401000的16进制是061e68 在我机上运行你的附件会直接死掉
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
AA相当于\x41\x41,是放在你的str[2]里的,按照你的1L的格式写成AA了,不是\xAA
估计是你编译的时候"\x83\xec\x08\xe9\xa8\x8f\xff\xff\x20\x10\x40"这个字符串存放的地址跟我的不一样,我编译出来的偏移地址在00408050处存放的字符串,sub指令占用了3个字节,jmp指令是5个字节,就到了00408058了,所以00401000 - 00408058 = 8FA8,符号位扩展后就是FFFF8FA8了,根据你的偏移地址修改一下E9后面的数据吧,或者直接下载我上传的那个附件里面的exe然后调试。
效果只是不停地溢出,不停地执行msg()而已。
00408050 83EC 08 sub esp, 8
00408053 - E9 A88FFFFF jmp 00401000
00408058 2010 and byte ptr [eax], dl
0040805A 40 inc eax
0040805B 0000 add byte ptr [eax], al
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
感觉还是字符的问题!
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
[QUOTE=xiilin;857305]AA相当于\x41\x41,是放在你的str[2]里的,按照你的1L的格式写成AA了,不是\xAA 估计是你编译的时候"\x83\xec\x08\xe9\xa8\x8f\xff\xff\x20\x10\x40"这个字符串存放的地址跟我的不一样,我编译出来的偏...[/QUOTE]
你的字符串的存储地址是怎么算出来的啊 怎么找到的 谢谢
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
调试的时候就可以看到啊,调用copy()时不是要先把字符串地址压栈么,这个就是啊。
只是恶搞一下而已,没啥实用性,呵呵,copy()返回时,返回到了msg(),而msg()返回时,恰好返回到了408050这个字符串地址。如果是学习的话,建议还是把返回地址覆盖到jmp esp,然后把shellcode写到后面吧,我也是初学溢出,说不出啥来,还是自己多调试吧。
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
我调试的时候也把内存窗口调出来了啊 可是不知道该怎么去找那个字符串的地址 我在调试这块很弱 能说的细致一点吗 谢谢了
|
|
|