Files

36 KiB
Raw Permalink Blame History

6 个单开技能 实现计划

For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (- [ ]) syntax for tracking.

Goal: 新增 6 个原子技能(re-cpp-abi / re-macos / re-attribution / re-hw-chip / re-ai-attack / re-sdr)+ 挂载同步,技能总数 91 → 97。

Architecture: 纯技能文档扩展。6 个新技能目录(SKILL.md,按 docs/skill-template.md 原子技能规范)+ 挂载(re-binary-core / re-forensics 网关、rerouting A 表 RTTI 行、4 处跨域引用)+ 计数同步(README / AGENTS / marketplace)。

Tech Stack: Markdown / YAML frontmatter / validate.mjs(npm test,现有)

Global Constraints

  • 红线 1 呈现中性:禁用「最推荐」「强烈建议」等最高级强推措辞
  • 红线 2 隐私脱敏:内容不指向具体项目/公司/产品(归因技能只写方法不写真实案例)
  • 不绑定具体工具:方法为核心,工具为可替换示例;「工具准备」按模板给跨 OS 安装命令(硬件类技能给选购指引)
  • validate.mjs:frontmatter name=目录名、description 非空、type: atomic 必含「## 工具准备」、[[链接]] 必须解析
  • 工作区有 4 个未提交修改(re-binary-core / re-mobile / re-protocol 的 SKILL.md、README.md)——各任务 commit 只 add 本任务列出的文件
  • re-binary-core/SKILL.md 有用户未提交改动:Task 7 对该文件只做工作区修改、不 git add 提交该文件(挂载行与用户改动共存于工作区,由用户一并提交)
  • 新技能创建后 npm test 预期输出按任务标注(92 → 97 递增)

Task 1: 创建 re-cpp-abi 技能

Files:

  • Create: .claude/skills/re-cpp-abi/SKILL.md

Interfaces:

  • Consumes: 无(新目录)

  • Produces: 技能目录 re-cpp-abi(供 Task 7 的 re-cpp-abi 链接解析;计数 91 → 92)

  • Step 1: 创建目录与 SKILL.md

mkdir -p .claude/skills/re-cpp-abi

写入 .claude/skills/re-cpp-abi/SKILL.md:

---
name: re-cpp-abi
type: atomic
description: >
  现代 C++ 二进制逆向:RTTI/异常/虚表恢复、ABI 识别、mangling 解码。
  触发词:C++逆向、RTTI、虚表恢复、异常处理、C++ ABI、mangling、C++反编译。
---

# 现代 C++ 逆向(RTTI / 异常 / 虚表)

## 何时使用 / 何时不用

- 用:RTTI/异常表密集的二进制、反编译结果混乱的 C++ 目标(类层次/虚调用/异常流无法直接读出)
- 不用:C 代码或纯汇编(走 [[re-binary-core]] 通用路径);混淆主导的目标(先 [[re-deobfuscate]])

## 工具准备

### readelf / llvm-objdump(节表与异常表)

- Linux: `apt install binutils llvm` / `dnf install binutils llvm` / `pacman -S binutils llvm`
- macOS: `brew install llvm`(binutils 部分 macOS 自带)
- Windows: WSL 或 llvm 预编译
- 验证: `readelf --version`、`llvm-objdump --version`

### c++filt / undname(mangling 解码)

- Linux/macOS: `c++filt`(binutils 自带);Windows: `undname`(VS 工具链)
- 验证: `echo '_ZN3foo3barEv' | c++filt`(输出 `foo::bar()`)

### Ghidra / IDA(反编译底座,脚本化 RTTI 遍历)

- 安装与验证见 [[re-ghidra]] / [[re-ida]] 工具准备

### gdb(异常断点,可选)

- 安装与验证见 [[re-gdb]]

## 操作步骤

按顺序执行,每步产物存档(路径 + sha256,见 [[re-triage]])。

1. **ABI 识别**:
   ```sh
   readelf -s sample | grep -E '_ZN|_ZTV|_ZTI' | head    # Itanium(GCC/Clang)
   strings sample | grep -E '^\?\?_' | head              # MSVC
   ```
   - Itanium 特征:`_ZN`(函数)、`_ZTV`(虚表)、`_ZTI`(RTTI 类型信息)
   - MSVC 特征:`??_7`(vftable)、`??_R`(RTTI)
   - 识别错则后续全部偏——先确认再继续

2. **RTTI 重建(Itanium)**:
   ```sh
   readelf -s sample | grep _ZTI | head
   # _ZTI<类名> 指向 typeinfo;typeinfo+8 处 _ZTVN10__cxxabiv1... 链到 vtable 前缀
   ```
   - 结构:`typeinfo` → `__class_type_info` 派生链 → 每个类的完整继承路径
   - 脚本化:Ghidra/IDA 遍历 _ZTI 引用,重建类继承图(父子关系表)
   - 产出:类名 → 继承链映射(写入会话 symbols_known,见 [[analysis-contract]])

