-
-
[原创]CTF2017 第二题 ctf2017_Fpc writeup
-
发表于: 2017-10-27 12:47 3095
-
Just0for0fun
个人感觉这题需要一点猜迷成分……先说错误解好了
所以目测是需要过两个check,check1, check2. get_input 会把输入存到栈上,这里有个scanf的溢出之后正确解会用到
check1
直接z3就可解出解 v1 = 0x6f503a42, v2 = 0xcf503a42,但因为是二元一次方程,所以只有一个唯一解
check2
同理,z3可解得 v1 = 0xb3a94883, v2 = 0x73a94883,同上,也是唯一解
这下问题就来了……由于我们输入只有一次,所以check1和check2必须同时过才行,但是check1和check2的解不一样,所以我们无法达成两个都满足的条件,加上两组解都不是完全在可打印字符串内,说明这两个函数是坑,此题有别的解法……
下面说正确解,回到IDA的hex view,往下滚,发现有很大一部分的.text 没有用到,这就让人感觉很奇怪,跳到第一个没有用到的并且不是0的命令c一下,发现是ret,紧跟着是add esp,0xfffffff0h
之后的两个指令很有意思,不管OF是什么状态我们一定会跟着其中一个走,手动双击几回,我们会发现
jo这个分叉会走 0x413160->0x41314d->0x413165->0x413146->0x413150 (途中会有多个jo指令)
jno这个分叉会走 0x413158->0x413141->0x413149->0x41313c->0x41315a->0x413150 (途中会有多个jno指令)
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
他的文章
谁下载
看原图
赞赏
雪币:
留言: