众所周知
题目
众所周知,众所周知开头的题目都是我出的,真的是这样吗?
解题报告
先运行,发现直接输出No。
用IDA
打开后直接查找“No”字符串,再找到这个字符串出现的位置。
但此时发现无法F5显示C代码,证明代码中有异常,导致IDA未能正常解析。
浏览一下当前函数的汇编码后就可以发现存在花指令。
用IDA
的patch
功能patch
掉花指令,保存后重新加载文件就可以用F5查看C代码了。
可以看到代码之后,认真看代码,可知:
该程序首先对输入的字符串(flag)进行映射,得到的结果是个数字数组然后把这些数字作为系数,对多项式进行离散傅里叶变换,得到的结果是个复数数组然后强行对该复数数组的内存空间进行base64
,得到的结果是个字符串,即key
所以,简单地逐步逆向回去就可以得到flag:
VlRCYVQxSkdXa1pYYW1SclVsZG9jMXBzYURCaGJWcFpaRWhrVm1KVWJIVldWekZIWkVkVmQwMVlRbFZoZWxVMVdsUkNORkZzVW5SYVJFWmFWa1ZzTmxSVVRYZFFVVDA5
但这不是真正的flag,还需要base64
解码5次(防止强行爆破flag)
Flag
HSCTF{tHe}{c}{pRogRam{MiNN}{LANgua233}