关于 Reverse Engineering & Binary Analysis
面向分析人员的 Claude 技能,用于检查二进制文件、固件、汇编和网络协议。它借助 Ghidra、IDA Pro 等工具的输出,指导初步分析、代码解读、漏洞审查与逆向流程。
主要功能
- 01二进制格式与架构初筛
- 02汇编解读与逻辑还原
- 03固件与协议分析
- 04反分析技术识别
- 05CTF 二进制题目支持
适用场景
- 01初步检查可疑 ELF 或 PE 文件
- 02解读 Ghidra 或 IDA Pro 输出
- 03分析嵌入式设备固件
- 04根据捕获流量梳理协议
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ masriyan/ claude-code-cybersecurity-skill --skill reverse-engineering-&-binary-analysis安装后在 Claude Code 中输入/reverse-engineering-&-binary-analysis确认已加载。
附带文件examples/example_usage.mdscripts/binary_analyzer.py
详细介绍
逆向工程与二进制分析
用途
帮助 Claude 执行逆向工程任务,包括二进制分析、汇编解读、反编译、固件逆向工程和协议分析。Claude 可直接读取并解读反汇编代码、识别模式、重建逻辑,并借助逆向工程工具的输出,帮助分析复杂二进制文件。
激活条件
当用户询问以下内容时,此技能会激活:
- 分析 ELF、PE(exe/dll)、Mach-O 或原始二进制文件
- 解读 x86、x64、ARM、MIPS 或 RISC-V 汇编代码
- 对嵌入式/IoT 设备固件进行逆向工程
- 对网络协议进行逆向工程
- 使用 Ghidra、IDA Pro、radare2 或 Binary Ninja 的输出
- 确定二进制文件或函数的作用
- 在反汇编代码中查找漏洞
- CTF 二进制挑战(pwn、reversing 类别)
- 识别反调试或反分析技术
- 解包或反混淆二进制文件
前置条件
pip install capstone pyelftools pefile lief
推荐的逆向工程工具:
Ghidra— NSA 开源逆向工程框架(免费)radare2/Cutter— 开源逆向工程框架Binary Ninja— 支持脚本编写的商业逆向工程平台IDA Pro / Free— 行业标准反汇编器GDB + GEF/PEDA/pwndbg— 动态调试Binwalk— 固件提取与分析strings, file, objdump, readelf— Linux 标准实用工具
核心能力
1. 初步二进制分析
当用户提供二进制文件或询问某个文件是什么时:
运行以下命令,并将输出提供给 Claude 分析:
# File type identification
file suspicious_binary
# Strings extraction (often reveals C2, keys, paths)
strings -a suspicious_binary | grep -E "(http|/etc|password|key|secret|flag)"
# ELF analysis
readelf -a suspicious_binary
objdump -d suspicious_binary | head -100
# PE analysis
python scripts/binary_analyzer.py --file malware.exe --strings --imports
# Entropy analysis (high entropy = packed/encrypted)
python scripts/binary_analyzer.py --file binary --entropy
二进制初步分析清单:
[ ] File type and format (magic bytes): ELF / PE / Mach-O / raw
[ ] Target architecture: x86 / x64 / ARM32 / ARM64 / MIPS / RISC-V
[ ] Endianness: little-endian / big-endian
[ ] Linking type: statically linked / dynamically linked
[ ] Security features: PIE / ASLR / NX/DEP / Stack Canary / RELRO
[ ] Packing detected: UPX / Themida / custom (high entropy sections)
[ ] Compiler identified: GCC / MSVC / Clang / Rust / Go
[ ] Interesting strings: URLs, IPs, credentials, file paths
[ ] Import/Export table: suspicious API calls
[ ] Entry point and sections mapping
安全特性检测:
# Linux: checksec (from pwntools)
checksec --file=./binary
# Or check manually:
readelf -l binary | grep GNU_STACK # NX bit
readelf -d binary | grep RELRO # RELRO
2. 汇编代码解读
当用户粘贴反汇编代码或 Ghidra 反编译结果时:
Claude 将:
- 根据指令语法识别架构
- 从提供的入口点跟踪执行流程
- 识别函数调用(call/bl/jal 指令)
- 根据汇编代码重建高级逻辑
- 为每个代码块添加注释,说明其用途
- 标记与安全相关的模式
常见 x86-64 模式:
| 模式 | 指令 | 含义 |
|---|---|---|
| 函数序言 | push rbp; mov rbp, rsp; sub rsp, N | 设置栈帧 |
| 函数尾声 | leave; ret 或 pop rbp; ret | 拆除栈帧 |
| 局部变量 | mov [rbp-N], rax | 在栈上存储值 |
| 循环计数器 | cmp rax, N; jl/jge loop_top | 带计数器的循环 |
| 栈上缓冲区 | sub rsp, 0x100 | 256 字节的局部缓冲区 |
| 字符串复制 | rep movsb | 内存复制 |
| Memset | rep stosb | 内存清零/填充 |
| Switch-case | 间接跳转:jmp [rax*8 + table] | 跳转表 |
| 系统调用(Linux) | mov rax, N; syscall | 直接系统调用 |
| Printf/格式字符串 | lea rdi, [rip+str]; call printf@plt | 打印语句 |
| 堆分配 | call malloc / call operator new | 动态内存分配 |
常见 ARM64 模式:
| 模式 | 指令 | 含义 |
|---|---|---|
| 函数序言 | stp x29, x30, [sp, #-N]! | 保存帧指针和 LR |
| 返回 | ret(使用 x30) | 从函数返回 |
| 成对加载/存储 | ldp/stp | 加载/存储两个寄存器 |
| 分支并链接 | bl func | 调用函数 |
| 条件分支 | b.eq / b.ne / b.lt | 条件跳转 |
| 系统调用 | svc #0 | 系统调用 |
加密常量检测:
# Common crypto constants to watch for:
AES_SBOX = bytes.fromhex("637c777bf26b6fc5...") # AES SubBytes table
SHA256_K = [0x428a2f98, 0x71374491, ...] # SHA-256 round constants
RC4_INIT_PATTERN # Sequential 0x00-0xFF
3. 固件逆向工程
当用户要求分析嵌入式固件时:
# Step 1: Identify firmware format
file firmware.bin
binwalk firmware.bin
# Step 2: Extract filesystem
binwalk -e firmware.bin
# Extracts to _firmware.bin.extracted/
# Step 3: Analyze extracted filesystem
ls -la _firmware.bin.extracted/
find . -name "*.cgi" -o -name "passwd" -o -name "shadow" -o -name "*.conf"
# Step 4: Find sensitive data
grep -r "password\|admin\|secret\|key" . --include="*.conf" --include="*.xml"
# Step 5: Find binary entry points
file _firmware.bin.extracted/bin/*
strings -a httpd | grep -E "(password|auth|key)"
固件分析清单:
[ ] Identify firmware packaging format (SquashFS, JFFS2, CPIO, raw)
[ ] Extract filesystem using binwalk -e
[ ] Identify target OS and RTOS (Linux, VxWorks, ThreadX, FreeRTOS)
[ ] Find hardcoded credentials in /etc/passwd, config files, binaries
[ ] Identify web interface binaries (httpd, lighttpd, uhttpd)
[ ] Check for debug interfaces (JTAG, UART, SSH enabled)
[ ] Identify update mechanism and signing verification
[ ] Search for private keys, certificates, API keys
[ ] Check for command injection in shell scripts and CGI handlers
[ ] Map memory layout from linker scripts or binary headers
4. 协议逆向工程
当用户想要对协议进行逆向工程时:
给定捕获的流量或二进制数据:
-
帧结构分析 — 查找:
- 魔数或同步模式(开头处的固定字节序列)
- 长度字段(2 或 4 个字节,通常位于偏移量 2-4 处)
- 消息类型/命令标识符(1-2 个字节)
- 校验和/CRC(末尾的 1-4 个字节)
- 填充模式(填充 0x00 或 0xFF)
-
字段类型识别:
Common field patterns: - 4 bytes, big-endian, values 0-65535 → likely length or port - 16 bytes uniform random → UUID or AES key - Null-terminated variable sequence → ASCII string - Fixed 4 bytes: 0xDEADBEEF, 0xCAFEBABE → magic number -
命令-响应映射 — 分析成对的数据以查找:
- 请求:特定类型字节 → 响应:对应的确认消息
- 错误响应:常见的错误代码模式
-
状态机构建:
[INIT] → send magic handshake → [AUTH] → send credentials → [CONNECTED] → send commands → [DATA] → receive data → [IDLE] -
生成解析器代码:
import struct MAGIC = b"\xDE\xAD\xBE\xEF" def parse_packet(data: bytes) -> dict: if not data.startswith(MAGIC): raise ValueError("Invalid magic bytes") msg_type, length = struct.unpack(">HH", data[4:8]) payload = data[8:8 + length] checksum = struct.unpack(">H", data[8 + length:8 + length + 2])[0] return { "type": msg_type, "length": length, "payload": payload, "checksum": checksum }
5. 反逆向技术识别与绕过
当用户遇到反分析措施时:
| 技术 | 指标 | 绕过方法 |
|---|---|---|
| UPX 加壳 | UPX! 字符串、高熵 | upx -d binary |
| 反调试:IsDebuggerPresent | 导入表中的 API 调用 | 修补:替换为 NOP 或强制返回 0 |
| 反调试:ptrace 检查 | ptrace(PTRACE_TRACEME) | GDB:catch syscall ptrace + 返回 1 |
| 计时检查 | RDTSC、GetTickCount 循环 | 修补跳转或将计时检查替换为 NOP |
| 虚拟机检测 | 检查 VMware 注册表项/文件 | 在裸机上运行或进行修补 |
| 字符串加密 | 没有可读字符串、XOR 循环 | 找到解密例程,在其后设置断点 |
| 控制流扁平化 | 使用状态机的 switch 分发 | 跟踪执行以映射实际 CFG |
| 代码虚拟化 | 自定义 VM 解释器 | 分析 VM 字节码语义 |
| 自修改代码 | WriteProcessMemory、VirtualProtect | 在写入目标处设置断点 |
用于自动化的 Ghidra 脚本:
// Ghidra script: find all XOR loops (common string decryption)
FunctionManager fm = currentProgram.getFunctionManager();
for (Function f : fm.getFunctions(true)) {
// Analyze function for XOR instructions
// Flag functions with XOR + loop patterns
}
6. CTF 二进制挑战
当用户正在解决 CTF 挑战(pwn/rev 类别)时:
CTF 快速初步分析:
# Check protections
checksec --file=./challenge
# Find win functions, hidden strings
strings ./challenge | grep -i "flag\|win\|cat\|/bin"
objdump -d ./challenge | grep -A2 "win\|backdoor\|system"
# Run with strace to see syscalls
strace ./challenge < /dev/null 2>&1 | head -50
# Dynamic analysis with pwndbg
gdb ./challenge
# In GDB:
# info functions → list all functions
# disas main → disassemble main
# b *0x401234 → breakpoint at address
# r < input.txt → run with input
常见 CTF 模式:
gets()/scanf("%s")未进行边界检查 → 栈缓冲区溢出printf(user_input)未使用格式字符串 → 格式字符串漏洞strcmp(input, flag)→ 计时攻击或直接比较- 使用密钥的自定义密码 → 找到密钥,通过 XOR 解密
- 基于 VM 的挑战 → 跟踪字节码执行以找到 flag 检查逻辑
输出规范
分析二进制文件时,Claude 会提供:
- 文件摘要:类型、架构、安全特性
- 函数列表:关键函数及其用途
- 带注释的反汇编:逐行说明
- 漏洞评估:代码中发现的安全问题
- 伪代码重构:汇编代码的高级等价表示
脚本参考
binary_analyzer.py
# Full static analysis
python scripts/binary_analyzer.py --file suspicious.elf --output analysis.json
# Extract strings and imports only
python scripts/binary_analyzer.py --file malware.exe --strings --imports
# Entropy analysis (detect packing/encryption)
python scripts/binary_analyzer.py --file firmware.bin --entropy
技能集成
| 条件 | 相邻技能 |
|---|---|
| 样本需要动态行为分析 | → 技能 05(恶意软件分析) |
| 发现漏洞 → 开发利用程序 | → 技能 03(漏洞利用开发) |
| 从分析中提取 IOC | → 技能 06(威胁狩猎) |
| 根据发现结果创建检测规则 | → 技能 15(蓝队防御) |
参考资料
- Ghidra 官方文档
- radare2 手册
- Intel x86-64 软件开发人员手册
- ARM 架构参考手册
- ELF 规范(Linux Foundation)
- PE 格式参考(Microsoft)
- Binwalk 文档
- pwndbg 文档
v3.0 增强(2026 更新)
更快速、更强大的逆向工程工作流:
- AI 辅助反编译 — 使用 Claude 为 Ghidra/IDA 反编译器的输出添加注释:重命名变量、恢复结构体、推断函数用途并总结控制流。应将 AI 命名视为待验证的假设,而非确凿事实。
- Ghidra 无头自动化 — 使用后置脚本编写批量分析(
analyzeHeadless),以跨二进制文件提取 IOC 和字符串。 - 优先模拟分析 — 使用 Qiling/Unicorn 运行代码片段,在不启动完整调试器的情况下解析动态字符串/配置;使用 angr 对 CTF 风格的逻辑进行符号探索。
- Go / Rust / Nim 二进制文件 — 使用针对语言的恢复方法(Go:
gopclntab函数/字符串恢复;Rust:名称修饰还原、利用 panic 字符串进行线索跳转),因为现代剥离符号的二进制文件占主导地位。 - eBPF 和内核对象 — 识别用于隐匿的 eBPF 字节码和内核模块。
- 固件 — 使用
binwalk提取 → 挂载文件系统 → 使用 FirmAE/QEMU 模拟;查找硬编码凭据、更新机制和加密密钥。
精确性规则: 每次分析都记录加载地址/基址、架构、调用约定和编译器/工具链,以确保偏移可复现。
评论
支持 Markdown