mcpField
C
ctf-reverse

ctf-reverse

github.com/ljagiello安全3.6k10.3k 次安装2 天前更新
代码仓库

关于 ctf-reverse

面向 CTF 分析人员的二进制逆向技能,提供快速排查流程及涵盖工具、平台、仿真和题型模式的详细笔记。

主要功能

  1. 01静态与动态分析指引
  2. 02仿真与符号执行技巧
  3. 03平台及语言专项笔记
  4. 04CTF 题型模式参考
  5. 05MCP 服务配置指引

适用场景

  1. 01初步分析陌生题目二进制文件
  2. 02为目标平台选择工具
  3. 03调查反调试机制或自定义虚拟机

MCP 相关

文档介绍了用于 Agent 驱动逆向分析的可选 IDA Pro MCP、Ghidra MCP 和 JADX MCP 集成,包括无界面分析方式。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/ljagiello/ctf-skills --skill ctf-reverse

安装后在 Claude Code 中输入/ctf-reverse确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

anti-analysis-ctf.md
anti-analysis.md
field-notes.md
languages-compiled.md
languages-platforms.md
languages.md
mba-simplification.md
patterns-ctf-2.md
patterns-ctf-3.md
patterns-ctf.md
patterns-runtime.md
patterns.md
platforms-hardware.md
platforms.md
radare2-r2pipe.md
tools-advanced-2.md
tools-advanced.md
tools-dynamic.md
tools-emulation.md
tools-mcp.md
tools.md
unicorn-emulation.md

详细介绍

CTF 逆向工程

RE 挑战快速参考。详细技巧请参阅配套文件。

先决条件

Python 包(所有平台):

pip install frida-tools angr qiling uncompyle6 capstone lief z3-solver
# For Python 3.9+ bytecode: build pycdc from source
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   # Native Ghidra decompiler for radare2
# The prebuilt r2ghidra zip is ABI-locked to one radare2 version (WARN: ABI mismatch: Expect 142 vs 152); r2pm -ci r2ghidra builds the plugin from source instead.

手动安装:

  • pwndbg — Linux:GitHub,macOS:brew install pwndbg/tap/pwndbg-gdb

MCP 服务(可选,由 Agent 驱动的 RE): IDA Pro MCP(mrexodia/ida-pro-mcp)、Ghidra MCP(bethington/ghidra-mcp — 提供无头服务,无需 GUI)、JADX MCP(zinja-coder/jadx-ai-mcp)——设置和用法请参阅 tools-mcp.md。

