2021年“綠城杯”網路安全大賽-Reverse-[warmup]easy_re
題目名稱:[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}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/304711.html
標籤:其他
