前言
继续ctf的旅程
攻防世界Reverse高手进阶区的2分题
本篇是elrond32的writeup
发现攻防世界的题目分数是动态的
就仅以做题时的分数为准了
解题过程
PE查壳
扔进IDA
一个验证输入
一个负责输出
跟进 8048769,这里需要 33*4=132=16*8+1
个字节的内容,即需要前往 hex 窗口中找 8 行加 1 个 4 字节的数据,还要注意小端序的问
题(还好这里每个 32bit 的前 3 个字节都是 0x00)
根据题意
得到脚本
a='ie ndags r'
x=0
s=[]
for i in range(8):
x=7*x%11
s.append(a[x])
x+=1
print(''.join(s))
data=[15, 31, 4, 9, 28, 18, 66, 9, 12, 68, 13, 7, 9, 6, 45, 55, 89, 30, 0, 89, 15, 8, 28, 35, 54, 7, 85, 2, 12, 8, 65, 10, 20]
for i in range(33):
print(chr(ord(s[i%8])^data[i]),end='')
得到flag:flag{s0me7hing_S0me7hinG_t0lki3n}
结语
逻辑比较清晰