3. **虚表恢复**:
   ```sh
   readelf -s sample | grep _ZTV | head
   ```
   - `_ZTV<类名>` 指向 vtable 起点(虚函数指针数组);`offset to top` + `typeinfo ptr` 位于 vtable 前 8 字节(Itanium ABI)
   - 定位 vtable 后:每个槽位的函数地址 → 调用点反推虚方法名(结合步骤 2 的继承图)
   - 虚调用(`call *reg`)无法静态定名 → 用调用点上下文(参数/返回值使用)缩小候选

4. **异常处理表**:
   ```sh
   readelf -S sample | grep -E 'pdata|xdata'    # PE:.pdata/.xdata
   readelf -S sample | grep -E 'eh_frame|gcc_except'   # ELF:.eh_frame
   ```
   - PE:`.pdata` 的 RUNTIME_FUNCTION(Begin/End/UnwindInfo)→ `.xdata` 展开数据 → 异常处理器(__CxxFrameHandler3)
   - ELF:`.eh_frame` 的 FDE/CIE → 展开规则与 LSDA(.gcc_except_table)→ 异常处理函数
   - 用途:恢复被异常路径打断的控制流、定位析构/清理逻辑(catch 块)

5. **模板/lambda 识别**:
   - 模板:符号含 `<...>` 参数(Itanium mangling 中展开为长串);实例化爆炸时按调用模式聚类
   - lambda:Itanium 中 `_ZZ<作用域>ENK...` 特征、MSVC 中 `<lambda_...>`;lambda 局部类**无 RTTI**(步骤 2 缺失时反推)
   - 输出:疑似模板实例化/lambda 的函数清单 + 调用点

6. **mangling 解码(批量)**:
   ```sh
   readelf -s sample | grep -E '_ZN|_ZTV|_ZTI' | awk '{print $8}' | c++filt | head -20
   ```
   - MSVC: `undname` 或在线等价工具
   - 解码结果写入符号表(供 [[re-ghidra]] / [[re-ida]] 重命名)

## 跨域联合

- [[re-binary-core]] 网关:本技能归属(选择树「现代 C++」分支待加)
- [[re-ghidra]] / [[re-ida]]:反编译底座与脚本化
- [[re-deobfuscate]]:混淆与 ABI 分析衔接
- [[analysis-contract]]:类继承图/符号表按数据契约传递
- [[rerouting]]:RTTI/异常表特征触发本技能(A 表已挂)

## 常见坑与陷阱

- **ABI 误判导致全部解析失败**:现象——用 Itanium 结构解析 MSVC 目标(或反之)全盘错位;原因——识别步骤跳过;对策——先做步骤 1,mangling 特征双查
- **模板展开导致符号爆炸**:现象——readelf 输出几万行 `_Z...`;原因——模板实例化;对策——按调用模式聚类、过滤标准库符号(libstdc++/STL 前缀)
- **lambda 无 RTTI**:现象——类继承图缺节点;原因——lambda 局部类不生成 typeinfo;对策——按 `_ZZ` mangling 特征与调用点识别,不硬找 RTTI
- **异常表版本差异**:现象——.xdata 解析错位;原因——MSVC 异常处理版本(__CxxFrameHandler3 等)不同;对策——按导入函数(__CxxFrameHandler)确认版本再解析
- **虚调用无法静态定名**:现象——`call *reg` 全是间接调用;原因——虚分派;对策——结合 vtable 槽位与调用点证据缩小候选,不猜
  • Step 2: 结构校验

Run: npm test Expected: OK: 92 skills validated(re-cpp-abi 计入;链接 全部指向已存在技能:re-binary-core/re-deobfuscate/re-ghidra/re-ida/analysis-contract/rerouting/re-triage/re-gdb 均存在)

  • Step 3: Commit
git add .claude/skills/re-cpp-abi/SKILL.md
git commit -m "feat: re-cpp-abi 技能——RTTI/异常/虚表恢复与 ABI 识别"

Task 2: 创建 re-macos 技能

Files:

  • Create: .claude/skills/re-macos/SKILL.md

Interfaces:

  • Consumes: 无(新目录)

  • Produces: 技能目录 re-macos(供 Task 7 的 re-macos 链接解析;计数 92 → 93)

  • Step 1: 创建目录与 SKILL.md

mkdir -p .claude/skills/re-macos

写入 .claude/skills/re-macos/SKILL.md:

---
name: re-macos
type: atomic
description: >
  macOS 原生应用逆向:App Bundle/签名公证、entitlements、沙箱与 TCC、钥匙串与 Secure Enclave。
  触发词:macOS逆向、mac app、entitlements、Secure Enclave、钥匙串、TCC、codesign、公证。
---

# macOS 应用逆向

## 何时使用 / 何时不用

- 用:macOS 原生/闭源应用(.app/.dylib/.framework)、带签名公证与沙箱的目标、钥匙串/Secure Enclave 硬件密钥场景
- 不用:iOS 应用(转 [[re-ios]]);纯 Mach-O 格式解析(转 [[re-format-macho]])

