###### tags: `NCTU` `CS` `Course` `SecureProgramming` HW 0x03 Write Up == yysung ## [Lab 3-1] Bof by SEH 程式使用 gets 讀入字串,所以可以使用 Buffer overflow 來進行攻擊 flag 藏在 `0x401000` 之下,底下有一堆 `nop`,可以跳到 `0x402020` 來印出 flag 因為有開啟 canary,所以不能直接把 return address 用 `0x402020` 蓋住 可以將 SEH 的 current handler 蓋成 `0x402020` 並觸發 exception 讓程式跳過去,就會印出 flag 了 ## [Lab 3-2] Deobfuscation 先搜尋 `looking for something?` 字串找到 func address `0x401000` 程式內有許多混淆,第一個遇到的混淆是 `0x401015~0x40102C` 該混淆是將接下來要執行的 address 推上 stack 並使用 call 跳過去後還原 stack 所以將該段程式碼 patch 成 `nop` 後 ida pro 就可以正常反編譯 接下來執行 patch 過的程式就會印出 `Sorry, there's no flag :(` 程式先執行了三次 `0x40106A` 後再印出上述文字 直接 patch 程式跳過該段程式碼到 `0x40106E` 後再反編譯就可以看出 flag 的生成方法了 ## [HW 0x03] De-de-deobfuscation 開啟程式後會印出 `SECRET CODE: BHEC [L4IA[S4VO[%W[W4[AE^][y` 追蹤程式執行後,會發現 secret code 分別 xor 4 就是 flag