首页
社区
课程
招聘
[原创]CTF2017第二题分析(qwertyaa)
发表于: 2017-10-27 14:27 2841

[原创]CTF2017第二题分析(qwertyaa)

2017-10-27 14:27
2841

首先下载,拖入ida和od分析,以为是要使输入8个字符满足:

(a-b)*4+(a+c)=0xeaf917e2u

(a-b)*2+(a-b)+a+c==0xe8f508c8u

(a-b)*2+(a-b)+a-c==0x0c0a3c68u

观察后不难发现后两个式子可以解出c,然后去解出a和b:(大概根据数论理论,+-*操作假装没有算术溢出是没有关系的)

a=0x7473754au,b=0x726f6630u,c=0x6e756630u

改成字符,加上栈溢出攻击需要的11A,得到我们想要的key:Just0for0fun11A

v1 && v0 && v1 != v0 && 5 * (v1 - v0) + v1 == -1890567614 && 13 * (v1 - v0) + v0 == -279954878 && 
v1 && v0 && v1 != v0 && 17 * (v1 - v0) + v1 == -207009661 && 7 * (v1 - v0) + v0 == 866732163
然后做到怀疑人生,按同余方程去解解出两个互异的唯一解...根本无法同时满足...我甚至暴力都用了...
v1 && v0 && v1 != v0 && 5 * (v1 - v0) + v1 == -1890567614 && 13 * (v1 - v0) + v0 == -279954878 && 
v1 && v0 && v1 != v0 && 17 * (v1 - v0) + v1 == -207009661 && 7 * (v1 - v0) + v0 == 866732163
然后估摸着要另辟蹊径,莫非其实允许输入16个字符使得他们分别满足解?
尝试了一下得到以下结果:
马上反应过来有栈溢出啊,仔细一看scanf("%s",...),又看到处理成功的汇编代码的地址是0x40102F,于是得到key:123456781234/^P@(当时怀疑是不是多解?)

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

收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//