## 工具准备

### codesign / spctl / otool / lipo(签名与 Mach-O 工具,macOS 内置)

- macOS: 系统自带(Xcode 命令行工具 `xcode-select --install`)
- Linux: 可静态分析 Mach-O(`llvm-otool`,`brew install llvm` 或发行版 llvm 包)
- 验证: `codesign --version`、`otool --version`

### Hopper / IDA / Ghidra(反编译底座)

- 安装与验证见 [[re-ida]] / [[re-ghidra]]

### lldb(动态调试)

- 安装与验证见 [[re-lldb]]

## 操作步骤

按顺序执行,每步产物存档(路径 + sha256,见 [[re-triage]])。

1. **包结构与签名检查**:
   ```sh
   file Sample.app/Contents/MacOS/Sample
   codesign -dv Sample.app 2>&1 | head            # 签名者/Team ID/要求
   spctl -a -vv Sample.app 2>&1                   # 公证状态(Gatekeeper)
   defaults read Sample.app/Contents/Info.plist   # Info.plist 关键键
   ```
   - 关注:签名者(Apple 开发者/分发证书)、Team ID、Hardened Runtime(runtime 标志)、Info.plist 的 CFBundleIdentifier/版本

2. **entitlements 与沙箱**:
   ```sh
   codesign -d --entitlements :- Sample.app 2>&1 | head -30
   ```
   - 关键键:`com.apple.security.app-sandbox`(沙箱开启)、`com.apple.security.network.client/server`、`com.apple.security.files.user-selected.*`、`com.apple.security.device.*`(摄像头/麦克风)
   - 沙箱 profile 决定能力边界——分析授权逻辑时先看 entitlements 清单

3. **TCC 权限库**:
   ```sh
   # 用户级 TCC 库(授权记录)
   ls ~/Library/Application\ Support/com.apple.TCC/
   ```
   - TCC.db(SQLite)记录各 App 对隐私资源的授权;分析目标对 TCC 的依赖(它请求了什么权限、何时请求)
   - 注意:TCC 数据属系统隐私数据,只读分析不导出内容(红线 2)

4. **钥匙串与 Secure Enclave**:
   - 钥匙串条目类型(通用密码/互联网密码/密钥)与 ACL(`kSecAttrAccess` 可访问性类:非锁定/首次解锁/此设备)
   - Secure Enclave 密钥:`SecKeyCreateWithData` 带 `kSecAttrTokenIDSecureEnclave` —— 私钥**不可提取**(等价 Android Keystore 硬件背书,见 [[re-android-native]] Keystore 审计)
     (注:本行 API 用法已于 2026-09-13 修正——SE 密钥须用 `SecKeyCreateRandomKey`,`SecKeyCreateWithData` 是外部数据导入;现文见 `.claude/skills/re-macos/SKILL.md`,核验记录见 `docs/audit/`)
   - 分析:目标读哪些钥匙串条目(SecItemCopyMatching 调用点)、密钥是否 Secure Enclave 绑定(不可提取 → 记录用途而非字节)

5. **dyld 加载链**:
   ```sh
   otool -L Sample.app/Contents/MacOS/Sample | head    # LC_LOAD_DYLIB 依赖
   otool -l Sample.app/Contents/MacOS/Sample | grep -A4 LC_RPATH
   ```
   - 依赖清单与 RPATH → Dylib Hijacking 面(可写目录 + 缺失依赖)
   - 注入面:DYLD_INSERT_LIBRARIES(受 hardened runtime 限制——有 `com.apple.security.cs.allow-dyld-environment-variables` 才可注入)

6. **反调试与保护**:
   - taskgated/签名校验:改签名或注入触发校验失败的典型点
   - 对抗面分析:代码签名校验(`SecStaticCodeCheckValidity`)、调试器检测(`PT_DENY_ATTACH`)、反注入(`DYLD_INSERT_LIBRARIES` 检查)
   - 动态侧:[[re-lldb]] attach 前先处理 PT_DENY_ATTACH(ptrace 调用点 patch)

## 跨域联合

- [[re-format-macho]]:Mach-O 格式底座(LC_* 解析)
- [[re-ios]]:iOS 侧互补(越狱生态与 entitlements 差异)
- [[re-lldb]]:动态调试
- [[re-frida]]:动态插桩(macOS 桌面支持)
- [[analysis-contract]]:签名/entitlements 信息按数据契约传递

## 常见坑与陷阱

- **签名校验多处触发**:现象——patch 后运行即退;原因——加载/运行/更新多处校验;对策——逐点定位(步骤 6),先处理校验点再过逻辑
- **Secure Enclave 密钥不可提取**:现象——内存搜不到私钥;原因——硬件背书;对策——记录用途与 ACL,不找字节(见步骤 4)
- **TCC 权限导致功能缺失**:现象——目标功能灰掉;原因——TCC 未授权;对策——分析其请求逻辑而非绕过系统权限(红线)
- **公证检查离线不可复现**:现象——离线环境 spctl 结果异常;原因——公证需要网络查询;对策——用 codesign 的本地签名信息替代
- **hardened runtime 限制注入**:现象——DYLD_INSERT_LIBRARIES 无效;原因——runtime 标志未含 allow-dyld 环境变量;对策——静态分析路径([[re-ghidra]]),不硬注入
  • Step 2: 结构校验

