ctf-reverse

ctf-reverse

热门

提供CTF挑战的逆向工程技术。当主要任务是理解编译、混淆、加壳或虚拟化目标的工作原理,以便后续利用或解决时使用,包括二进制文件、APK、WASM、固件、自定义虚拟机、字节码、游戏客户端、类似恶意软件的加载器以及反调试或反分析逻辑。当漏洞已经理解且剩余任务仅为利用时,请勿使用,应改用pwn。不适用于纯Web工作流、日志或磁盘取证、或独立的密码学问题,除非逆向实现是真正的障碍。

2723Star
328Fork
更新于 2026/7/10
SKILL.md
readonly只读
name
ctf-reverse
description

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、带Capstone的RISC-V、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、自定义虚拟机字节码提升到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 writeup技术:SIGILL处理程序用于执行模式切换(Hack.lu 2015)、通过strace计数的SIGFPE信号处理程序侧信道(PlaidCTF 2017)、使用Keystone和Unicorn的指令跟踪反转(MeePwn 2017)、通过栈帧操作的无调用函数链(THC 2018)、通过process_vm_writev的父补丁子二进制转储(Google CTF Quals 2018)
  • patterns.md - 基础二进制模式:自定义虚拟机、反调试、纳米点、自修改代码、XOR密码、混合模式加载器、LLVM混淆、S盒/密钥流、SECCOMP/BPF、异常处理程序、内存转储、逐字节变换、x86-64陷阱、自定义混淆反转、基于位置的变换、十六进制编码字符串比较、基于信号的二进制探索
  • patterns-runtime.md - 运行时补丁和预言机技术:恶意软件反分析绕过、多阶段shellcode加载器、计时侧信道攻击、多线程反调试与诱饵+信号处理程序MBA(ApoorvCTF 2026)、INT3补丁+核心转储暴力破解预言机(Pwn2Win 2016)、信号处理程序链+LD_PRELOAD预言机(Nuit du Hack 2016)、printf格式字符串虚拟机反编译到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与自修改代码、指令计数器作为密码状态、通过objdump的批量crackme自动化、fork+pipe+死分支反分析、通过sigmoid层反转的TensorFlow DNN反转、通过内核JIT到x64汇编的BPF过滤器分析
  • languages.md - 语言特定:Python字节码和操作码重映射、Python版本特定字节码、Pyarmor静态解包、DOS存根、Unity IL2CPP、HarmonyOS HAP/ABC、Brainfuck/深奥语言(+ BF逐字符静态分析、BF侧信道读取计数预言机、BF比较惯用语检测)、UEFI、转译到C、代码覆盖率侧信道、OPAL函数式逆向、非双射替换、FRACTRAN程序反转
  • languages-platforms.md - 平台/框架特定:Roblox place文件分析、Godot游戏资源提取、Rust serde_json模式恢复、Android JNI RegisterNatives混淆、通过/proc/self/maps的Android DEX运行时字节码补丁、通过新项目的Android原生.so加载绕过、Frida Firebase Cloud Functions绕过、Verilog/硬件逆向、逐前缀哈希反转、Ruby/Perl多语言约束满足、Electron ASAR提取+原生二进制分析、Node.js npm运行时自省
  • languages-compiled.md - Go二进制逆向(GoReSym、goroutine、内存布局、通道操作、embed.FS、用于C2枚举的Go二进制UUID补丁)、Rust二进制逆向(去符号、Option/Result、Vec、panic字符串)、Swift二进制逆向(去符号、协议见证表)、Kotlin/JVM(协程状态机)、Haskell GHC CMM中间语言用于递归结构分析、C++(vtable重建、RTTI、STL模式)
  • platforms.md - 平台特定逆向: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 - 硬件和高级架构逆向:HD44780 LCD控制器GPIO重建、RISC-V高级(自定义扩展、特权模式、调试)、ARM64/AArch64逆向和利用(调用约定、ROP gadget、qemu-aarch64-static模拟)
  • field-notes.md - 快速参考笔记:二进制类型、反调试绕过、特定模式、CTF案例笔记

何时切换

  • 如果已经理解二进制文件,现在需要堆、ROP或内核利用,请切换到/ctf-pwn
  • 如果挑战实际上是关于恢复已删除文件、PCAP数据或磁盘工件,请切换到/ctf-forensics
  • 如果目标是Web应用,并且你只逆向一个小型客户端辅助脚本,请切换到/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特定逆向模式和经典挑战模式