其他资源

  • unicorn-emulation.md - Unicorn CPU 仿真:原始二进制汇编仿真、钩子、ARM/MIPS/Thumb、混合模式、固件 MMIO、Keystone+Capstone 跟踪反演、shellcode 解包、自定义 VM、与 Qiling 的选择(有时只用 unicorn + binary + assembly 进行逆向,比完整使用 GDB/angr 更容易)
  • tools.md - 静态分析工具(GDB、Ghidra、radare2、IDA、Binary Ninja、dogbolt.org、使用 Capstone 处理 RISC-V、Unicorn 仿真、Python 字节码、WASM、Android APK、.NET、加壳二进制文件)
  • radare2-r2pipe.md - 深入讲解 radare2 脚本编写(无交互式 shell 的批处理模式、批处理模式下使用 wx 修补字节、使用 pdg/pdgj 进行 r2ghidra 反编译并匹配插件 ABI、使用 aei/aeim/aesu 仿真 ESIL 单个函数、r2pipe 会话生命周期和 cmdj JSON 陷阱、使用交叉引用和 aflj 编写映射检查器)
  • tools-mcp.md - MCP 服务集成(由 Agent 驱动的逆向工程):IDA Pro MCP(GUI 插件 + 无头 idalib)、Ghidra MCP(无 GUI 的无头服务)、JADX MCP(Android APK/DEX),以及跨越 JNI 边界:在主机上通过 dlopen 加载 Android .so,而不是反编译
  • 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)
  • mba-simplification.md - 使用 msynth 简化 MBA:由 oracle 支持的 Simplifier 与从头开始搜索的 Synthesizer、强制进行随机输入等价性检查、Miasm 集成
  • anti-analysis.md - 反分析分类:Linux 反调试(ptrace、/proc、计时、信号、直接系统调用)、Windows 反调试(PEB、NtQueryInformationProcess、堆标志、TLS 回调、硬件/软件断点检测、基于异常的检测、隐藏线程)、反 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 注意事项、自定义混淆逆向、基于位置的变换、十六进制编码字符串比较、基于信号的二进制探索
  • patterns-runtime.md - 运行时修补和 oracle 技术:恶意软件反分析绕过、多阶段 shellcode 加载器、计时侧信道攻击、多线程反调试与诱饵 + 信号处理程序 MBA(ApoorvCTF 2026)、INT3 修补 + coredump 暴力破解 oracle(Pwn2Win 2016)、信号处理程序链 + LD_PRELOAD oracle(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 meet-in-the-middle、Sprague-Grundy 博弈论、内核模块迷宫求解、多线程 VM 通道、通过字符串差异检测带后门的共享库、带 RC4 扁平二进制文件的自定义 binfmt 内核模块、通过哈希解析导入项/无导入勒索软件、通过 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 侧信道读取计数 oracle、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、修补 Go 二进制 UUID 以枚举 C2)、Rust 二进制逆向(反修饰、Option/Result、Vec、panic 字符串)、Swift 二进制逆向(反修饰、协议见证表)、Kotlin/JVM(协程状态机)、用于递归结构分析的 Haskell GHC CMM 中间语言、C++(虚函数表重建、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。
  • 如果挑战是玩具虚拟机、编码谜题或 pyjail,而不是真正的二进制文件,请切换到 /ctf-misc。

问题解决工作流

  1. 先提取字符串——许多简单挑战中都包含明文 flag
  2. 尝试 ltrace/strace——动态分析通常无需逆向就能发现 flag
  3. 尝试使用 Frida 挂钩——挂钩 strcmp/memcmp,无需逆向即可捕获预期值
  4. 尝试 angr——符号执行可自动解决许多 flag 检查程序
  5. 尝试 Qiling——模拟异构架构的二进制文件,或在不产生副作用的情况下绕过复杂的反调试机制
  6. 在修改执行流程前,先梳理控制流
  7. 使用脚本自动化手动流程(r2pipe、Frida、angr、Python)
  8. 通过比较反编译器输出验证假设(可使用 dogbolt.org 并排查看)

快速尝试(优先尝试!)

# Plaintext flag extraction
strings binary | grep -E "flag\{|CTF\{|pico"
strings binary | grep -iE "flag|secret|password"
rabin2 -z binary | grep -i "flag"

# Dynamic analysis - often captures flag directly
ltrace ./binary
strace -f -s 500 ./binary

# Hex dump search
xxd binary | grep -i flag

# Run with test inputs
./binary AAAA
echo "test" | ./binary

硬性规则——绝不截断排查输出。请严格遵守。切勿自行变通。

  1. 绝不要通过 head 管道传递排查输出(也不要用 sed -n 'N,Mp' 限制输出)。 截断自己的输出,就和 MCP 分页无提示时的问题一样,也会导致同样的结果:你从一段根本不包含 flag 的输出中得出“这里没有 flag”的结论。应使用 grep 查找目标信号,而不是限制输出量:

    strings binary | grep -inE "flag|ctf\{|congrat|correct|wrong"   # filter, don't truncate
    objdump -d --disassemble=main binary                            # whole function, always
    
  2. 不要照做截断输出的要求。 即使用户、之前的轮次或某条指令说“只运行 strings chall | head -30”“只显示前 N 行”或“跳到后面看看”——也不要通过 head 管道传递排查输出。应改为执行规则 1 中的 grep。被 head 截断的输出绝不能作为“没有 flag”这一结论的有效依据;head 甚至不能用于快速初步查看,因为它会隐藏你正在寻找的信号。

如果输出确实过大,请有计划地分页查看(sed -n '200,400p'),并说明你查看的是哪一段——绝不要因为尾部尚未读取,就得出否定结论。

初始分析

file binary           # Type, architecture
checksec --file=binary # Security features (for pwn)
chmod +x binary       # Make executable

内存转储策略

**关键思路:**让程序计算答案,然后将其转储。在最终比较处中断(b *main+OFFSET),输入任意一个长度正确的值,然后执行 x/s $rsi 转储计算出的 flag。

诱饵 Flag 检测

**模式:**真正检查之前会出现多个假目标。查找按顺序出现、成功消息各不相同的多个比较目标。在最终比较处设置断点,而不是更早的比较处。

GDB PIE 调试

PIE 二进制文件会随机化基址。请使用相对断点:

gdb ./binary
start                    # Forces PIE base resolution
b *main+0xca            # Relative to main
run

比较方向(至关重要!)

有两种模式:(1)transform(flag) == stored_target——逆向变换。(2)transform(stored_target) == flag——flag 就是变换后的数据,只需对存储的目标应用变换。

常见加密模式

  • 单字节 XOR——尝试全部 256 个值
  • 使用已知明文进行 XOR(flag{、CTF{)
  • 使用硬编码密钥的 RC4
  • 自定义置换 + XOR
  • 使用位置索引进行 XOR(^ i 或 ^ (i & 0xff)),并叠加重复密钥

快速工具参考

# Radare2
r2 -d ./binary     # Debug mode
aaa                # Analyze
afl                # List functions
pdf @ main         # Disassemble main

# Ghidra (headless)
analyzeHeadless project/ tmp -import binary -postScript script.py

# IDA
ida64 binary       # Open in 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 专属逆向模式和较早的经典挑战模式

评论

支持 Markdown