Run: npm test Expected: OK: 93 skills validated(链接:re-ios/re-format-macho/re-lldb/re-frida/re-android-native/analysis-contract/re-triage/re-ida/re-ghidra 均存在)

  • Step 3: Commit
git add .claude/skills/re-macos/SKILL.md
git commit -m "feat: re-macos 技能——签名公证/entitlements/钥匙串与 Secure Enclave"

Task 3: 创建 re-attribution 技能

Files:

  • Create: .claude/skills/re-attribution/SKILL.md

Interfaces:

  • Consumes: 无(新目录)

  • Produces: 技能目录 re-attribution(供 Task 7 的 re-attribution 链接解析;计数 93 → 94)

  • Step 1: 创建目录与 SKILL.md

mkdir -p .claude/skills/re-attribution

写入 .claude/skills/re-attribution/SKILL.md:

---
name: re-attribution
type: atomic
description: >
  威胁归因方法论:钻石模型、基础设施图谱、置信度分级与归因报告。
  触发词:归因、APT、attribution、攻击者身份、基础设施图谱、钻石模型、威胁组织。
---

# 威胁归因(APT Attribution)

## 何时使用 / 何时不用

- 用:情报归因请求(「谁干的」)、基础设施关联分析、样本/能力到攻击者的推理
- 不用:单个 IOC 查询(转 [[re-ti]]);恶意行为判定(转 [[re-behavior]])

## 工具准备

### 关联查询工具(Passive DNS / 证书透明 / Whois)

- 多平台: 命令行客户端 + 在线服务(查询类工具,给 API 使用指引)
- 验证: 任一查询工具可返回结果

### MISP(情报关联与共享)

- Linux: `apt install misp` 或 Docker 部署;验证: 实例可访问
- 轻量替代: 本地 CSV/图文件 + 脚本分析

### 图分析(基础设施关系)

- 多平台: `pip install networkx`(python 图分析);验证: `python3 -c "import networkx"`

## 操作步骤

按顺序执行;全部内容脱敏处理(红线 2:不指向具体组织/受害者身份)。

1. **钻石模型定位**:
   - 四角:受害者(已明确)/ 基础设施(C2 域名/IP/证书)/ 能力(工具/样本/漏洞利用)/ 对手(待推断)
   - 产出:四角已知信息表 + 缺失角(归因目标)
   - 规则:只有两角以上才能开始推理;单角(仅样本)不支撑归因声明

2. **基础设施图谱**:
   ```sh
   # 域名/IP/证书关联聚类(示例流程,工具可替换)
   # 1) 收集 C2 域名/IP → Whois 注册信息
   # 2) 证书透明日志查共用证书 → 关联其他域名
   # 3) 图分析(networkx)聚类:共享注册者/证书/NS 的节点合并
   ```
   - 聚类特征:同一注册者/注册邮箱、共用证书、共用 DNS 基础设施、IP 段归属
   - 跳板/托管商共存不能作为归属证据(见坑 1)

3. **能力与样本归因**:
   - 代码复用(样本间相似度:字符串/函数/资源)、TTP 对比(行为模式与已知活动对齐)、时间线(活动窗口对齐)
   - 唯一性特征优先:独特字符串/编译特征/语言习惯(比通用 TTP 更有区分度)
   - 产出:能力证据表(每条证据 → 支持/反对假设)

4. **置信度分级**:
   - 低:单类证据(仅基础设施或仅能力)
   - 中:两类独立证据交叉(如基础设施 + 能力)
   - 高:三类以上 + 时间线一致 + 无矛盾证据
   - 规则:无高置信度证据时声明「关联活动」而非「归属组织」;明确列出未解决的反证

5. **报告**:
   - 结构:结论(分级声明)→ 证据链(每角证据 + 来源)→ 置信度依据 → 反证与未决项 → 方法边界(哪些无法判定)
   - 脱敏:不公开受害者身份/真实组织名(用代号),不发表过度归因声明

## 跨域联合

- [[re-ti]]:情报输入(IOC 查询与背景)
- [[re-ioc]]:指标提取(域名/IP/哈希)
- [[re-behavior]]:行为证据(TTP 对齐)
- [[re-protocol]]:C2 协议分析(基础设施特征)
- [[re-feedback]]:归因案例经验沉淀(脱敏后)

## 常见坑与陷阱

