Provides reverse engineering techniques for CTF challenges. Use when the main job is to understand how a compiled, obfuscated, packed, or virtualized target works before exploiting or solving it, including binaries, APKs, WASM, firmware, custom VMs, bytecode, game clients, malware-like loaders, and anti-debug or anti-analysis logic. Do not use it when the vulnerability is already understood and the remaining task is exploitation; use pwn instead. Do not use it for pure web workflows, log or disk forensics, or standalone crypto problems unless reversing the implementation is the real blocker.
CTF 逆向工程
逆向工程挑戰的快速參考。詳細技術請參閱輔助檔案。
前置需求
Python 套件(所有平台):
pip install frida-tools angr qiling uncompyle6 capstone lief z3-solver
# 針對 Python 3.9+ 位元組碼:從原始碼編譯 pycdc
git clone https://github.com/zrax/pycdc && cd pycdc && cmake . && make
Linux(apt):
apt install gdb radare2 binutils strace ltrace apktool upx
macOS(Homebrew):
brew install gdb radare2 binutils apktool upx ghidra
radare2 外掛:
r2pm -ci r2ghidra # radare2 的原生 Ghidra 反編譯器
手動安裝:
- pwndbg — Linux:GitHub,macOS:
brew install pwndbg/tap/pwndbg-gdb
其他資源
- tools.md - 靜態分析工具(GDB、Ghidra、radare2、IDA、Binary Ninja、dogbolt.org、RISC-V with Capstone、Unicorn 模擬、Python 位元組碼、WASM、Android APK、.NET、打包二進位檔)
- tools-dynamic.md - 動態分析工具:Frida(掛鉤、反除錯繞過、記憶體掃描、Android/iOS)、angr 符號執行(路徑探索、約束、CFG)、lldb(macOS/LLVM 除錯器)、x64dbg(Windows)
- tools-emulation.md - 模擬框架與旁通道工具:Qiling(跨平台作業系統層級模擬)、Triton(DSE)、Intel Pin 指令計數 + 遺傳演算法旁通道、僅操作碼追蹤重建、LD_PRELOAD 時間凍結與 memcmp 旁通道用於逐位元組暴力破解
- tools-advanced.md - 進階工具(第 1 部分):VMProtect/Themida 分析、二進位差異比對(BinDiff、Diaphora)、去混淆框架(D-810、GOOMBA、Miasm)、Qiling 框架、Triton DSE、Manticore、Rizin/Cutter、RetDec、自訂 VM 位元組碼提升至 LLVM IR
- tools-advanced-2.md - 進階工具(第 2 部分):進階 GDB(Python 腳本、暴力破解、條件中斷點、監視點、使用 rr 反向除錯、pwndbg/GEF)、進階 Ghidra 腳本、修補(Binary Ninja API、LIEF)、GDB 約束提取 + ILP 求解器(BackdoorCTF 2017)、GDB 位置編碼輸入零旗標監控(EKOPARTY 2017)、LD_PRELOAD 僅執行二進位檔傾印(BackdoorCTF 2017)、PEDA current_inst 逐位元旗標擷取器(CONFidence CTF 2019 Teaser)
- anti-analysis.md - 反分析分類:Linux 反除錯(ptrace、/proc、時序、訊號、直接系統呼叫)、Windows 反除錯(PEB、NtQueryInformationProcess、堆積旗標、TLS 回呼、HW/SW 中斷點偵測、例外處理、執行緒隱藏)、反 VM/沙箱(CPUID、MAC、時序、工件、資源)、反 DBI(Frida 偵測/繞過)、程式碼完整性/自我雜湊、反反組譯(不透明謂詞、垃圾位元組)、MBA 識別/簡化、全面的繞過策略
- anti-analysis-ctf.md - CTF 解題技術:SIGILL 處理器用於執行模式切換(Hack.lu 2015)、透過 strace 計數的 SIGFPE 訊號處理器旁通道(PlaidCTF 2017)、使用 Keystone 和 Unicorn 的指令追蹤反轉(MeePwn 2017)、透過堆疊框架操作的無呼叫函式鏈接(THC 2018)、透過
process_vm_writev的父修補子二進位檔傾印(Google CTF Quals 2018) - patterns.md - 基礎二進位模式:自訂 VM、反除錯、nanomites、自修改程式碼、XOR 密碼、混合模式載入器、LLVM 混淆、S-box/金鑰串流、SECCOMP/BPF、例外處理器、記憶體傾印、位元組轉換、x86-64 陷阱、自訂 mangling 反轉、位置轉換、十六進位編碼字串比較、基於訊號的二進位探索
- patterns-runtime.md - 執行時期修補與預言機技術:惡意軟體反分析繞過、多階段 shellcode 載入器、時序旁通道攻擊、多執行緒反除錯搭配誘餌 + 訊號處理器 MBA(ApoorvCTF 2026)、INT3 修補 + coredump 暴力破解預言機(Pwn2Win 2016)、訊號處理器鏈 + LD_PRELOAD 預言機(Nuit du Hack 2016)、printf 格式字串 VM 反編譯至 Z3(SECCON 2017)、四元樹遞迴影像格式解析器(Google CTF Quals 2018)
- patterns-ctf.md - 競賽特定模式(第 1 部分):隱藏模擬器操作碼、LD_PRELOAD 金鑰提取、SPN 靜態提取、影像 XOR 平滑度、逐位元組密碼、數學收斂點陣圖、Windows PE XOR 點陣圖 OCR、兩階段 RC4+VM 載入器、GBA ROM 中間相遇、Sprague-Grundy 賽局理論、核心模組迷宮求解、多執行緒 VM 通道、透過字串差異比對的後門共享函式庫偵測、自訂 binfmt 核心模組搭配 RC4 平面二進位檔、雜湊解析匯入/無匯入勒索軟體、ELF 區段標頭損毀用於反分析
- patterns-ctf-2.md - 競賽特定模式(第 2 部分):多層自解密暴力破解、嵌入式 ZIP+XOR 授權、堆疊字串去混淆、前綴雜湊暴力破解、CVP/LLL 格用於整數驗證、決策樹函式混淆、GF(2^8) 高斯消去法、ROP 鏈混淆分析(ROPfuscation)
- patterns-ctf-3.md - 競賽特定模式(第 3 部分):Z3 單行 Python 電路、滑動視窗 popcount、透過 ioctl 的鍵盤 LED 摩斯電碼、C++ 解構子隱藏驗證、系統呼叫副作用記憶體損毀、MFC 對話框事件處理器、VM 順序金鑰鏈暴力破解、Burrows-Wheeler 轉換反轉、OpenType 字型連字利用、GLSL 著色器 VM 搭配自修改程式碼、指令計數器作為加密狀態、批次 crackme 自動化透過 objdump、fork+pipe+dead branch 反分析、TensorFlow DNN 反轉透過 sigmoid 層反轉、BPF 過濾器分析透過核心 JIT 至 x64 組合語言
- languages.md - 語言特定:Python 位元組碼與操作碼重新映射、Python 版本特定位元組碼、Pyarmor 靜態解包、DOS stub、Unity IL2CPP、HarmonyOS HAP/ABC、Brainfuck/esolangs(+ BF 逐字元靜態分析、BF 旁通道讀取計數預言機、BF 比較慣用語偵測)、UEFI、轉譯至 C、程式碼覆蓋率旁通道、OPAL 函數式逆向、非雙射替換、FRACTRAN 程式反轉
- languages-platforms.md - 平台/框架特定:Roblox place 檔案分析、Godot 遊戲資產提取、Rust serde_json 結構復原、Android JNI RegisterNatives 混淆、Android DEX 執行時期位元組碼修補透過 /proc/self/maps、Android 原生 .so 載入繞過透過新專案、Frida Firebase Cloud Functions 繞過、Verilog/硬體 RE、前綴逐一雜湊反轉、Ruby/Perl 多語言約束滿足、Electron ASAR 提取 + 原生二進位分析、Node.js npm 執行時期自省
- languages-compiled.md - Go 二進位逆向(GoReSym、goroutines、記憶體佈局、通道操作、embed.FS、Go 二進位 UUID 修補用於 C2 列舉)、Rust 二進位逆向(demangling、Option/Result、Vec、panic 字串)、Swift 二進位逆向(demangling、協定 witness 表)、Kotlin/JVM(協程狀態機)、Haskell GHC CMM 中間語言用於遞迴結構分析、C++(vtable 重建、RTTI、STL 模式)
- platforms.md - 平台特定 RE:macOS/iOS(Mach-O、程式碼簽署、Objective-C 執行時期、Swift、dyld、越獄繞過)、嵌入式/IoT 韌體(binwalk、UART/JTAG/SPI 提取、ARM/MIPS、RTOS)、核心驅動程式(Linux .ko、eBPF、Windows .sys)、遊戲引擎(Unreal Engine、Unity、反作弊、Lua)、汽車 CAN 匯流排
- platforms-hardware.md - 硬體與進階架構 RE:HD44780 LCD 控制器 GPIO 重建、RISC-V 進階(自訂擴充、特權模式、除錯)、ARM64/AArch64 逆向與利用(呼叫慣例、ROP gadgets、qemu-aarch64-static 模擬)
- field-notes.md - 快速參考筆記:二進位類型、反除錯繞過、特殊模式、CTF 案例筆記
何時切換
- 若你已理解二進位檔,現在需要堆積、ROP 或核心漏洞利用,請切換至
/ctf-pwn。 - 若挑戰主要關於復原已刪除檔案、PCAP 資料或磁碟工件,請切換至
/ctf-forensics。 - 若目標是網頁應用程式,且你僅逆向一個小型客戶端輔助腳本,請切換至
/ctf-web。 - 若二進位檔實作機器學習模型,且挑戰關於模型攻擊或對抗性輸入,請切換至
/ctf-ai-ml。 - 若逆向二進位檔的核心邏輯是加密演算法或數學問題,請切換至
/ctf-crypto。 - 若二進位檔是真實的惡意軟體樣本,具有 C2、打包或規避行為,請切換至
/ctf-malware。 - 若挑戰是玩具 VM、編碼謎題或 pyjail,而非真實二進位檔,請切換至
/ctf-misc。
解題工作流程
- 從字串提取開始 - 許多簡單挑戰有明文旗標
- 嘗試 ltrace/strace - 動態分析通常直接揭示旗標
- 嘗試 Frida 掛鉤 - 掛鉤 strcmp/memcmp 以捕獲預期值,無需逆向
- 嘗試 angr - 符號執行可自動解決許多旗標檢查器
- 嘗試 Qiling - 模擬外部架構二進位檔或繞過重度反除錯,無需工件
- 在修改執行前先繪製控制流程
- 透過腳本自動化手動流程(r2pipe、Frida、angr、Python)
- 透過比較反編譯器輸出驗證假設(dogbolt.org 用於並排比較)
快速勝利(優先嘗試!)
# 明文旗標提取
strings binary | grep -E "flag\{|CTF\{|pico"
strings binary | grep -iE "flag|secret|password"
rabin2 -z binary | grep -i "flag"
# 動態分析 - 通常直接捕獲旗標
ltrace ./binary
strace -f -s 500 ./binary
# 十六進位傾印搜尋
xxd binary | grep -i flag
# 使用測試輸入執行
./binary AAAA
echo "test" | ./binary
初始分析
file binary # 類型、架構
checksec --file=binary # 安全功能(用於 pwn)
chmod +x binary # 設為可執行
記憶體傾印策略
關鍵洞察: 讓程式計算答案,然後傾印它。在最終比較處中斷(b *main+OFFSET),輸入任何正確長度的輸入,然後 x/s $rsi 傾印計算出的旗標。
誘餌旗標偵測
模式: 在真實檢查之前有多個假目標。尋找序列中多個比較目標,並帶有不同的成功訊息。在最終比較處設定中斷點,而非較早的比較。
GDB PIE 除錯
PIE 二進位檔會隨機化基底位址。使用相對中斷點:
gdb ./binary
start # 強制解析 PIE 基底
b *main+0xca # 相對於 main
run
比較方向(關鍵!)
兩種模式:(1) transform(flag) == stored_target — 反轉轉換。(2) transform(stored_target) == flag — 旗標就是轉換後的資料,只需對儲存目標套用轉換。
常見加密模式
- 單一位元組 XOR - 嘗試所有 256 個值
- 與已知明文 XOR(
flag{、CTF{) - 使用硬編碼金鑰的 RC4
- 自訂排列 + XOR
- 使用位置索引 XOR(
^ i或^ (i & 0xff))並疊加重複金鑰
快速工具參考
# Radare2
r2 -d ./binary # 除錯模式
aaa # 分析
afl # 列出函式
pdf @ main # 反組譯 main
# Ghidra(無頭模式)
analyzeHeadless project/ tmp -import binary -postScript script.py
# IDA
ida64 binary # 在 IDA64 中開啟
深入筆記
在第一輪分類後,當你了解目標類型時,使用 field-notes.md。
- 目標格式:Python 位元組碼、WASM、Android、Flutter、.NET、UPX、Tauri
- 技術筆記:反除錯繞過、VM 分析、x86-64 陷阱、迭代求解器、Unicorn、時序旁通道
- 平台筆記:Godot、Roblox、macOS/iOS、嵌入式韌體、核心驅動程式、遊戲引擎、Swift、Kotlin、Go、Rust、D
- 案例筆記:現代 CTF 特定逆向模式與較舊的經典挑戰模式






