Simple Reverse 0x06(Lab - AMessageBox)
Background
Recon
這一題其實以逆向的角度來說很簡單
- 先用DIE看一些資訊
發現有加UPX的殼,這件事情可以透過IDA更加確定
可以看到Function Name只有start然後反組譯的地方看起來很噁心,那應該就是在拆殼的步驟 - 先執行看看
需要輸入flag然後用一個message box噴錯 -
用x64-dbg
透過TA的講解,可以知道這一題不需要解殼,只需要用動態debugger看一下就可以了
-
我們知道題目有使用到message box的API,所以我們可以先鎖定該API在哪邊呼叫,再往回trace出他的判斷
我們可以利用符號的視窗看到這支程式有用到那些API Module(.dll),而message box的API是在
user32.dll,用下面的搜尋可以縮小範圍,但這個多種類的messagebox,具體來說是用哪一個也不知道,所以可以全選後都設立中斷點
- 剩下的就是跟一般debugger差不多的操作,當追到call messagebox之前的break point時,可以看一下call stack(呼叫堆疊)往前trace是誰呼叫了API,發現是
00C7110B,點進去看一下可以明顯看到Correct/Wrong的字樣,所以可以判斷應該是這一段程式在判斷我們輸入的東西

-
分析判斷的程式
這裡就是要考驗耐心和不斷的觀察register的變化,認真看大概花個半小時就可以知道這一段在幹嘛(我就菜QAQ)

- 結論是中間的那些==重要的操作==其實就是左旋轉+XOR
0x87這樣而已,所以我們就可以開寫腳本了,把東西反著作回去就好了
-
Exploit
1 | |
Flag: FLAG{8699314d319802ef792b7babac9da58a}