Day 4 模擬比賽試題 — 逆向工程 (Reverse Engineering)


一、選擇題(共 5 題,每題 10 分)

第 1 題 拿到一個未知的執行檔時,逆向工程最標準的「起手式」是什麼?

  • A) 直接丟進 Ghidra 硬看組合語言
  • B) 執行程式並輸入超長字串測試崩潰
  • C) 使用 file 確認格式,再用 strings 尋找明文字串
  • D) 使用 Wireshark 監聽網路封包

第 2 題 在終端機中,strings 指令在逆向工程中的主要作用為何?

  • A) 將二進位檔轉換為 Hex 格式
  • B) 從二進位執行檔中抽取人類可讀的明文字串(如寫死的密碼)
  • C) 計算檔案的 SHA256 雜湊值
  • D) 動態修改程式的記憶體

第 3 題 ICOA 提倡的逆向工程解題心態,下列何者最正確?

  • A) 先看懂程式流程與條件判斷,切忌一開始就盲目硬拆組合語言
  • B) 必須熟背 x86 組合語言的所有指令才能解題
  • C) 只能依賴圖形化介面工具,終端機無法進行逆向
  • 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 實作題(共 3 題,每題 20 分)

Challenge 1:寫死的秘密 (Hardcoded Secret)

情境: 你拿到一個 Linux 執行檔 check_key.bin,執行時提示輸入密碼。 懷疑開發者將密碼以明文寫死在程式中。 請使用終端機指令找出 Flag。

提示: strings + grep

Flag 格式: FLAG{strings_are_too_easy}


Challenge 2:翻轉的邏輯 (String Reversal)

情境: 驗證邏輯:輸入的字串反轉後必須等於 }FTC4IA_ver{GALF,驗證才成功。 請推導出正確的輸入字串。

提示: Python [::-1]

Flag 格式: FLAG{rev_AI4CTF}


Challenge 3:隱藏的判斷分支 (Flow Analysis)

情境: vault.exestrings 找不到完整 Flag(動態拼接)。 請將執行檔匯入 Ghidra,找出 main 函數的 if/else 條件判斷,還原 Flag。

提示: Ghidra → Functions → main → Decompile

Flag 格式: FLAG{gh1dra_c0ntr0l_fl0w}


答案

題號答案
第 1 題C
第 2 題B
第 3 題A
第 4 題B
第 5 題A
Built with LogoFlowershow