首页
社区
课程
招聘
[原创]第二题WriteUp
2017-10-27 22:29 2333

[原创]第二题WriteUp

2017-10-27 22:29
2333
非常坑爹的题目……
乍一看程序流程很清晰,输入一个字符串,拆成两段,对对应的两个整数进行二元一次线性运算并比对。
使用z3解方程,然而……解出来带小数

改变思路,输入的字符到第12个字符以后,会栈溢出,覆盖返回地址,从而控制程序流程。
正好程序从0x413131开始,有大段的代码没有用到,故输入随便12个字符+11A来跳转。
从413131开始先是重新开了一个栈,然后有大量的跳转和花指令,故利用IDA的Trace来跟踪程序真实流程。

第一个真正的check点
设三段对应的整数分别为x, y, z, 有
(x - y) * 4 + x + z == 0xEAF917E2
构造一组满足不定方程的解,继续跟踪

第二个check点
方程为 (x - y) * 3 + x + z == 0xE8F508C8
由已知的两个方程可以解得x - y == 0x02040F1A, x + z == 0xE2E8DB7A
根据以上条件构造一组不定方程的解,继续跟踪

第三个check点
方程为 (x - y) * 3 + x - z == 0x0C0A3C68
根据已知条件解得 x - z == 0x05FE0F1A
联立x + z, x - z, 解得 x = 0x7473754A, z = 0x6e756630
再与x - y联立,解得y = 0x726f6630

连起来,为Just0for0fun,再加上11A,flag即为Just0for0fun11A

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞1
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回