Day 4 模擬比賽試題 — 逆向工程 (Reverse Engineering)
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.exe 用 strings 找不到完整 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 |