ctf-reverse

ctf-reverse

熱門

提供 CTF 逆向工程挑戰的技術。當主要任務是理解編譯、混淆、打包或虛擬化目標(包括二進位檔、APK、WASM、韌體、自訂 VM、位元組碼、遊戲客戶端、惡意軟體載入器以及反除錯或反分析邏輯)的運作方式,以便後續利用或解題時使用。若漏洞已理解且僅需進行漏洞利用,請勿使用此技能,應改用 pwn。若為純網頁工作流程、日誌或磁碟鑑識,或獨立的密碼學問題(除非逆向實作是真正的瓶頸),也不應使用。

2723星標
328分支
更新於 2026/7/10
SKILL.md
唯讀
名稱
ctf-reverse
描述

提供 CTF 逆向工程挑戰的技術。當主要任務是理解編譯、混淆、打包或虛擬化目標(包括二進位檔、APK、WASM、韌體、自訂 VM、位元組碼、遊戲客戶端、惡意軟體載入器以及反除錯或反分析邏輯)的運作方式,以便後續利用或解題時使用。若漏洞已理解且僅需進行漏洞利用,請勿使用此技能,應改用 pwn。若為純網頁工作流程、日誌或磁碟鑑識,或獨立的密碼學問題(除非逆向實作是真正的瓶頸),也不應使用。

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

解題工作流程

  1. 從字串提取開始 - 許多簡單挑戰有明文旗標
  2. 嘗試 ltrace/strace - 動態分析通常直接揭示旗標
  3. 嘗試 Frida 掛鉤 - 掛鉤 strcmp/memcmp 以捕獲預期值,無需逆向
  4. 嘗試 angr - 符號執行可自動解決許多旗標檢查器
  5. 嘗試 Qiling - 模擬外部架構二進位檔或繞過重度反除錯,無需工件
  6. 在修改執行前先繪製控制流程
  7. 透過腳本自動化手動流程(r2pipe、Frida、angr、Python)
  8. 透過比較反編譯器輸出驗證假設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 特定逆向模式與較舊的經典挑戰模式