reverse-engineering
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseReverse Engineering & Debugging
逆向工程与调试
Professional methodology for static analysis, dynamic analysis, debugging, and binary exploitation.
静态分析、动态分析、调试及二进制漏洞利用的专业方法论。
Quick Reference — Load the Right Reference File
快速参考——加载正确的参考文件
| Task | Reference File |
|---|---|
| Static analysis, disassembly, Ghidra, radare2, objdump, patching | |
| GDB (+ pwndbg/gef/peda), LLDB, strace/ltrace, crash analysis | |
| Android APK, DEX, smali, ADB, Frida on Android, repackaging | |
| iOS IPA, Mach-O, class-dump, Frida ObjC/Swift, Keychain | |
| macOS XPC, launchd, kext, SIP, Linux kernel modules | |
| Windows PE, WinDbg, x64dbg, .NET/dnSpy, kernel drivers | |
| Frida scripting, hooking Java/Native/ObjC, SSL unpin, gadget | |
| .NET IL, dnSpy, de4dot, Java/JVM, Kotlin, Unity/IL2CPP, Mono | |
| Malware, obfuscation, packer analysis, IOC extraction, Volatility | |
| CTF pwn/rev, BOF, ROP, heap exploitation, pwntools, angr/Z3 | |
| Network protocol RE, Wireshark, mitmproxy, Protobuf, gRPC, Lua dissectors, Boofuzz | |
| Firmware, binwalk, QEMU emulation, JTAG/UART, U-Boot, IoT | |
| EAC, BattlEye, Vanguard, FACEIT, VAC, kernel AC analysis | |
| Ghidra Python/Java scripts, headless, vulnerability finding, custom analyzers | |
| IDAPython / IDALib scripts, Hex-Rays API, batch decompile, OLLVM helpers | |
| Unicorn engine emulation, function-level emulation, JNI stubbing, syscall sim | |
| Stripped symbol recovery, magic numbers, paired calls, xref analysis | |
| C/C++ structure recovery, vtables, std::string/vector/map, field type inference | |
| 任务 | 参考文件 |
|---|---|
| 静态分析、反汇编、Ghidra、radare2、objdump、补丁制作 | |
| GDB(搭配pwndbg/gef/peda)、LLDB、strace/ltrace、崩溃分析 | |
| Android APK、DEX、smali、ADB、Android平台Frida、重打包 | |
| iOS IPA、Mach-O、class-dump、Frida ObjC/Swift、Keychain | |
| macOS XPC、launchd、kext、SIP、Linux内核模块 | |
| Windows PE、WinDbg、x64dbg、.NET/dnSpy、内核驱动 | |
| Frida脚本编写、Java/Native/ObjC钩子、SSL证书解绑、gadget | |
| .NET IL、dnSpy、de4dot、Java/JVM、Kotlin、Unity/IL2CPP、Mono | |
| 恶意软件、混淆、加壳分析、IOC提取、Volatility | |
| CTF pwn/rev、BOF、ROP、堆漏洞利用、pwntools、angr/Z3 | |
| 网络协议逆向、Wireshark、mitmproxy、Protobuf、gRPC、Lua dissectors、Boofuzz | |
| 固件、binwalk、QEMU仿真、JTAG/UART、U-Boot、IoT | |
| EAC、BattlEye、Vanguard、FACEIT、VAC、内核反作弊分析 | |
| Ghidra Python/Java脚本、无头模式、漏洞查找、自定义分析器 | |
| IDAPython / IDALib脚本、Hex-Rays API、批量反编译、OLLVM辅助工具 | |
| Unicorn引擎仿真、函数级仿真、JNI桩代码、系统调用模拟 | |
| 剥离符号恢复、魔术数字、配对调用、交叉引用分析 | |
| C/C++结构恢复、虚表、std::string/vector/map、字段类型推断 | |
Bundled Tools (tools/
)
tools/配套工具(tools/
)
tools/The skill ships ready-to-use companion utilities (all original work, MIT-licensed):
| Tool | Purpose |
|---|---|
| IDA Pro plugin (Ctrl-Shift-E) — exports the IDB into a |
| Frida agent — dumps DEX from a running Android process via memory scan + ClassLoader traversal |
| Setup notes and config snippets for connecting agents to upstream MCP servers ( |
See for usage details. The directory documents the live-query workflow (alternative to file export) — both modes are supported by the methodology files above.
tools/README.mdtools/mcp/本技能附带可直接使用的配套工具(均为原创,MIT许可):
| 工具 | 用途 |
|---|---|
| IDA Pro插件(快捷键Ctrl-Shift-E)——将IDB导出到 |
| Frida代理——通过内存扫描+ClassLoader遍历,从运行中的Android进程导出DEX文件 |
| 连接Agent到上游MCP服务器( |
使用细节请查看。目录记录了实时查询工作流(文件导出的替代方案)——上述方法论文件均支持这两种模式。
tools/README.mdtools/mcp/Universal First Steps
通用初始步骤
Before loading any reference file, establish context:
加载任何参考文件前,先明确上下文:
1. Identify the Target
1. 识别目标
bash
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, ASLRBinary format decision tree:
- ELF → Linux native → +
references/static-analysis.mdreferences/dynamic-debugging.md - PE/PE32+ → Windows native → +
references/windows-re.mdreferences/static-analysis.md - PE with .NET metadata → (dnSpy first)
references/managed-code-re.md - Mach-O → macOS/iOS → +
references/macos-kernel-re.mdreferences/ios-re.md - DEX/APK/AAB → Android →
references/android-re.md - JAR/WAR/AAR → Java →
references/managed-code-re.md - .sys driver → (kernel section) or
references/windows-re.mdreferences/anticheat-re.md - Assembly-CSharp.dll → Unity → (Unity section)
references/managed-code-re.md - Unknown/firmware → (binwalk + entropy)
references/firmware-embedded.md
Task-type decision tree (applies to any format):
- Stripped binary, unknown functions →
references/symbol-recovery.md - Unknown struct layouts in decompilation →
references/struct-recovery.md - Need to run just one function in isolation →
references/unicorn-emulation.md - Using IDA Pro for analysis →
references/idapython.md - Using Ghidra for analysis →
references/ghidra-scripting.md
bash
file <binary> # 文件类型、架构、位数、是否剥离符号?
xxd <binary> | head -4 # 魔术字节
strings -a <binary> | head -60
checksec --file=<binary> # NX、PIE、RELRO、栈金丝雀、ASLR二进制格式决策树:
- ELF → Linux原生 → +
references/static-analysis.mdreferences/dynamic-debugging.md - PE/PE32+ → Windows原生 → +
references/windows-re.mdreferences/static-analysis.md - 含.NET元数据的PE → (优先使用dnSpy)
references/managed-code-re.md - Mach-O → macOS/iOS → +
references/macos-kernel-re.mdreferences/ios-re.md - DEX/APK/AAB → Android →
references/android-re.md - JAR/WAR/AAR → Java →
references/managed-code-re.md - .sys驱动 → (内核部分)或
references/windows-re.mdreferences/anticheat-re.md - Assembly-CSharp.dll → Unity → (Unity部分)
references/managed-code-re.md - 未知格式/固件 → (binwalk + 熵分析)
references/firmware-embedded.md
任务类型决策树(适用于所有格式):
- 剥离符号的二进制、未知函数 →
references/symbol-recovery.md - 反编译中未知的结构体布局 →
references/struct-recovery.md - 需要单独运行某个函数 →
references/unicorn-emulation.md - 使用IDA Pro进行分析 →
references/idapython.md - 使用Ghidra进行分析 →
references/ghidra-scripting.md
2. Establish Scope
2. 确定范围
Ask the user (or infer from context):
- Goal: understand logic / find vuln / bypass protection / patch / CTF flag / malware IOCs?
- Platform: Linux / Windows / macOS / Android / iOS / embedded?
- Tools available: Ghidra / IDA / radare2 / Binary Ninja / Hopper?
- Dynamic possible?: Can we run it? VM? Emulator? Physical device?
询问用户(或从上下文推断):
- 目标:理解逻辑 / 查找漏洞 / 绕过保护 / 打补丁 / 获取CTF flag / 提取恶意软件IOC?
- 平台:Linux / Windows / macOS / Android / iOS / 嵌入式设备?
- 可用工具:Ghidra / IDA / radare2 / Binary Ninja / Hopper?
- 能否动态运行:是否可以执行目标程序?是否有虚拟机?模拟器?物理设备?
3. Choose Analysis Mode
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仅静态分析 → 无执行风险,但理解速度较慢
仅动态分析 → 速度快,但会遗漏死代码
静态+动态(推荐) → 静态分析用于梳理结构,动态分析验证运行时实际情况Core Toolchain Summary
核心工具链汇总
Static
静态分析
| Tool | Best For |
|---|---|
| Full decompilation, scripting, free |
| CLI powerhouse, scripting, embedded |
| API-first, fast, commercial |
| Industry standard, best signatures |
| Quick disassembly, no install |
| ELF symbol/section inspection |
| Android DEX → Java, GUI |
| APK unpack / repack / smali |
| 工具 | 最佳用途 |
|---|---|
| 完整反编译、脚本支持、免费 |
| CLI功能强大、脚本支持、适用于嵌入式设备 |
| 优先支持API、速度快、商业软件 |
| 行业标准、签名库最完善 |
| 快速反汇编、无需安装 |
| ELF符号/段检查 |
| Android DEX转Java、带GUI |
| APK解包/重打包/smali处理 |
Dynamic
动态分析
| Tool | Best For |
|---|---|
| Linux ELF debugging |
| macOS/iOS/Swift debugging |
| Cross-platform hooking, no source |
| Syscall / library call tracing |
| Memory errors, Helgrind |
| Windows kernel + user mode |
| Windows GUI debugger |
| 工具 | 最佳用途 |
|---|---|
| Linux ELF调试 |
| macOS/iOS/Swift调试 |
| 跨平台钩子、无需源码 |
| 系统调用/库函数追踪 |
| 内存错误检测、Helgrind |
| Windows内核+用户态调试 |
| Windows GUI调试器 |
Network
网络分析
| Tool | Best For |
|---|---|
| Packet capture + dissection |
| HTTP/S MITM |
| In-process SSL unpin |
| Headless capture |
| 工具 | 最佳用途 |
|---|---|
| 数据包捕获+解析 |
| HTTP/S中间人攻击 |
| 进程内SSL证书解绑 |
| 无界面捕获 |
Methodology Frameworks
方法论框架
Static Analysis Workflow
静态分析工作流
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 inline1. file + strings + checksec → 快速分类
2. 熵分析 → 是否加壳/加密?
3. 导入表 / 符号表 → 了解功能范围
4. 加载到反编译器中 → 重命名、重新定义类型、添加注释
5. 识别关键函数 → main()、加密函数、网络函数、反调试函数
6. 追踪数据流 → 用户输入 → 输出点
7. 记录发现结果 → 内联注释Dynamic Analysis Workflow
动态分析工作流
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 values1. 搭建隔离环境 → 虚拟机 / 容器 / 设备
2. 先使用strace/ltrace运行 → 了解系统调用足迹
3. 附加调试器 → 在关键函数处设置断点
4. 观察运行时行为 → 内存、寄存器、分支走向
5. 与静态分析关联 → 验证反编译器输出
6. 按需打补丁/设置钩子 → 绕过检查、记录值Vulnerability Discovery Workflow
漏洞发现工作流
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 → exploitable1. 攻击面映射 → 输入:文件、网络、环境变量、参数
2. 危险函数搜索 → strcpy、gets、sprintf、memcpy、system
3. 整数溢出候选点 → 大小计算、循环
4. 格式化字符串候选点 → printf(user_input)
5. UAF/双释放候选点 → 堆分配模式
6. 触发并确认 → 崩溃 → 可控 → 可利用Anti-Analysis Bypass — Quick Reference
反分析绕过——快速参考
Anti-Debug Detection
反调试检测
bash
undefinedbash
undefinedCheck if binary detects debugger
检查二进制文件是否检测调试器
strings <bin> | grep -iE "ptrace|debugger|isDebuggerPresent|TracerPid"
strings <bin> | grep -iE "ptrace|debugger|isDebuggerPresent|TracerPid"
Linux: ptrace self-detection
Linux:ptrace自检测
Bypass: preload hook or patch the ptrace call
绕过:预加载钩子或补丁ptrace调用
undefinedundefinedCommon Protections
常见保护机制
| Protection | Detection | Bypass |
|---|---|---|
| | Patch JNZ→JMP or LD_PRELOAD fake ptrace |
| Timing checks | | Patch comparison or NOP |
| Checksum/integrity | Hash of own .text section | Patch after decryption, before check |
| Packer (UPX etc.) | High entropy + small imports | |
| Obfuscated strings | No readable strings | Run + extract from memory / Frida hook |
| SSL pinning (mobile) | Network fail in app | Frida ssl-unpin / see |
| 保护机制 | 检测方式 | 绕过方法 |
|---|---|---|
| | 将JNZ补丁为JMP或使用LD_PRELOAD伪造ptrace |
| 计时检查 | 循环中使用 | 补丁比较逻辑或替换为NOP |
| 校验和/完整性检查 | 对自身.text段哈希 | 在解密后、检查前打补丁 |
| 加壳(如UPX) | 高熵值+少量导入表 | |
| 混淆字符串 | 无可读字符串 | 运行后从内存提取 / Frida钩子 |
| SSL证书绑定(移动端) | 应用内网络请求失败 | Frida ssl-unpin / 查看 |
Output Standards
输出标准
When reporting RE findings, always structure output as:
markdown
undefined报告逆向工程结果时,请始终按照以下结构组织:
markdown
undefinedBinary: <name>
二进制文件:<名称>
- Format: ELF64 / PE32+ / DEX / Mach-O
- Arch: x86_64 / ARM64 / ARMv7 / MIPS
- Stripped: Yes/No | PIE: Yes/No | NX: Yes/No
- 格式:ELF64 / PE32+ / DEX / Mach-O
- 架构:x86_64 / ARM64 / ARMv7 / MIPS
- 是否剥离符号:是/否 | PIE:是/否 | NX:是/否
Key Findings
关键发现
- <function name @ offset> — <what it does>
- ...
- <函数名 @ 偏移量> — <功能描述>
- ...
Vulnerability / Behavior
漏洞/行为
- <description with evidence>
- Offset: 0x<addr>
- Triggerable via: <input vector>
- <带证据的描述>
- 偏移量:0x<地址>
- 触发方式:<输入载体>
Recommended Next Steps
建议下一步操作
- <action>
---- <操作内容>
---Naming Conventions for Decompiler Work
反编译器工作命名规范
Follow these standards when annotating in 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在Ghidra/IDA/r2中添加注释时,请遵循以下标准:
函数: 动词_名词_上下文 → decrypt_config_xor, check_license_hwid
变量: 类型_用途 → buf_user_input, sz_packet, ptr_heap_chunk
结构体:ST_<名称> → ST_PacketHeader, ST_LicenseData
标签: loc_<用途> → loc_anti_debug_fail, loc_successScripting Quick Starters
脚本快速入门
See for full Frida patterns.
references/frida.md完整Frida模式请查看。
references/frida.mdGDB Python one-liner (log function args)
GDB Python单行脚本(记录函数参数)
python
undefinedpython
undefinedIn GDB: source this file
在GDB中:source 此文件
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")
undefinedimport 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 # 不暂停,仅记录
LogArgs("target_function")
undefinedradare2 batch analysis
radare2批量分析
bash
r2 -A -q -c "afl~suspicious; pdf @ sym.check_license" <binary>bash
r2 -A -q -c "afl~suspicious; pdf @ sym.check_license" <binary>Ghidra headless analysis
Ghidra无头分析
bash
$GHIDRA_HOME/support/analyzeHeadless /tmp/proj MyProject \
-import <binary> -postScript PrintAST.java -scriptPath ~/ghidra_scriptsbash
$GHIDRA_HOME/support/analyzeHeadless /tmp/proj MyProject \
-import <binary> -postScript PrintAST.java -scriptPath ~/ghidra_scripts