第一次不看任何参考资料的情况下(关键是在网上找writeup也找不到)做出一道逆向题,特此记录
直接拖进IDA
找到关键字符串Congrs,点进去看函数
理解下函数逻辑:
v13=10->循环10次
Congras后面的v4应该就是结果
要使v14!=0,就要是37行中v9==v12^v8
v12的形成过程就是循环i次计算
v8可以理解成v4,就是结果
v9是byte_6B4270字符串,进去看看是什么
好了,现在可以写脚本了:
cmp=[0x5F,0xF2,0x5E,0x8B,0x4E,0x0E,0xA3,0xAA,0xC7,0x93,
0x81,0x3D,0x5F,0x74,0xA3,0x9,0x91,0x2B,0x49,0x28,
0x91,0x67]
string = [0]*22
v8 = ''
for i in range(22):
v12 = 0
for j in range(0,i+1):
v12 = 1828812941*v12+12345
v12 =v12 % 256
v8 += chr(cmp[i]^v12)
print(v8)
主义V12前是(unsigned __int8),所以要%256,也符合ASCII码的范围
得到flag{d826e6926098ef44}