- **基础设施重叠导致误归因**:现象——两活动共享 C2 基础设施被并为一组;原因——共用托管/被劫持基础设施;对策——区分「共享」与「控制」证据(注册信息 vs 仅托管)
- **跳板机 ≠ 归属**:现象——经第三方跳板的活动归到跳板所有者;原因——混淆路径;对策——只把「控制面证据」(注册/配置/唯一特征)算入归属
- **置信度虚高**:现象——单一独特性状(罕见字符串)即高置信度;原因——单证据强但无交叉验证;对策——按步骤 4 分级,单类证据最高「中」
- **脱敏红线**:现象——报告中出现真实受害者/组织身份;原因——复制原始情报未处理;对策——报告前逐项检查(红线 2 强制)
- **时间线证据不足**:现象——活动窗口无法对齐;原因——被动数据缺失;对策——标注时间线缺口,不强行对齐
  • Step 2: 结构校验

Run: npm test Expected: OK: 94 skills validated(链接:re-ti/re-ioc/re-behavior/re-protocol/re-feedback 均存在)

  • Step 3: Commit
git add .claude/skills/re-attribution/SKILL.md
git commit -m "feat: re-attribution 技能——钻石模型/基础设施图谱/置信度分级"

Task 4: 创建 re-hw-chip 技能

Files:

  • Create: .claude/skills/re-hw-chip/SKILL.md

Interfaces:

  • Consumes: 无(新目录)

  • Produces: 技能目录 re-hw-chip(供 Task 7 的 re-hw-chip 链接解析;计数 94 → 95)

  • Step 1: 创建目录与 SKILL.md

mkdir -p .claude/skills/re-hw-chip

写入 .claude/skills/re-hw-chip/SKILL.md:

---
name: re-hw-chip
type: atomic
description: >
  物理层硬件逆向:去封装、裸片分析、探针与 FIB、PCB 电路分析、硬件木马检测。
  触发词:芯片逆向、去封装、decapping、PCB、硬件木马、电路分析、裸片、FIB。
---

# 芯片/PCB 硬件逆向

## 何时使用 / 何时不用

- 用:物理芯片/板级分析(固件提取失败后的物理层)、芯片解密、硬件木马检测
- 不用:固件级分析(转 [[re-fw-extract]]);接口提取(转 [[re-hardware-io]]);无线信号(转 [[re-sdr]])

## 工具准备

### 显微镜/探针台(观察与接触)

- 选购指引:体视显微镜(初检)→ 金相显微镜(裸片);探针台按预算分级
- 验证: 无软件验证——以成像清晰度验收

### decapping 设备与耗材(去封装)

- 化学 decap:发烟硝酸/硫酸 + 加热台(防护:通风橱/护目镜);激光 decap:专用激光器(高成本,外包可选)
- 验证: 无软件验证——以裸露程度验收

### 逻辑分析仪(信号提取)

- 多平台: Saleae 类(配套软件各平台可用)或开源方案(sigrok/PulseView:`pip install sigrok` 或发行版包)
- 验证: `pulseview --version`

### 热成像(功耗/时序异常,可选)

- 选购指引:按分辨率与测温范围选型;验证: 成像验收

## 操作步骤

按顺序执行;全程注意防护与破坏性风险(步骤 1 不可逆)。

1. **去封装(decapping)**:
   - 化学法:加热台预加热 → 滴加发烟硝酸溶解环氧 → 清洗(丙酮)→ 显微镜检查
   - 激光法:激光逐层烧蚀(精度高,成本高)
   - 风险控制:通风橱、防酸手套/护目镜、废弃液处理;先练习废片
   - 验收:金属层可见、无过度腐蚀(伤及晶圆)

2. **裸片分析**:
   - 显微成像(金相显微镜/电子显微镜)→ 金属层走线观察
   - ROM/熔丝提取:成像 → 位图还原(金属层/多晶硅层图案 → 二进制)
   - 产出:ROM 位图 → 数据(与 [[re-fw-extract]] 固件对照)

3. **探针与信号提取**:
   - 探针台接触测试点(总线/时钟/数据线)
   - FIB(聚焦离子束):修改互连/暴露内部节点(高成本,外包)
   - 信号嗅探:逻辑分析仪挂总线(时序对照数据手册)
   - 注意:探针负载可能改变信号(见坑 2)

4. **PCB 电路分析**:
   - 走线还原(万用表导通/成像 → 网络表)
   - IC 标识识别(丝印 → 型号 → 数据手册 → 引脚功能)
   - JTAG/SWD 引脚定位(测试点/走线特征 → 调试接口枚举)

5. **硬件木马检测**:
   - 冗余逻辑特征(无功能路径的触发器/计数器)
   - 功耗/时序异常(热成像 + 电流曲线对照基线)
   - 触发条件分析(特定输入组合/温度/时间条件)

## 跨域联合

- [[re-hardware-io]]:接口提取衔接(JTAG/UART 是软件侧入口)
- [[re-fw-extract]]:固件侧对照(ROM 提取物与固件 dump 比对)
- [[re-sdr]]:无线侧(RF 接口)
- [[re-triage]]:提取物初勘

## 常见坑与陷阱

