关于 reverse-engineering
面向逆向工程与调试任务的技能,提供静态、动态分析及漏洞利用方法,并按目标格式和任务类型引导选择参考资料。还附带 IDA 导出插件和 Android DEX 转储脚本。
主要功能
- 01按格式和任务选择分析指南
- 02涵盖静态与动态调试流程
- 03提供漏洞发现方法
- 04附带 IDA 导出插件
- 05提供 Android DEX 转储脚本
适用场景
- 01初步检查未知二进制文件
- 02分析移动应用或恶意软件
- 03调试崩溃并定位漏洞
- 04使用 Ghidra 或 IDA 编写分析脚本
MCP 相关
提供连接 ida-pro-mcp、GhidraMCP 和 r2mcp 等上游 MCP 服务的配置说明,并介绍实时查询工作流。
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ r00tedbrain-backup/ skills --skill reverse-engineering安装后在 Claude Code 中输入/reverse-engineering确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/android-re.mdanticheat-re.mddynamic-debugging.mdexploit-dev.mdfirmware-embedded.mdfrida.mdghidra-scripting.mdidapython.mdios-re.mdmacos-kernel-re.mdmalware-analysis.mdmanaged-code-re.mdprotocol-re.mdstatic-analysis.mdstruct-recovery.mdsymbol-recovery.mdunicorn-emulation.mdwindows-re.mdtools/dex_memory_dumper.jsida_export_plugin.pyREADME.mdtools/mcp/claude-config-snippets.jsoncline-config-snippets.jsoncontinue-config-snippets.jsoncursor-config-snippets.jsonghidra-mcp.mdida-pro-mcp.mdopencode-config-snippets.jsonREADME.mdwindsurf-config-snippets.json详细介绍
逆向工程与调试
静态分析、动态分析、调试和二进制利用的专业方法。
快速参考 — 加载正确的参考文件
| 任务 | 参考文件 |
|---|---|
| 静态分析、反汇编、Ghidra、radare2、objdump、修补 | references/static-analysis.md |
| GDB(+ pwndbg/gef/peda)、LLDB、strace/ltrace、崩溃分析 | references/dynamic-debugging.md |
| Android APK、DEX、smali、ADB、在 Android 上使用 Frida、重新打包 | references/android-re.md |
| iOS IPA、Mach-O、class-dump、Frida ObjC/Swift、Keychain | references/ios-re.md |
| macOS XPC、launchd、kext、SIP、Linux 内核模块 | references/macos-kernel-re.md |
| Windows PE、WinDbg、x64dbg、.NET/dnSpy、内核驱动 | references/windows-re.md |
| Frida 脚本、Hook Java/Native/ObjC、SSL 取消固定、gadget | references/frida.md |
| .NET IL、dnSpy、de4dot、Java/JVM、Kotlin、Unity/IL2CPP、Mono | references/managed-code-re.md |
| 恶意软件、混淆、加壳程序分析、IOC 提取、Volatility | references/malware-analysis.md |
| CTF pwn/rev、BOF、ROP、堆利用、pwntools、angr/Z3 | references/exploit-dev.md |
| 网络协议逆向、Wireshark、mitmproxy、Protobuf、gRPC、Lua dissector、Boofuzz | references/protocol-re.md |
| 固件、binwalk、QEMU 仿真、JTAG/UART、U-Boot、IoT | references/firmware-embedded.md |
| EAC、BattlEye、Vanguard、FACEIT、VAC、内核级反作弊分析 | references/anticheat-re.md |
| Ghidra Python/Java 脚本、无头模式、漏洞查找、自定义分析器 | references/ghidra-scripting.md |
| IDAPython / IDALib 脚本、Hex-Rays API、批量反编译、OLLVM 辅助工具 | references/idapython.md |
| Unicorn 引擎仿真、函数级仿真、JNI 存根、系统调用模拟 | references/unicorn-emulation.md |
| 恢复已剥离的符号、魔数、成对调用、交叉引用分析 | references/symbol-recovery.md |
| C/C++ 结构恢复、虚函数表、std::string/vector/map、字段类型推断 | references/struct-recovery.md |
捆绑工具(tools/)
此技能附带开箱即用的配套实用工具(均为原创作品,采用 MIT 许可证):
| 工具 | 用途 |
|---|---|
tools/ida_export_plugin.py | IDA Pro 插件(Ctrl-Shift-E)——将 IDB 导出到 decompile/ 目录,其中包含 Agent 可直接读取的纯文本文件 |
tools/dex_memory_dumper.js | Frida Agent——通过内存扫描和 ClassLoader 遍历,从正在运行的 Android 进程转储 DEX |
tools/mcp/ | 用于将 Agent 连接到上游 MCP 服务(ida-pro-mcp、GhidraMCP、r2mcp)的设置说明和配置片段 |
有关用法详情,请参阅 tools/README.md。tools/mcp/ 目录介绍了实时查询工作流(文件导出的替代方案)——上述方法文件支持这两种模式。
通用第一步
加载任何参考文件之前,请先了解上下文:
1. 识别目标
file <binary> # file type, arch, bits, stripped?
xxd <binary> | head -4 # magic bytes
strings -a <binary> | head -60
checksec --file=<binary> # NX, PIE, RELRO, stack canary, ASLR
二进制格式决策树:
- ELF → Linux 原生程序 →
references/static-analysis.md+references/dynamic-debugging.md - PE/PE32+ → Windows 原生程序 →
references/windows-re.md+references/static-analysis.md - 带有 .NET 元数据的 PE →
references/managed-code-re.md(优先使用 dnSpy) - Mach-O → macOS/iOS →
references/macos-kernel-re.md+references/ios-re.md - DEX/APK/AAB → Android →
references/android-re.md - JAR/WAR/AAR → Java →
references/managed-code-re.md - .sys 驱动程序 →
references/windows-re.md(内核部分)或references/anticheat-re.md - Assembly-CSharp.dll → Unity →
references/managed-code-re.md(Unity 部分) - 未知格式/固件 →
references/firmware-embedded.md(binwalk + 熵分析)
任务类型决策树(适用于任何格式):
- 已剥离符号的二进制文件,函数未知 →
references/symbol-recovery.md - 反编译中结构体布局未知 →
references/struct-recovery.md - 需要单独运行某个函数 →
references/unicorn-emulation.md - 使用 IDA Pro 进行分析 →
references/idapython.md - 使用 Ghidra 进行分析 →
references/ghidra-scripting.md
2. 确定范围
询问用户(或根据上下文推断):
- 目标:理解逻辑 / 查找漏洞 / 绕过保护 / 修补 / 获取 CTF flag / 查找恶意软件 IOCs?
- 平台:Linux / Windows / macOS / Android / iOS / 嵌入式?
- 可用工具:Ghidra / IDA / radare2 / Binary Ninja / Hopper?
- 是否可以动态分析?:能否运行?虚拟机?模拟器?实体设备?
3. 选择分析模式
Static only → No execution risk, slower understanding
Dynamic only → Fast but misses dead code
Static + Dynamic (recommended) → Static for map, dynamic for runtime truth
核心工具链概览
静态分析
| 工具 | 最适合 |
|---|---|
Ghidra | 完整反编译、脚本编写、免费 |
radare2 / cutter | 强大的命令行工具、脚本编写、嵌入式 |
Binary Ninja | API 优先、快速、商业软件 |
IDA Pro / IDA Free | 行业标准、签名库最佳 |
objdump | 快速反汇编,无需安装 |
readelf / nm | 检查 ELF 符号/节 |
jadx | Android DEX → Java,图形界面 |
apktool | APK 解包 / 重新打包 / smali |
动态分析
| 工具 | 最适合 |
|---|---|
GDB + pwndbg/peda/gef | Linux ELF 调试 |
LLDB | macOS/iOS/Swift 调试 |
Frida | 跨平台挂钩,无需源代码 |
strace / ltrace | 系统调用 / 库调用跟踪 |
Valgrind | 内存错误、Helgrind |
WinDbg | Windows 内核 + 用户模式 |
x64dbg | Windows 图形界面调试器 |
网络
| 工具 | 最适合 |
|---|---|
Wireshark / tshark | 数据包捕获 + 解析 |
mitmproxy / Burp Suite | HTTP/S 中间人攻击 |
Frida | 进程内 SSL 证书锁定绕过 |
tcpdump | 无界面捕获 |
方法论框架
静态分析工作流
1. file + strings + checksec → quick triage
2. Entropy analysis → packed/encrypted?
3. Import table / symbol table → understand capabilities
4. Load in decompiler → rename, retype, annotate
5. Identify key functions → main(), crypto, network, anti-debug
6. Trace data flow → user input → sink
7. Document findings → comment inline
动态分析工作流
1. Set up isolated environment → VM / container / device
2. Run with strace/ltrace first → understand syscall footprint
3. Attach debugger → set breakpoints at key functions
4. Observe runtime behavior → memory, registers, branches taken
5. Correlate with static → validate decompiler output
6. Patch / hook as needed → bypass checks, log values
漏洞发现工作流
1. Attack surface mapping → inputs: file, network, env vars, args
2. Dangerous function search → strcpy, gets, sprintf, memcpy, system
3. Integer overflow candidates → size calculations, loops
4. Format string candidates → printf(user_input)
5. UAF / double-free candidates → heap allocation patterns
6. Trigger + confirm → crash → controlled → exploitable
绕过反分析 — 快速参考
反调试检测
# Check if binary detects debugger
strings <bin> | grep -iE "ptrace|debugger|isDebuggerPresent|TracerPid"
# Linux: ptrace self-detection
# Bypass: preload hook or patch the ptrace call
常见保护
| 保护 | 检测方式 | 绕过方法 |
|---|---|---|
ptrace 反调试 | strace 显示 ptrace(TRACEME) | 将 JNZ 修补为 JMP,或使用 LD_PRELOAD 伪造 ptrace |
| 时间检查 | 循环中调用 rdtsc / clock_gettime | 修补比较指令,或替换为 NOP |
| 校验和/完整性检查 | 对自身 .text 节进行哈希 | 在解密后、检查前修补 |
| 加壳(UPX 等) | 熵高 + 导入项少 | upx -d / 解壳后从内存转储 |
| 字符串混淆 | 没有可读字符串 | 运行程序并从内存提取 / 使用 Frida 挂钩 |
| SSL 证书锁定(移动端) | 应用无法联网 | 使用 Frida 解除 SSL 锁定 / 参见 references/frida.md |
输出规范
报告逆向工程(RE)发现时,始终按以下结构组织输出:
## Binary: <name>
- **Format**: ELF64 / PE32+ / DEX / Mach-O
- **Arch**: x86_64 / ARM64 / ARMv7 / MIPS
- **Stripped**: Yes/No | **PIE**: Yes/No | **NX**: Yes/No
## Key Findings
1. <function name @ offset> — <what it does>
2. ...
## Vulnerability / Behavior
- <description with evidence>
- Offset: 0x<addr>
- Triggerable via: <input vector>
## Recommended Next Steps
- [ ] <action>
反编译器工作命名规范
在 Ghidra / IDA / r2 中添加注释时遵循以下规范:
Functions: verb_noun_context → decrypt_config_xor, check_license_hwid
Variables: type_purpose → buf_user_input, sz_packet, ptr_heap_chunk
Structs: ST_<name> → ST_PacketHeader, ST_LicenseData
Labels: loc_<purpose> → loc_anti_debug_fail, loc_success
脚本快速入门
完整的 Frida 模式见 references/frida.md。
GDB Python 单行命令(记录函数参数)
# In GDB: source this file
import gdb
class LogArgs(gdb.Breakpoint):
def stop(self):
frame = gdb.selected_frame()
print(f"[*] {frame.name()} rdi={gdb.parse_and_eval('$rdi')} rsi={gdb.parse_and_eval('$rsi')}")
return False # don't stop, just log
LogArgs("target_function")
radare2 批量分析
r2 -A -q -c "afl~suspicious; pdf @ sym.check_license" <binary>
Ghidra 无界面分析
$GHIDRA_HOME/support/analyzeHeadless /tmp/proj MyProject \
-import <binary> -postScript PrintAST.java -scriptPath ~/ghidra_scripts
评论
支持 Markdown