题目名称:[warmup]easy_re
题目内容:热身题,逆向
题目分值:100.0
题目难度:容易
相关附件:[warmup]easy_re的附件.zip
main函数看到最后发现关键比较
分析得知v21是输入,v16是大数数组
这里ida将v16后面的值分成了别的变量,实际上也在v16之中
前两个循环用python模拟得到了v24的值
v16=[ 0xF5, 0x8C, 0x8D, 0xE4, 0x9F, 0xA5, 0x28, 0x65, 0x30, 0xF4, 0xEB, 0xD3, 0x24, 0xA9, 0x91, 0x1A, 0x6F, 0xD4, 0x6A, 0xD7, 0x0B, 0x8D, 0xE8, 0xB8, 0x83, 0x4A, 0x5A, 0x6E, 0xBE, 0xCB, 0xF4, 0x4B, 0x99, 0xD6, 0xE6, 0x54, 0x7A, 0x4F, 0x50, 0x14, 0xE5, 0xEC] v23="tallmewhy" v24=[] v22=[] for i in range(256): v24.append(i) v22.append(ord(v23[i%len(v23)])) v6,v7=0,0 while v6<255: v8=v24[v6] v7=(v7+v22[v6]+v8)%256 v24[v6] = v24[v7] v6 += 1 v24[v7]=v8^0x37
最后一个循环有一个异或,输入和v24按字节异或,得到的和v16比较
直接将v16和v24异或得到输入
v12=0 v9,v10,v20=0,0,0 while v12+1<42: v9=(v9+1)%256 v11=v24[v9] v10=(v10+v11)%256 v24[v9]=v24[v10] v24[v10] = v11 v12 = v20 v16[v20]^=v24[(v11+v24[v9])&0xff] v16[v12]=chr(v16[v12]) v20 = v12 + 1 print(''.join(v16))
print得到flag{c5e0f5f6-f79e-5b9b-988f-28f046117802}