- **decap 不可逆**:现象——封装破坏后无法恢复;原因——物理破坏;对策——先存档固件([[re-fw-extract]])再做物理操作
- **探针负载改变信号**:现象——挂探针后时序异常;原因——容性负载;对策——高阻探针、记录挂载前后基线
- **FIB 高成本易毁**:现象——FIB 修改失败晶圆报废;原因——离子束损伤;对策——先成像规划、外包给专业服务
- **木马误报**:现象——正常冗余逻辑被当木马;原因——厂商设计含测试/修复逻辑;对策——对照数据手册与已知电路模式,低置信度不发布
- **安全防护缺失**:现象——化学 decap 事故;原因——未用通风橱/防护;对策——步骤 1 风险控制强制前置
  • Step 2: 结构校验

Run: npm test Expected: OK: 95 skills validated(链接:re-fw-extract/re-hardware-io/re-sdr/re-triage 均存在)

  • Step 3: Commit
git add .claude/skills/re-hw-chip/SKILL.md
git commit -m "feat: re-hw-chip 技能——去封装/裸片/探针/PCB/硬件木马"

Task 5: 创建 re-ai-attack 技能

Files:

  • Create: .claude/skills/re-ai-attack/SKILL.md

Interfaces:

  • Consumes: 无(新目录)

  • Produces: 技能目录 re-ai-attack(供 Task 7 的 re-ai-attack 链接解析;计数 95 → 96)

  • Step 1: 创建目录与 SKILL.md

mkdir -p .claude/skills/re-ai-attack

写入 .claude/skills/re-ai-attack/SKILL.md:

---
name: re-ai-attack
type: atomic
description: >
  AI 模型攻击与取证:模型提取攻击、指纹/水印检测、成员推断、对抗样本基础。
  触发词:模型提取、模型窃取、水印检测、模型指纹、成员推断、对抗样本、模型攻击。
---

# AI 模型攻击与取证

## 何时使用 / 何时不用

- 用:模型泄露/窃取取证、API 模型攻击评估(提取/指纹)、训练数据泄露判定
- 不用:模型文件格式解析与权重提取(转 [[re-ai-model]]);模型训练/微调(非逆向)

## 工具准备

### python3(核心运行时)

- 各平台安装见 [[re-python]] 工具准备

### 模型库(torch / tensorflow,按目标格式选)

- 多平台: `pip install torch` / `pip install tensorflow`(按硬件可选 CPU 版)
- 验证: `python3 -c "import torch"`

### 查询接口客户端(API 目标)

- 多平台: `pip install requests`;验证: `python3 -c "import requests"`

## 操作步骤

按顺序执行;仅限授权评估场景(红线:不针对未授权目标)。

1. **模型提取攻击**:
   - 目标:通过 API 查询重建近似模型(蒸馏)
   - 步骤:
     1. 确认接口能力(返回 logits/概率 或仅标签?置信度可得性决定策略)
     2. 查询采样(输入分布覆盖:代表性输入 + 边界扰动)
     3. 蒸馏训练(以 API 输出为教师标签,学生模型拟合)
     4. 评估近似度(同输入集输出对比)
   - 仅标签时:降级为决策边界采样(输出分布重建受限——标注此局限)

2. **模型指纹/水印检测**:
   - 嵌入检测:输入扰动(特定噪声/触发器)→ 输出特征比对(水印触发行为)
   - 指纹提取:模型行为签名(代表性输入集输出向量)→ 与疑似副本比对
   - 窃取取证:嫌疑模型与受害者模型的指纹距离(阈值判定相似)
   - 产出:指纹向量 + 距离报告(置信度)

3. **成员推断**:
   - 目标:判定某样本是否在训练集中
   - 方法:过拟合特征(样本损失/置信度分布对比基线)、影子模型
   - 局限:只能给出统计判定(误报控制:阈值校准)

4. **对抗样本基础**:
   - 白盒:梯度扰动(FGSM/PGD 类方法)
   - 黑盒:查询/迁移扰动
   - 用途:鲁棒性评估与防御验证(非攻击部署)

## 跨域联合

- [[re-ai-model]]:格式/权重侧(提取物分析衔接)
- [[re-python]]:Python 工具链基础
- [[re-feedback]]:攻击案例经验沉淀(脱敏后)

## 常见坑与陷阱

- **查询预算限制**:现象——API 限流/计费中断;原因——高查询量;对策——预算内采样设计(先小批估计)
- **置信度不可得时降级**:现象——接口只返回标签;原因——服务端裁剪输出;对策——决策边界采样 + 标注局限,不硬造概率
- **水印被抹除**:现象——指纹比对失败;原因——嫌疑方做了剪枝/微调;对策——用鲁棒指纹(多触发器)并标注「可能被抹除」
- **成员推断误报**:现象——统计判定错误;原因——阈值偏差;对策——影子模型校准 + 报告置信区间
- **授权边界**:现象——对未授权 API 发起攻击测试;原因——范围未确认;对策——先确认授权(使用边界红线)
  • Step 2: 结构校验

Run: npm test Expected: OK: 96 skills validated(链接:re-ai-model/re-python/re-feedback 均存在)

  • Step 3: Commit
