1. 程式人生 > >南郵CTF WxyVM

南郵CTF WxyVM

拿到題目,用IDA開啟,F5d得到如下程式碼

第一個函式先對輸入進行encode
下面進行依次比較。

開啟encode函式
這裡寫圖片描述
三個數字一組,進行操作。
於是dump出資料寫出指令碼。

import struct

checkData = open("checkData","rb")
data = checkData.read(1)
checkls = []
while data != "":
    checkls.append(struct.unpack("b",data)[0])
    data = checkData.read(1)
checkData.close()

encodeData = open
("encode","rb") encodels = [] data = encodeData.read(1) while data != "": encodels.append(struct.unpack("b",data)[0]) data = encodeData.read(1) encodeData.close() i = 15000-3 while i>0: v1 = encodels[i] v2 = encodels[i+1] v3 = encodels[i+2] i -= 3 if v1 == 1: checkls[v2*4
] -= v3 elif v1 == 2: checkls[v2*4] += v3 elif v1 == 3: checkls[v2*4] ^= v3 elif v1 == 4: checkls[v2*4] /= v3 elif v1 == 5: checkls[v2*4] ^= checkls[v3] else: continue ans = [] for item in [chr(x%256) for x in checkls]: if ord(item) == 255
or ord(item)==0: continue ans.append(item) print "".join(ans)

主要是注意v2需要乘以4,因為這裡checkData是int型別。
nctf{Embr4ce_Vm_?0in_R3}