1. 程式人生 > >南郵CTF逆向題第六道WxyV2解題思路

南郵CTF逆向題第六道WxyV2解題思路

如題

看提示應該與第四道題WxyVM一樣是ELF檔案 那麼我們直接上IDAx64

首先找到main函式

還是習慣性檢視下可疑字串

按下F5檢視虛擬碼(中間有大段 我省略截圖了)

這次就不一行一行分析了 大致意思是:

獲取一個字串存放到地址694100處

限制長度為25

那麼如果要對這個字串進行操作 只會從694100進行相應操作 那麼其他的自然就是混淆我們 又可以清楚的看到 有效的操作都是以byte型進行 那麼dword的我們直接過濾掉即可

a =[0xffffffC0,0xffffff85,0xffffffF9,0x6C,0xffffffE2,0x14,0xffffffBB,0xffffffe4,

0xd,0x59,0x1c,0x23,0xffffff88,0x6e,0xffffff9b,0xffffffca,0xffffffba,0x5c,0x37,0xffffffff,0x48,0xffffffd8,0x1f,0xffffffab,0xffffffa5]

f = open('key.txt')#過濾後的txt文字自增自減的直接格式改下

for b in f.readlines()[::-1]:

if b[3]=='+':

if'x'in b:

a[int(b[:2],16)]-= int(b[8:],16if'x'in b else10)

else:

a[int(b[:2],16)]-= int(

b[6:],10)

if b[3]=='-':

if'x'in b:

a[int(b[:2],16)]+= int(b[8:],16)

else:

a[int(b[:2],16)]+= int(b[6:],10)

if b[3]=='^':

if'x'in b:

a[int(b[:2],16)]^= int(b[8:],16)

else:

a[int(b[:2],16)]^= int(b[6:],10)

flag =""

for i in a:

flag += chr(i%256)

print flag

flag:nctf{th3_vM_w1th0ut_dAta}