git add .claude/skills/re-ai-attack/SKILL.md
git commit -m "feat: re-ai-attack 技能——模型提取/指纹水印/成员推断"

Task 6: 创建 re-sdr 技能

Files:

  • Create: .claude/skills/re-sdr/SKILL.md

Interfaces:

  • Consumes: 无(新目录)

  • Produces: 技能目录 re-sdr(供 Task 7 的 re-sdr 链接解析;计数 96 → 97)

  • Step 1: 创建目录与 SKILL.md

mkdir -p .claude/skills/re-sdr

写入 .claude/skills/re-sdr/SKILL.md:

---
name: re-sdr
type: atomic
description: >
  射频逆向:信号采集、频谱分析、解调、帧同步与协议恢复、重放。
  触发词:SDR、射频、信号分析、解调、RTL-SDR、HackRF、无线协议、遥测。
---

# 射频信号逆向(SDR)

## 何时使用 / 何时不用

- 用:无线协议/遥控/遥测信号(IoT 无线、遥控器、遥测链路)、信号级协议恢复
- 不用:有线协议(转 [[re-protocol]]);无线 IoT 协议已封装分析(转 [[re-iot-proto]])

## 工具准备

### RTL-SDR / HackRF(接收硬件)

- 选购指引:RTL-SDR(接收,低成本入门)/ HackRF(收发,重放需要)
- 验证: 硬件插入后 `rtl_test` 或 `hackrf_info` 有输出

### GNU Radio(信号处理)

- Linux: `apt install gnuradio` / `pacman -S gnuradio`;macOS: `brew install gnuradio`
- Windows: 官方安装包
- 验证: `gnuradio-companion --version` 或 `grcc --version`

### inspectrum(频谱/时序可视化)

- Linux: `apt install inspectrum` 或源码编译;macOS: `brew install inspectrum`
- 验证: `inspectrum --version`

### Universal Radio Hacker (URH)(解调与帧恢复)

- 多平台: `pip install urh`
- 验证: `urh --version`

## 操作步骤

按顺序执行;仅限授权测试(红线:重放/交互需授权)。

1. **信号采集与频谱分析**:
   ```sh
   # 示例(工具可替换):GNU Radio 或命令行采集
   rtl_sdr -f 433.9M -s 1M capture.iq
   ```
   - 先全频段扫(找活跃信号)→ 定中心频率与带宽 → 采集 IQ
   - 调制识别:频谱形状(FSK 双峰/PSK 平坦/AM 载波)

2. **解调**:
   - URH:加载 IQ → 自动/手动调制识别 → 解调出位流
   - GNU Radio:按识别结果搭解调链(AM/FM/PSK/QAM/FSK)
   - 产出:解调位流(0/1 序列)

3. **帧同步与协议恢复**:
   ```sh
   # URH 位流分析:preamble/同步字识别、编码反转(NRZ/Manchester)
   urh --decode
   ```
   - 找同步字(重复模式/固定前缀)→ 定帧边界 → 字段划分(地址/长度/载荷/CRC)
   - 多帧对照(重复发射)→ 不变字段=固定头、变化字段=数据/序号
   - 产出:帧结构表(字段偏移/长度/语义)

4. **重放与交互**(授权场景):
   - HackRF 回放捕获帧(重放攻击验证——仅授权目标)
   - 交互式:改字段重发(滚动码/加密需先分析算法——转 [[re-crypto-*]])

## 跨域联合

- [[re-iot-proto]]:无线 IoT 协议衔接(MQTT/CoAP 等封装层)
- [[re-protocol]]:帧结构状态机重建衔接
- [[re-crypto-id]] / [[re-crypto-decrypt]]:载荷加密分析
- [[re-feedback]]:信号案例经验沉淀(脱敏后)

## 常见坑与陷阱

- **频率偏移/采样率错误**:现象——解调全乱码;原因——中心频率偏、采样率不匹配;对策——先用已知信号(FM 广播)校准
- **调制误判**:现象——FSK 当 PSK 解;原因——频谱特征相似;对策——对照时域波形(inspectrum)再定
- **重放需授权**:现象——未授权重放触发设备动作;原因——越界操作;对策——红线:仅授权目标
- **编码反转漏看**:现象——位流全反;原因——NRZ/Manchester 未识别;对策——试反相与编码模式组合
- **捕获不完整**:现象——帧被截断;原因——带宽不够/触发时机;对策——加宽带宽、延长采集、按同步字触发
  • Step 2: 结构校验

Run: npm test Expected: OK: 97 skills validated(链接:re-iot-proto/re-protocol/re-crypto-id/re-crypto-decrypt/re-feedback 均存在)

  • Step 3: Commit
git add .claude/skills/re-sdr/SKILL.md
git commit -m "feat: re-sdr 技能——信号采集/解调/帧恢复/重放"

Task 7: 挂载与计数同步

