首页
社区
课程
招聘
[原创]第二阶段第一题,第一次传错了东西,不好意思
发表于: 2007-8-29 12:12 6323

[原创]第二阶段第一题,第一次传错了东西,不好意思

2007-8-29 12:12
6323
由于要保证多操作系统下可用,所以覆盖掉的返回地址不能是堆栈中的地址,刚好后面的地址是文件的缓存指针,而且前两个字节xor 0x1C后变为EB 0x7C,只要修改0x7E处为相对跳转跳回缓存
区偏移量+8处的代码即可,前8字节应该是题目设计时就考虑过
缓存区偏移0处代码
00BD0000   /EB 7C           jmp     short 00BD007E
偏移7E处代码
00BD007E  ^\EB 88           jmp     short 00BD0008
便宜08处代码
00BD0008    B8 60024000     mov     eax, 400260                      ; ASCII "Failed!"
00BD000D    C700 4F4B2100   mov     dword ptr [eax], 214B4F
00BD0013    C740 08 4F4B210>mov     dword ptr [eax+8], 214B4F
00BD001A    33C0            xor     eax, eax
00BD001C    83EC 04         sub     esp, 4
00BD001F    8BEC            mov     ebp, esp
00BD0021    83C5 24         add     ebp, 24
00BD0024    68 83034000     push    400383
00BD0029    C3              retn
text.txt文件的前八个字节经过计算后eax需要等于0x0D才能保证修改ret的返回地址
加载vc32rtf后可以看到运算其实就是__int64的乘后取余,但由于第一步的相乘后产生了溢出,所以不能直接进行逆运算
由于给定的参数和0x10000000000000000的最大公约数为1,所以可以构造一个64位数使第一步的结果就为0x0D,这样第二步求余时由于0x0D小于给定的0x5BE6FF82A5164785,所以结果还是0x0D
求解使用的方法为寻找0x78CC02A869948F1B对0x10000000000000000的乘法逆元,e'=90B22DD80D53313
k=e'*d % f
k=0x7590C53F8AD397F7
所以文件的内容为
F7 97 D3 8A 3F C5 90 75 B8 60 02 40 00 C7 00 4F 4B 21 00 C7 40 08 4F 4B 21 00 33 C0 83 EC 04 8B
EC 83 C5 24 68 83 03 40 00 C3 90 90 90 90 90 90 F5 02 40 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 EB 88
长度 128字节

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
2
验证通过~~
2007-8-29 17:56
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
3
77.043842819286001800070338370959
2007-9-2 20:23
0
游客
登录 | 注册 方可回帖
返回
//