skills/reverse-engineering/SKILL.md
逆向工程技能 - 二进制分析、协议逆向、Hook/注入、脱壳、防护对抗、漏洞挖掘。当你涉及逆向分析、反编译、二进制分析、Hook、Frida、LLDB调试、协议分析、加密算法还原、防护绕过、脱壳、签名伪造时必须使用此技能。即使用户只是说"看看这个app"或"分析一下这个二进制",也应触发。
npx skillsauth add 0X6C7879/aegissec reverse-engineeringInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
[逆向核心清单] ① 攻击面枚举是第一步:输入点→信任边界→数据流→敏感资产 ② 由外向内四层递进:网络→应用→运行时→二进制,每层穷尽再深入 ③ 遇到防护先观察行为特征,对比已知模式,逐步验证假设 [OPSEC三禁] ❌明文存储/传输提取的密钥凭证 ❌在非授权环境执行exploit ❌不清理临时文件和调试痕迹 [分析铁律] 每个结论必须有证据链(工具输出/内存dump/流量截图),"看起来像"不算分析结果
逆向分析时,强制遵守:
输入点识别:
信任边界标识:
敏感数据流追踪:
| 工具 | 适用场景 | 关键用法 |
|------|----------|----------|
| Charles Proxy | HTTP/HTTPS抓包,macOS/iOS首选 | 安装根证书→启用SSL Proxying→添加目标域名→查看请求/响应 |
| mitmproxy | 命令行抓包+脚本化修改 | mitmproxy --mode regular→配置代理→脚本自动修改请求/响应 |
| Wireshark | TCP/UDP/私有协议深度分析 | 捕获→过滤(ip.addr==TARGET)→Follow TCP Stream→分析包结构 |
| tcpdump | 服务器端轻量抓包 | tcpdump -i any -w cap.pcap host TARGET -c 1000 |
| Proxyman | macOS原生HTTP调试代理 | 自动配置系统代理+证书,支持Map Local/Remote |
| Burp Suite | 渗透测试专用 | Repeater重放/Intruder爆破/Scanner扫描 |
抓包实战流程:
协议逆向详解:
protoc --decode_raw < data.bin解码→推断字段含义→还原.proto文件Windsurf环境命令:
| 命令 | 用途 |
|------|------|
| timeout 30 curl -v -k URL | 查看HTTP响应头/TLS信息 |
| timeout 30 curl -x http://127.0.0.1:8080 -k URL | 通过代理抓包 |
| tcpdump -i any -c 100 -w capture.pcap host TARGET | 抓包(需sudo) |
| openssl s_client -connect HOST:PORT | TLS证书和握手信息 |
| openssl x509 -in cert.pem -text -noout | 解析证书详情 |
| nmap -sV -p- TARGET | 端口扫描+服务识别 |
| protoc --decode_raw < data.bin | Protobuf原始解码 |
| python3 -c "import msgpack; print(msgpack.unpackb(open('data.bin','rb').read()))" | MessagePack解码 |
静态分析:
macOS逆向专项(重点):
8a. 基础信息收集:
| 命令 | 用途 |
|------|------|
| file BINARY && lipo -info BINARY | 架构/格式识别(x86_64/arm64/Universal) |
| otool -L BINARY | 查看动态库依赖(识别框架:SwiftUI/AppKit/Electron) |
| otool -l BINARY \| grep -A5 LC_RPATH | 查看RPATH(动态库搜索路径) |
| otool -ov BINARY | 导出ObjC类/方法/协议列表 |
| class-dump BINARY > dump.h | ObjC头文件导出(含属性/方法签名) |
| nm -g BINARY \| grep -i '_OBJC_CLASS' | 导出符号表/类名 |
| swift-demangle < mangled_names.txt | Swift符号还原(类名+方法名) |
| strings BINARY \| grep -iE 'key\|password\|token\|secret\|api\|license' | 提取敏感字符串 |
8b. 应用信息与配置:
| 命令 | 用途 |
|------|------|
| plutil -p APP.app/Contents/Info.plist | 解析Info.plist(版本/Bundle ID/URL Scheme/权限) |
| codesign -dv --entitlements :- APP.app | 查看代码签名+Entitlements权限 |
| codesign -vvv APP.app | 验证签名有效性 |
| mdls APP.app | macOS元数据(版本/签名/沙盒) |
| defaults read BUNDLE_ID | 读取应用UserDefaults存储 |
| sqlite3 ~/Library/Containers/BUNDLE_ID/Data/Library/... | 读取应用SQLite数据库 |
| find ~/Library -name 'BUNDLE_ID*' -o -name 'APP_NAME*' 2>/dev/null | 查找应用所有本地存储 |
| ls -la ~/Library/Application\ Support/APP_NAME/ | 查看应用数据目录 |
8c. macOS安全机制:
| 机制 | 说明 | 逆向影响 |
|------|------|----------|
| SIP (System Integrity Protection) | 保护系统目录/进程 | 无法注入系统进程,需csrutil disable |
| AMFI (Apple Mobile File Integrity) | 代码签名执行策略 | 未签名/篡改的dylib无法加载 |
| Gatekeeper | 应用公证检查 | 可xattr -d com.apple.quarantine绕过 |
| App Sandbox | 文件/网络/IPC访问限制 | 沙盒应用数据在~/Library/Containers/ |
| Hardened Runtime | 禁止代码注入/调试 | 需--disable-library-validationentitlement或关SIP |
| Keychain | 密钥/密码/证书安全存储 | security find-generic-password -s SERVICE_NAME -w |
| TCC (Transparency Consent Control) | 隐私权限控制 | DB在/Library/Application Support/com.apple.TCC/TCC.db |
8d. macOS dylib注入:
DYLD_INSERT_LIBRARIES=hook.dylib ./app(需关SIP或无Hardened Runtime)frida -n "AppName" -l hook.js无需修改二进制lldb -p PID→expr (void*)dlopen("/path/hook.dylib", 2)8e. Keychain提取:
# 列出所有Keychain条目
security dump-keychain -d login.keychain-db
# 查找特定服务的密码
security find-generic-password -s "SERVICE_NAME" -w
# 查找特定账户的密码
security find-internet-password -s "server.com" -a "username" -w
iOS应用专项:
frida-ios-dump/CrackerXI+/bfdecrypt→获取解密IPA/var/mobile/Containers/Data/Application/下查找应用数据keychain-dumper/objection提取Keychain条目find /var/mobile -name '*.plist' | xargs plutil -piproxy 1234 1234→lldb→process connect connect://localhost:1234Android应用专项:
| 命令 | 用途 |
|------|------|
| apktool d APP.apk | APK解包+资源反编译 |
| jadx -d output/ APP.apk | DEX→Java反编译 |
| unzip APP.apk -d extracted/ | 直接解压查看资源 |
| aapt dump badging APP.apk | 查看包信息/权限/组件 |
| keytool -printcert -jarfile APP.apk | 查看签名证书信息 |
| adb shell run-as PACKAGE cat databases/app.db > /tmp/app.db | 提取应用数据库 |
| frida -U -n APP -l hook.js | Frida Hook(需USB连接) |
| 命令 | 用途 |
|------|------|
| lldb -o 'target create BINARY' | 静态加载分析 |
| lldb -p PID | 附加到运行中进程 |
| b -[ClassName methodName] | ObjC方法断点 |
| b swift_function_name | Swift函数断点 |
| register read | 查看寄存器(x0-x7=参数, x0=返回值) |
| register write x0 1 | 修改返回值(绕过检查) |
| po $x0 | 打印ObjC对象 |
| memory read --size 1 --count 100 ADDR | 读内存 |
| memory find ADDR ADDR+0x10000 -s "keyword" | 内存搜索字符串 |
| image dump symtab MODULE | 导出模块符号表 |
| image lookup -rn "license\|verify\|check" MODULE | 正则搜索符号 |
| expr (void*)dlopen("/path/hook.dylib", 2) | 运行时注入dylib |
| watchpoint set variable globalVar | 变量监控断点 |
基础模板:
// ObjC方法Hook
Interceptor.attach(ObjC.classes.ClassName['- methodName'].implementation, {
onEnter(args) { console.log('arg1:', ObjC.Object(args[2])); },
onLeave(retval) { retval.replace(ptr(1)); } // 修改返回值
});
// Swift函数Hook(需先找到mangled name)
Interceptor.attach(Module.findExportByName(null, '$s...'), { ... });
// C函数Hook
Interceptor.attach(Module.findExportByName(null, 'CCCrypt'), {
onEnter(args) { console.log('key:', Memory.readByteArray(args[3], 32)); }
});
常用Frida操作:
frida -n "AppName" -l hook.js — 附加并注入脚本frida-trace -n "AppName" -m "-[NS* *license*]" — 自动追踪匹配方法frida-ps -l — 列出本地进程ObjC.classes.ClassName.$methods — 列出所有方法ObjC.chooseSync(ObjC.classes.ClassName) — 查找内存中的实例Memory.scan(addr, size, pattern, { onMatch(addr,size){} }) — 内存模式搜索内存搜索与Dump:
Memory.scan或LLDB的memory find搜索密码/Token/密钥ObjC.chooseSync()找到目标对象→遍历属性→追踪关联对象内存修改:
memory write ADDR 0x01或Frida Memory.writeU8(addr, 1)register write x0 1或Frida retval.replace(ptr(1))Memory.patchCode(addr, 4, code => { code.putRet(); })\x1f\x20\x03\xd5(arm64 NOP)覆盖检查指令内存取证流程:
-[LicenseManager isActivated])静态反编译:
算法还原:
## 逆向分析报告
### 目标信息
- 名称/版本/平台/架构
- 保护机制:签名/混淆/加壳/反调试
### 攻击面
| 输入点 | 类型 | 信任边界 | 风险等级 |
### 关键发现
| # | 类别 | 描述 | 证据 | 影响 | 利用难度 |
### 算法还原
| 算法名称 | 用途 | 类型 | 还原代码/伪代码 |
### 防护分析
| 防护类型 | 实现方式 | 绕过方案 | 验证状态 |
### 漏洞清单
| # | 类型 | 描述 | PoC | 影响 | CVSS |
### 分析过程记录
| 步骤 | 工具/命令 | 输出摘要 | 结论 |
UI逆向:
Accessibility Inspector / Frida枚举UIWindow子视图CAAnimation/UIView.animate参数Hook→还原动画曲线/时长/延迟NSView hierarchy / NSWindow contentView / SwiftUI _printChanges()架构逆向:
otool -L查动态库 → class-dump查类依赖 → 绘制模块依赖图strings提取特征字符串 → 匹配已知SDK(Firebase/Amplitude/Sentry等)业务逻辑还原:
竞品技术分析:
外部输入 > 认证授权 > 加密实现 > 计费逻辑 > 文件操作 > 数据库 > 序列化 > 日志
file target # 文件类型(ELF/PE/Mach-O)
checksec --file=target # 保护机制(NX/ASLR/Canary/PIE/RELRO)
strings -n 8 target | head -50 # 关键字符串
readelf -h target # ELF头信息
readelf -S target # 段信息
ldd target # 动态库依赖(Linux)
nm -D target # 动态符号
文件类型?
├── ELF (Linux)
│ ├── stripped → 从strings/imports入手定位关键函数
│ ├── 动态链接 → 分析导入表确认库依赖
│ └── 静态链接 → strings找关键字符串→交叉引用
├── PE (Windows)
│ ├── .NET → dnSpy/ILSpy反编译(几乎等于源码)
│ ├── C/C++ → Ghidra/IDA反编译→分析WinAPI调用模式
│ └── 加壳 → DIE/Exeinfo识别壳→脱壳→重新分析
├── Mach-O (macOS/iOS) → 见上方Phase 3
└── 固件 (bin/img)
├── binwalk -Me firmware.bin 提取文件系统
└── 找关键二进制→确认架构(ARM/MIPS)→Ghidra加载
gdb ./target
(gdb) info functions # 函数列表
(gdb) break main # 函数断点
(gdb) break *0x401234 # 地址断点
(gdb) run # 运行
(gdb) ni / si # 步过/步入
(gdb) x/20x $rsp # 查看栈(20个hex word)
(gdb) x/s 0x402000 # 查看字符串
(gdb) info registers # 寄存器
(gdb) set $rax = 1 # 修改寄存器(绕过检查)
(gdb) catch syscall write # 系统调用断点
(gdb) vmmap # 内存映射(需pwndbg/peda/gef)
| 保护 | 检测方法 | 绕过策略 |
|------|----------|----------|
| ASLR | checksec | 信息泄露基址 |
| NX | checksec | ROP chain |
| Canary | checksec | 泄露/覆盖TLS |
| PIE | checksec | 泄露.text基址 |
| RELRO | checksec | Full RELRO→无法覆GOT |
| UPX壳 | DIE/Exeinfo | upx -d |
| VMProtect | 特征识别 | 找OEP+dump |
| 控制流平坦化 | OLLVM特征 | 符号执行/手动还原 |
| 任务 | MCP工具 | 备选 |
|------|---------|------|
| 列出函数 | mcp__ghidra__list_functions | readelf -s / nm |
| 反编译函数 | mcp__ghidra__decompile_function | IDA F5 / Hopper |
| 按地址反编译 | mcp__ghidra__decompile_function_by_address | — |
| 反汇编 | mcp__ghidra__disassemble_function | objdump -d |
| 交叉引用 | mcp__ghidra__get_xrefs_to / get_xrefs_from | IDA X |
| 字符串搜索 | mcp__ghidra__list_strings | strings |
| 导入/导出 | mcp__ghidra__list_imports / list_exports | nm |
| 段信息 | mcp__ghidra__list_segments | readelf -l |
| 类/命名空间 | mcp__ghidra__list_classes / list_namespaces | class-dump |
| 重命名 | mcp__ghidra__rename_function / rename_variable | — |
| 标注 | mcp__ghidra__set_decompiler_comment | — |
Ghidra分析流程:
list_functions → 定位main/关键函数名list_strings → 找密码、URL、错误信息等线索decompile_function("main") → 理解主逻辑get_xrefs_to(关键函数) → 调用链追踪rename_function / set_decompiler_comment → 标注分析结果development
WooYun-derived business-logic testing methodology for web apps and APIs. Use when the request involves 支付、退款、订单、越权、认证、授权、价格篡改或业务流程绕过 review, especially black-box probing for price tampering, account takeover, and process bypass flaws.
tools
Escalate privileges on Windows systems using service misconfigurations, DLL hijacking, token manipulation, UAC bypasses, registry exploits, and credential dumping. Use when performing Windows post-exploitation or privilege escalation.
development
Use when performing AD pentest tunneling and pivoting, especially with Ligolo-ng, Chisel, frp, proxychains, SSH forwarding, SOCKS relays, reverse tunnels, or when internal reachability is the main blocker.
development
Threat model, security audit, find vulnerabilities, check security of my app, risk assessment, penetration test prep, analyze attack surface, what could an attacker exploit. Use this skill whenever a user wants holistic security analysis of a codebase, application, or project. MUST be invoked instead of analyzing security yourself — it runs a specialized 8-phase STRIDE workflow producing professional deliverables you cannot generate alone: risk assessment reports, DFD diagrams, threat inventories, attack path validation, mitigation plans, and pentest plans. Trigger on: 威胁建模, 安全评估, 渗透测试, 安全分析, 安全审计, 安全检查, 风险评估. NOT for: fixing one specific bug, adding one security feature (rate limiting, CORS), writing tests, CI/CD setup, or debugging errors.