---
# System prepended metadata

title: HW 0x03 Write Up
tags: [Course, CS, NCTU, SecureProgramming]

---

###### 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

