先查一下,没包,64位
IDA看伪代码
再看循环
可以测出i=5时v16为e560
而想让v16=0xffff,只需要ffff-e560就能得到v17[6] = 1a9f
所以flag就是1a9f!!
等下为什么啊我没懂啊
回到前面
v19既没有赋值也没有输入,内容是哪里来的呢
看看前面给变量分配的空间发现,s后面接的就是v19,而scanf没有指定输入长度,所以溢出的部分会覆盖v19的空间
我想不到啊
这样的
也就是说key前五个字符都是没用的,而最后一个字符又被赋0,也是没用的
再看看题目
合理推测key长这样:
flag{XXXX}
我想不到啊
这下就出来了 key = flag{1a9f}
可运行程序测试,得到OK(其实只要输入XXXXX1a9fX
都会得到OK,只是要能推出它的形式 推不出差不多能猜出来吧
参考(拜拜大佬):
[ctfshow]REVERSE逆向专栏
REVERSE-PRACTICE-CTFSHOW-2