Day 4 — 逆向工程 (Reverse Engineering)
Day 4 — 逆向工程 (Reverse Engineering)
重點整理
| 主題 | 核心概念 | 重要工具/技術 | 備註 |
|---|---|---|---|
| 逆向工程 | 靜態字串分析、觀察程式流程、條件判斷與 key check | file, strings, xxd, Ghidra | 先看懂流程,切忌一開始盲目硬拆組合語言 |
起手式流程
file <執行檔> → 確認格式(ELF / PE / Script)
strings <執行檔> → 抽取明文字串(密碼、Flag)
xxd <執行檔> → 查看 Hex 內容與特徵碼
Ghidra → 反編譯,分析 main 函數流程與條件判斷
學習建議
- 目標:建立
file → strings → 看流程固定起手式 - 練習平台:Crackmes.one、picoCTF Binary 題區
- 產出:自己寫一份「Reverse 題起手檢查表」
模擬比賽題目
一、選擇題(單選)
1. 拿到未知執行檔,逆向工程最標準的起手式是?
- A) 直接丟進 Ghidra 硬看組合語言
- B) 執行程式並輸入超長字串
- C) 使用
file確認格式,再用strings尋找明文字串 ✅ - D) 使用 Wireshark 監聽封包
2. strings 指令在逆向工程中的主要作用?
- A) 將二進位檔轉為 Hex 格式
- B) 從二進位執行檔中抽取人類可讀的明文字串 ✅
- C) 計算 SHA256 雜湊值
- D) 動態修改程式記憶體
3. ICOA 提倡的逆向工程解題心態,何者最正確?
- A) 先看懂程式流程與條件判斷,切忌一開始盲目硬拆組合語言 ✅
- B) 必須熟背所有 x86 組合語言指令
- C) 只能依賴 GUI 工具
- D) 遇到密碼驗證唯一解法是暴力破解
4. 程式驗證邏輯:x = "FLAG{py}"; print(x.replace("py","rev")),輸出為?
- A) FLAG{py}
- B) FLAG{rev} ✅
- C) rev{py}
- D) 程式報錯
5. 使用 xxd 的主要目的?
- A) 檢視 Hex 內容與特徵碼 ✅
- B) 進行 Base64 解碼
- C) 動態除錯
- D) 攔截 HTTP 請求
二、CTF 實作題
Challenge 1:寫死的秘密 (Hardcoded Secret)
拿到
check_key.bin,執行提示輸入密碼。懷疑密碼以明文寫死在程式中。 請用strings搭配grep抽取 Flag。
strings check_key.bin | grep FLAG
Flag 格式:FLAG{strings_are_too_easy}
Challenge 2:翻轉的邏輯 (String Reversal)
驗證邏輯:輸入字串反轉後需等於
}FTC4IA_ver{GALF請推導出正確輸入。
print("}FTC4IA_ver{GALF"[::-1])
Flag 格式:FLAG{rev_AI4CTF}
Challenge 3:隱藏的判斷分支 (Flow Analysis)
vault.exe用 strings 找不到完整 Flag(動態拼接)。 請用 Ghidra 匯入,找出 main 函數的 if/else key check 邏輯,還原 Flag。
Flag 格式:FLAG{gh1dra_c0ntr0l_fl0w}