Day 4 — 逆向工程 (Reverse Engineering)

重點整理

主題核心概念重要工具/技術備註
逆向工程靜態字串分析、觀察程式流程、條件判斷與 key checkfile, 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}

Built with LogoFlowershow