下载文件得到两个文件,一个无后缀的level1和一个output的txt文件,推测level1应该是可执行文件
打开output看看
查壳
level1拖到die里分析,无壳,直接进ida分析
ida分析
进来之后识别到了main函数,直接f5反编译看看伪代码
分析一下代码,概括来说就是以只读方式打开一个叫做flag的文件,读取字符存储到ptr数组中,之后对ptr中的字符,为奇数或偶数分别按相应的规则输出。
很明显flag这个文件我们没有,但是有一个output的txt文件,很有可能输出的数就存放在output中,带着这个假想,我们写脚本反推一下原flag:
key = [198, 232, 816, 200, 1536, 300, 6144, 984, 51200,
570, 92160, 1200, 565248, 756, 1474560, 800, 6291456,
1782, 65536000]
for i in range (1, 20):
if(i % 2 == 0):
print(chr(key[i-1] // i),end='')
else:
print(chr(key[i-1] >> i), end='')
运行结果:ctf2020{d9-dE6-20c}
替换成flag{d9-dE6-20c}即可