[GWCTF 2019]re3
查殼,64位無殼
然后進去發現主函數也比較簡單,主要是一個長度校驗,然后有一個mprotect函數,說明應該又是Smc,然后我們用腳本還原sub_402219函數處的代碼
import idc
addr=0x00402219
size=224
for i in range(addr, addr+size):idc.patch_byte(i, get_wide_byte(i)^0x99)
print("ok")
先看看sub_40207B函數,里面反復調用了sub_401CF9函數。
跟進看看sub_401CF9函數干了什么,一開始看見v5到v8這個樣子還以為是rc4的加密,看了后面的內容發現肯定不是rc4了,看了一下wp,說是md5加密的特征數
那似乎這個地方的大致邏輯就是對這些unk數據進行md5加密,唯一不同就是對base64表進行了兩次md5加密
然后被加密的表當作這里的a2被傳入了,這里感覺也不是標準的base64解碼的函數,特別是byte_4023A0是長度為256的數組,那么可以看出肯定不是base64了
用插件可以識別出aes的特征碼,
然后回頭看sub_402219函數,這個函數是,先對v4進行了一次處理,然后應該是將v4在sub_40196E這個函數進行了兩次加密,分別傳給了a1和a1+16,最后和byte這個密文進行對比
進入sub_40196E,發現下面存在AES特征,那就嘗試提取密文和密鑰
密鑰就是給aes加密生成sbox盒的東西,也就是兩次對表md5加密后的內容,這里嘗試動調解出unk_603170