首页
社区
课程
招聘
[原创]第二阶段第二题解答
发表于: 2007-8-28 23:12 6937

[原创]第二阶段第二题解答

2007-8-28 23:12
6937
首先确定test.txt文件前8个字节。因为52个字节长度正好覆盖到返回地址,而不破坏其他的栈数据。因此首先计算((x*0x78CC02A869948F1B)%(2^64))%0x5BE6FF82A5164785=0x0D

然后发现异或转换后,前两个字节一定是是EB 7C,正好是个跳转指令。

又发现在EXE代码中地址0x04002B8正好是JMP ESI指令,而ESI正好指向test.txt的文件内容。

因此用这个地址的值,覆盖函数返回地址,这样就保证了通用性,和windows系统无关。

因为此时EBP的内容也被破坏,为了可以重复利用,shellcode中需要恢复EBP的内容。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 99
活跃值: (2568)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
进一步优化,让覆盖多28个字节,最少只能也只能是28个字节。找到合适的前8个字节数据,转换后的指令不是EB 7C了,而是7B 72,是个JNP指令。
此时CPU的P标志是1,这个指令不会跳转。多出的28个字节必须用0填充,恰好VirtualAlloc分配的内存初始都是0,这样0就不需要写在文件里了。因此可以优化到最小尺寸51个字节。
上传的附件:
2007-8-29 06:58
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
3
验证通过~~
2007-8-29 07:54
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
4
111.65922595320097528252866723757
2007-9-2 21:07
0
游客
登录 | 注册 方可回帖
返回
//