先查一下,没包,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



![[oeasy]python0022_框架标题的制作_banner_结尾字符串_end](https://img-blog.csdnimg.cn/img_convert/051e69a8e4105d4ccb63ba8cd3168f7c.png)

![[附源码]计算机毕业设计SpringBoot四川景区管理系统](https://img-blog.csdnimg.cn/75809f93d4a44f10a751f25ec11b5b89.png)



![[附源码]Python计算机毕业设计Django高校学生信息采集系统](https://img-blog.csdnimg.cn/8bcb7ef7aaec4c80b89eba5665431a0b.png)









