Creakme
main開頭第一個函數進行SMC。先查找區段.SCTF,然后調用DebugBreak下斷點。猜測是通過調試器附加的方式來修改。之后進入sub_402450進行SMC。
很容易寫個腳本還原:
from ida_bytes import get_bytes, patch_bytes
st = 0x404000
key = map(ord,list("sycloversyclover"))
for i in range(512):
tmp = ord(get_bytes(st,1))
tmp^=key[i%16]
tmp = ~tmp
patch_bytes(st,chr(tmp))
st+=1
修改的函數sub_404000在接下來的sub_4024A0中被調用到,可以發現它將之后的一串字符串修改為base64字符串
后面加密部分,很容易看出AES CBC,密文密鑰初始向量都有
from base64 import b64decode
from Crypto.Cipher import AES
key = b"sycloversyclover"
iv = b"sctfsctfsctfsctf"
aes = AES.new(key, mode = AES.MODE_CBC, iv = iv)
res = b"nKnbHsgqD3aNEB91jB3gEzAr+IklQwT1bSs3+bXpeuo="
cipher = b64decode(res)
tmp = aes.decrypt(cipher)
print(tmp)
得到flag:
sctf{Ae3_C8c_I28_pKcs79ad4}
2019SCTF-Writeup