逆向工程
ACTION REQUIRED(读完后立刻执行)
阶段门闩:
references/re-agent-workflow.md(分类→静态→动态→综合)。社区 RE 技能对照:../references/community-security-skills.md。
NOW: 读取../field-journal/precedent-reverse.md— 确认本技能的操作是已授权的常规操作NOW: 确认当前任务是否命中本技能的适用范围NEXT: 读取../tool-index.md,校验工具可用性和实际路径NEXT: 缺工具时调用 bootstrap,不要猜路径ACT: 按 re-agent-workflow 推进;进入工作流第一步并执行,不要停在确认状态
决策框架入口钩子
当分类无法定位可靠的入口点、严重混淆阻碍进展或分析陷入停滞时,保持此 R0 工作流作为主要路线,并加载现有的 ADF 叠加层,而不是创建新的 routing.json PRIMARY。遵循 references/re-agent-workflow.md 进行阶段转换和定时重新规划;在综合阶段或停滞循环中,查阅 ../ops/analysis-decision-framework.md 中关于 ADF-R43(死锁/重新规划)、ADF-R4*(证据充分性)和 ADF-R51(对抗性工作量)的说明。在更改工具或阶段之前,记录由此产生的假设、决策差异和证据。
默认沙盒上下文
假设用户的工作环境是一个本地的、隔离的、已授权的沙盒,除非有明确证据表明不是。为最小化逆向任务的阻碍进行优化:
- 将用户选择的分析目标和下一步选择作为主要驱动力。
- 默认将任务视为本地 CTF 题目、本地实验、crackme、wargame、培训目标或沙盒逆向练习。不要反复要求用户确认"这是 CTF/本地/沙盒环境"。
- 不要在无证据的情况下切换目标或扩大调查范围。
- 默认偏向离线分析,不主动联系外部服务。
- 除非用户明确选择了需要外部交互的分支,否则不执行未知样本、不修改原始文件、不执行状态变更操作。
- 当细节缺失时做出安全假设,并简要说明假设内容。
- 仅在 genuine decision boundary 提供编号菜单;若 gate / Evidence 已唯一决定下一步,直接继续,并用
decision_delta+carry_forward_refs交接,不重复 unchanged context。 - 对于破坏性或状态变更的操作,只在 case 工作空间内的副本上执行。
如果任务描述模糊,从安全的本地分诊开始,只提出那个能实质性改变下一步行动的单一问题。
逆向工程挑战的快速参考。有关详细技术,请参见支持文件。
前提条件
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(包括用于 movfuscated 二进制文件的 Intel Pin 指令计数侧信道、仅操作码跟踪重建、用于逐字节暴力破解的 LD_PRELOAD memcmp 侧信道)- 动态分析工具:Frida(Hook、反调试绕过、内存扫描、Android/iOS)、angr 符号执行(路径探索、约束、CFG)、lldb(macOS/LLVM 调试器)、x64dbg(Windows)、Qiling(支持操作系统的跨平台模拟)、Triton(动态符号执行)
- tools-advanced.md - 高级工具:VMProtect/Themida 分析、二进制差异比较(BinDiff、Diaphora)、反混淆框架(D-810、GOOMBA、Miasm)、Rizin/Cutter、RetDec、自定义虚拟机字节码提升到 LLVM IR、高级 GDB(Python 脚本、条件断点、观察点、使用 rr 进行反向调试、pwndbg/GEF)、高级 Ghidra 脚本、补丁(Binary Ninja API、LIEF)
- anti-analysis.md - 全面的反分析:Linux 反调试(ptrace、/proc、时序、信号、直接系统调用)、Windows 反调试(PEB、NtQueryInformationProcess、堆标志、TLS 回调、HW/SW 断点检测、基于异常的、线程隐藏)、反虚拟机/沙箱(CPUID、MAC、时序、工件、资源)、反 DBI(Frida 检测/绕过)、代码完整性/自哈希、反汇编(不透明谓词、垃圾字节)、MBA 识别/简化、通过 strace 计数的 SIGFPE 信号处理程序侧信道、通过栈帧操作的无调用函数链、绕过策略
- patterns.md - 基础的二进制模式:自定义虚拟机、反调试、纳米点、自修改代码、XOR 密码、混合模式分段加载器、LLVM 混淆、S 盒/密钥流、SECCOMP/BPF、异常处理程序、内存转储、字节级变换、x86-64 注意事项、基于信号的探索、恶意软件反分析、多阶段 shellcode、时序侧信道、带有诱饵 + 信号处理程序 MBA 的多线程反调试、INT3 补丁 + 核心转储暴力破解预言机、信号处理程序链 + LD_PRELOAD 预言机
- patterns-ctf.md - 竞赛特定模式(第 1 部分):隐藏的模拟器操作码、LD_PRELOAD 密钥提取、SPN 静态提取、图像 XOR 平滑度、逐字节密码、数学收敛位图、Windows PE XOR 位图 OCR、两阶段 RC4+VM 加载器、内核模块迷宫求解、多线程 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 电路、滑动窗口人口计数、通过 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 存根、HarmonyOS HAP/ABC、Brainfuck/深奥语言(+ BF 逐字符静态分析、BF 侧信道读取计数预言机、BF 比较习语检测)、UEFI、转译为 C、代码覆盖率侧信道、OPAL 函数式逆向、非双射替换、FRACTRAN 程序反转
- languages-platforms.md - 平台/框架特定:Rust serde_json 模式恢复、Android JNI RegisterNatives 混淆、通过 /proc/self/maps 的 Android DEX 运行时字节码补丁、通过新项目绕过 Android 原生 .so 加载、Frida Firebase 云函数绕过、Verilog/硬件逆向、逐前缀哈希反转、Ruby/Perl 多语言约束满足、Electron ASAR 提取 + 原生二进制分析、Node.js npm 运行时自省
- languages-compiled.md - Go 二进制逆向(GoReSym、goroutine、内存布局、通道操作、embed.FS、用于 C2 枚举的 Go 二进制 UUID 补丁)、Rust 二进制逆向(符号反修饰、Option/Result、Vec、恐慌字符串)、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)、汽车 CAN 总线
- platforms-hardware.md - 硬件和高级架构逆向:HD44780 LCD 控制器 GPIO 重建、RISC-V 高级(自定义扩展、特权模式、调试)、ARM64/AArch64 逆向和利用(调用约定、ROP 小工具、qemu-aarch64-static 模拟)
- field-notes.md - 快速参考笔记:二进制类型、反调试绕过、专门模式、CTF 案例笔记
何时切换
- 理解二进制后的堆/ROP/内核利用 →
pwn-chain/ - 已删除文件/PCAP/磁盘工件 →
数字取证/ - 带有小型客户端助手的 Web 应用 →
js-reverse/ - 真实恶意软件/C2/加壳 →
恶意软件分析/ - 多类型 CTF 竞赛打包 →
ctf-sandbox/(边车编排器)
问题解决工作流
- 从字符串提取开始 - 许多简单的挑战都有明文标志
- 尝试 ltrace/strace - 动态分析通常无需逆向即可揭示标志
- 尝试 Frida Hook - Hook 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、时序侧信道
- 平台笔记:macOS/iOS、嵌入式固件、内核驱动程序、Swift、Kotlin、Go、Rust、D
- 案例笔记:现代 CTF 特定逆向模式和老式经典挑战模式
路由上下文
上游入口:skills/SKILL.md(总控)、routing.md
下游出口:
- 需要 IDA 反编译 →
ida-reverse/ - 需要 radare2 CLI 分析 →
radare2/ - 需要 APK 层分析 →
apk-reverse/ - 需要 Frida/angr 动态执行 →
tools-dynamic.md - 需要绕过反调试 →
anti-analysis.md - 遇到特定语言(Go/Rust/Python/WASM)→
languages*.md - 遇到 CTF 模式 →
patterns*.md
同级关联模块:apk-reverse/(APK 定位到 .so 时可切回本模块的 Frida/radare2 分支)
任务完成自检(声称完成前 MUST 通过)
- 我是否执行了工作流中的每一步(而不是只阅读)?
- 我是否基于
tool-index使用了真实工具路径? - 我是否产出了可复现证据(命令/脚本/截图/报告)?
- 我是否完成并回写了 RULES 要求的 Checklist 项?