Files:

  • Modify: .claude/skills/re-analyze/references/rerouting.md(A 表 RTTI 行)
  • Modify: .claude/skills/re-binary-core/SKILL.md(子技能列表加 re-cpp-abi——工作区修改,不提交该文件)
  • Modify: .claude/skills/re-forensics/SKILL.md(子技能列表加 re-attribution)
  • Modify: .claude/skills/re-ios/SKILL.md(跨域联合加 re-macos)
  • Modify: .claude/skills/re-hardware-io/SKILL.md(跨域联合加 re-hw-chip)
  • Modify: .claude/skills/re-ai-model/SKILL.md(跨域联合加 re-ai-attack)
  • Modify: .claude/skills/re-iot-proto/SKILL.md(跨域联合加 re-sdr)
  • Modify: README.md(计数 91→97、78→84、导航 6 行——注意:README 有用户未提交改动(安装方式重排),已在上轮随提交纳入;本任务 README 改动会叠加新计数,提交时含全部 README 改动)
  • Modify: AGENTS.md(91→97、78→84)
  • Modify: .claude-plugin/marketplace.json(91→97)

Interfaces:

  • Consumes: Task 1-6 的 6 个技能目录(链接可解析)

  • Produces: 6 技能全库可达;计数 97 = 1 + 12 + 84

  • Step 1: rerouting.md RTTI 行更新

.claude/skills/re-analyze/references/rerouting.md A 表 RTTI 行:

| RTTI/异常表(.pdata/.xdata)密集 | (re-cpp-abi 待建,先走 [[re-binary-core]]) |

改为:

| RTTI/异常表(.pdata/.xdata)密集 | [[re-cpp-abi]] |
  • Step 2: 网关与跨域挂载(6 处编辑)

.claude/skills/re-binary-core/SKILL.md 子技能列表(含 re-anti-cheat 的那行)末尾追加 、[[re-cpp-abi]](即 re-anti-cheat、[[re-cpp-abi]]——本文件只做工作区修改,不 git add)。

.claude/skills/re-forensics/SKILL.md 子技能列表末尾追加 、[[re-attribution]]。

.claude/skills/re-ios/SKILL.md 跨域联合节末尾追加一行:

- 桌面 macOS 生态(签名/entitlements/Secure Enclave)→ [[re-macos]]

.claude/skills/re-hardware-io/SKILL.md 跨域联合节末尾追加一行:

- 物理层芯片/PCB 分析(decap/裸片/木马检测)→ [[re-hw-chip]]

.claude/skills/re-ai-model/SKILL.md 跨域联合节末尾追加一行:

- 模型攻击侧(提取/指纹水印/成员推断)→ [[re-ai-attack]]

.claude/skills/re-iot-proto/SKILL.md 跨域联合节末尾追加一行:

- 射频信号级逆向(采集/解调/帧恢复)→ [[re-sdr]]
  • Step 3: 计数同步(3 文件)

README.md:

  • ## 技能导航(91) → ## 技能导航(97)
  • 入口 → 12 大类网关 → 78 原子技能 → 入口 → 12 大类网关 → 84 原子技能
  • 第 5 行 91 个逆向工程技能 → 97 个逆向工程技能
  • 导航列表:re-binary-core 行末尾加 、re-cpp-abi;re-forensics 行加 、re-attribution;新增两行:
    • - **re-macos**:macOS 应用逆向(签名/entitlements/Secure Enclave)
    • - **re-hw-chip**:芯片/PCB 物理层(decap/裸片/木马检测)
    • - **re-ai-attack**:模型攻击(提取/指纹/成员推断)
    • - **re-sdr**:射频逆向(采集/解调/帧恢复)
  • 说明:README 已含用户安装方式重排改动(上轮随提交纳入),本次计数改动叠加后一并提交

AGENTS.md:

  • (91 个技能) → (97 个技能)
  • 原子技能(78) → 原子技能(84)

.claude-plugin/marketplace.json:

  • 91 个技能 → 97 个技能

  • Step 4: 校验

Run: npm test Expected: OK: 97 skills validated

Run: grep -c "re-cpp-abi\|re-macos\|re-attribution\|re-hw-chip\|re-ai-attack\|re-sdr" README.md Expected: ≥ 6

  • Step 5: Commit(re-binary-core 除外)
git add .claude/skills/re-analyze/references/rerouting.md .claude/skills/re-forensics/SKILL.md .claude/skills/re-ios/SKILL.md .claude/skills/re-hardware-io/SKILL.md .claude/skills/re-ai-model/SKILL.md .claude/skills/re-iot-proto/SKILL.md README.md AGENTS.md .claude-plugin/marketplace.json
git commit -m "增强: 6 技能挂载与计数同步 97(rerouting RTTI 行/网关与跨域/README-AGENTS-marketplace)"

注意:re-binary-core/SKILL.md 的工作区修改(re-cpp-abi 挂载)不 git add、不提交——与用户的未提交改动共存于工作区,由用户后续一并提交。提交后 git status 应显示 re-binary-core/SKILL.md 仍为 M。