题目来源:https://adworld.xctf.org.cn/task/answer?type=reverse&number=4&grade=1&id=4881&page=1攻防世界hackme
拖入IDA利用字符串搜索找到主要部分
可以看出这个dowhile循环是主要的难点,sub_406D90难以看懂(IDA显示可能不一样)。但实际上可以发现,v6无论是什么,对于输入和目标都是一样的,v6具体是什么其实是可以忽略的。只需要直接进行逆向就可以了。
给出代码:
goal=[0x5f,0xf2,0x5e,0x8b,0x4e,0xe,0xa3,0xaa,0xc7,0x93,0x81,0x3d,0x5f,0x74,0xa3,0x9,0x91,0x2b,0x49,0x28,0x93,0x67]
flag=''
for i in range(22):
x=0
j=0
while j<=i :
x=1828812941 * x + 12345
j+=1
flag+=chr((x^goal[i])&0xff)
print(flag)