2016年9月11日 星期日

LabyREnth 2016 Windows 1

這是之前PaloAltoNetworks舉辦LabyREnth 2016 CTF的Windows部分第一題
執行檔看起來被UPX加殼過,但是不那麼單純,沒辦法直接用UPX程式脫


只好先用Olly動態慢慢追看看,來到殼的開頭,發現UPX殼的特徵:PUSHAD指令

一步一步追實在太慢了,於是試著搜尋後面有沒有POPAD指令




發現有POPAD指令,感覺應該的確是UPX殼無誤,下斷點執行過來


在POPAD後的JMP就會跳到OEP

 然後脫殼


修復IAT


程式主要邏輯的地方,是取sub_12911B0()的回傳值做正確與否的判斷



剛剛提到的sub_12911B0就是驗證輸入的函數,姑且命名為check,裡面有40個bytes的資料,還有驗證演算法的部分


有趣的是sub_1291130、sub_1291160、sub_1291190、sub_1291100都是做anti-debug,不過到了這邊都有演算法可以靜態分析了,應該有點於事無補吧XDD







將40個bytes的值與核心驗證演算法整理一下用C寫個計算程式

執行就可以看到flag囉(後面亂碼別介意)~


沒有留言:

張貼留言