南郵CTF WxyVM
阿新 • • 發佈:2019-01-29
拿到題目,用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}