首页
社区
课程
招聘
[原创]第六题 Repwn(缓冲区溢出)
发表于: 2019-3-13 09:16 3084

[原创]第六题 Repwn(缓冲区溢出)

2019-3-13 09:16
3084

通过查找字符串Please Input Your Key_ Now!,定位输入flag的位置:

查看检测flag的两个函数sub_4012F0((int)&v13)sub_401460(&v13)

这个函数已经确定第9到20位为X1Y0uN3tG00d,老版本的程序没有判断第21位,导致有多个解,3月12日下午更新过的程序加上了对21位的判断,这一位是H

这个函数判断flag的长度是否为24,如果是的话,调用sub_4013B0(int a1),把第1到8位转换成8个数字,判断其是否满足下面的条件:

解出这个三元一次方程,可得flags前8位是20101001,之后程序会修改flags第21到24位,使用strcpy把flags复制到Dest中造成栈溢出,影响返回值地址。到现在为止,已经推算出了flags的前21位是20101001X1Y0uN3tG00dH,flags的后4位会修改函数的返回地址(传说中的栈溢出/Stackoverflow)

代码段位置基本都是0x0040****,又已知flags[20]==0x48

flags[20]-0x58==(-0x10)==0xF0
flags[21]-0x46==__
flags[22]-0x03==0x40
flags[23]-0x6B==0x00

所以除了第22位暂不确定外,程序的flags是:20101001X1Y0uN3tG00dH_Ck,程序的返回地址是0x0040**F0,由于代码量比较少,查找调用putsprintf的代码段,找到一个可疑的地方0x00401BF0,这个地方并没有定义函数,也没有函数直接调用这里,所以这应该就是目标返回地址了。

带入计算可得flags[21]=0x46+0x1B='a',所以flags可能是20101001X1Y0uN3tG00dHaCk,输入程序中,返回Success_Please_Input_The_Flag

但是之前搜索字符串时,并没有找到类似Success的字符串,这是因为这个字符串也被混淆了,执行下面的脚本,可以解密出字符串来。

 
 

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2019-3-13 09:20 被Explorerl编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//