Files

32 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-doc-malware / re-variant / re-hunting / re-mobile-forensics / re-stego / re-browser-ext)+ 挂载同步,技能总数 101 → 107。

Architecture: 纯技能文档扩展。6 个新技能目录(SKILL.md,按 docs/skill-template.md 原子技能规范)+ 挂载(5 网关子技能/选择树、rerouting 3 行)+ 计数同步(README / AGENTS / marketplace)。

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

Global Constraints

  • 红线 1 呈现中性:禁用「最推荐」「强烈建议」等最高级强推措辞
  • 红线 2 隐私脱敏:内容不指向具体项目/公司/产品
  • 不绑定具体工具:方法为核心,工具为可替换示例;「工具准备」按模板给跨 OS 安装命令
  • validate.mjs:frontmatter name=目录名、description 非空、type: atomic 必含「## 工具准备」、[[链接]] 必须解析
  • 工作区已干净(无未提交文件)——所有目标文件可正常修改提交;各任务 commit 只 git add 本任务列出的文件
  • 当前分支 main;npm test 预期按任务标注递增(102 → 107)

Task 1: 创建 re-doc-malware 技能

Files:

  • Create: .claude/skills/re-doc-malware/SKILL.md

Interfaces:

  • Consumes: 无(新目录)

  • Produces: 技能目录 re-doc-malware(供 Task 7 的 re-doc-malware 链接解析;计数 101 → 102)

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

mkdir -p .claude/skills/re-doc-malware

写入 .claude/skills/re-doc-malware/SKILL.md:

---
name: re-doc-malware
type: atomic
description: >
  恶意文档分析:PDF/Office 武器化、宏链、文档漏洞利用、载荷提取。
  触发词:恶意文档、钓鱼文档、PDF恶意、宏文档、docm、文档漏洞、恶意附件。
---

# 恶意文档分析

## 何时使用 / 何时不用

- 用:钓鱼附件(PDF/Office/RTF)、文档漏洞利用样本、宏文档、文档型恶意载荷
- 不用:纯脚本宏(转 [[re-script-deob]]);文档仅是载体(核心逻辑在下载载荷)

## 工具准备

### pdf-parser / peepdf(PDF 结构分析)

- Linux: `apt install pdf-parser` 或 `pip install peepdf`;macOS: `brew install pdf-parser` / pip
- Windows: pip(WSL 亦可)
- 验证: `pdf-parser --version`(无则 `python3 -m pdf_parser --help`)

### olevba / oledump(Office 宏提取)

- 多平台: `pip install oletools`
- 验证: `olevba --help`

### LibreOffice(沙箱打开验证,可选)

- Linux: `apt install libreoffice` / `dnf install libreoffice`;macOS: `brew install --cask libreoffice`;Windows: 官方安装包
- 验证: `libreoffice --version`

### 7z(OLE/OOXML 解包)

- Linux: `apt install p7zip-full`;macOS: `brew install sevenzip`;Windows: 官方安装包
- 验证: `7z --help`

## 操作步骤

按顺序执行;动态打开文档必须沙箱([[re-sandbox]],[[platform-tips]] 最高原则)。每步产物存档(路径 + sha256,见 [[re-triage]])。

1. **文档类型识别**:
   ```sh
   file sample.pdf sample.docm sample.rtf
   ```
   - PDF:`%PDF` 头;Office 旧格式:CFB(OLE 复合文档,`D0 CF 11 E0`);OOXML:zip(`PK`);RTF:`{\rtf`
   - 类型决定后续工具链

2. **PDF 恶意分析**:
   ```sh
   pdf-parser -f sample.pdf | head -50        # 对象树遍历(-f 强制,解 FlateDecode)
   pdf-parser -s /JS sample.pdf               # JavaScript 动作
   pdf-parser -s /OpenAction sample.pdf       # 打开即执行动作
   ```
   - 恶意特征:`/JS`(JavaScript 动作)、`/OpenAction`(打开触发)、`/AA`(自动动作)、`/Launch`(外部程序)、嵌入文件(`/EmbeddedFile`)
   - 漏洞文档:`/JBIG2Decode`(JBIG2 漏洞)、`/RichMedia`(Flash 遗留)等 CVE 对应结构——按结构特征对照已知利用模式
   - JS 载荷 → [[re-script-deob]] 还原

3. **Office 分析**:
   ```sh
   olevba -c sample.docm > macro.txt          # 提取宏源码
   olevba --decode -c sample.docm > macro_decoded.txt
   strings sample.docm | grep -iE 'DDEAUTO|http|powershell' | head
   ```
   - 宏链:AutoOpen / Workbook_Open / Document_Open / Auto_Open
   - 其他向量:DDE 域(`DDEAUTO`)、外部链接(`/hyperlink`)、OLE 嵌入对象(7z 解包后逐个分析)、模板注入(`/word/_rels`)
   - 宏载荷 → [[re-script-deob]] 去混淆链

4. **载荷提取**:
   - 提取项:脚本/URL/二进制/多级载荷(每层存档编号)
   - 指标提取 → [[re-ioc]](URL/域名/哈希)
   - 提取物初勘 → [[re-triage]]

5. **动态验证**(沙箱):
   - [[re-sandbox]] 内用 LibreOffice/阅读器打开,网络隔离(INetSim/fake DNS)
   - 观察:文件释放、进程链、网络回连([[re-behavior]] 衔接)

## 跨域联合

- [[re-malware]] 网关:本技能归属(选择树「钓鱼附件」分支)
- [[re-script-deob]]:宏/JS 去混淆还原
- [[re-sandbox]]:动态打开强制前置
- [[re-ioc]]:提取指标
- [[re-behavior]]:行为验证衔接

## 常见坑与陷阱

- **PDF 对象流压缩未解**:现象——pdf-parser 输出无 `/JS`;原因——对象在 FlateDecode 压缩流内;对策——`-f` 强制解压再查
- **宏被混淆**:现象——olevba 提取后满屏拼接/编码;原因——宏混淆;对策——[[re-script-deob]] 去混淆链逐层解
- **文档漏洞版本特征**:现象——结构特征与已知 CVE 不符;原因——利用代码针对特定版本;对策——按结构特征(非版本号)对照利用模式,标注版本假设
- **沙箱检测文档(延迟执行)**:现象——沙箱内无行为;原因——文档检测环境后不触发;对策——延长观察窗口、模拟用户交互(滚动/点击)
- **模板注入易漏**:现象——宏正常但仍有外联;原因——`/word/_rels` 远程模板;对策——解包后检查全部 rels 文件
  • Step 2: 结构校验

Run: npm test Expected: OK: 102 skills validated(链接:re-script-deob/re-sandbox/re-triage/re-ioc/re-behavior/re-malware/platform-tips 均存在)

  • Step 3: Commit
git add .claude/skills/re-doc-malware/SKILL.md
git commit -m "feat: re-doc-malware 技能——PDF/Office 武器化分析与载荷提取"

Task 2: 创建 re-variant 技能

Files:

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

Interfaces:

  • Consumes: 无(新目录)

  • Produces: 技能目录 re-variant(供 Task 7 的 re-variant 链接解析;计数 102 → 103)

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

mkdir -p .claude/skills/re-variant

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

---
name: re-variant
type: atomic
description: >
  二进制变体/补丁对比:函数匹配、N-day 补丁 diff、变体溯源与相似度分析。
  触发词:二进制对比、补丁对比、N-day、变体分析、BinDiff、函数匹配、样本相似。
---

# 二进制变体/补丁对比

## 何时使用 / 何时不用

- 用:补丁前后对比(漏洞定位)、家族变体关联、样本溯源、N-day 分析
- 不用:单样本深度分析(走 [[re-binary-core]] 通用路径)

## 工具准备

### BinDiff / Diaphora(函数匹配插件)

- BinDiff: Windows 商业工具(安装指引,可替换为开源替代);Diaphora: 多平台开源(`git clone https://github.com/joxeankoret/diaphora`,IDA/Ghidra 插件)
- Ghidra 侧替代: BinDiff 官方 Ghidra 插件或 Diaphora 的 Ghidra 移植
- 验证: 插件在反编译器内可加载

### radiff2 / rz-diff(rizin 命令行对比)

- Linux: `apt install rizin` / `pacman -S rizin`;macOS: `brew install rizin`;Windows: 官方安装包
- 验证: `rz-diff --version`

### readelf(符号对齐辅助)

- 安装与验证见 [[re-cpp-abi]] 工具准备

## 操作步骤

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

1. **函数匹配**:
   ```sh
   # 命令行快速对比(rizin 系):指令哈希 + 调用图相似度
   rz-diff -ss sample_v1 sample_v2 | head -30
   ```
   - 匹配维度:指令哈希(相同代码)、调用图(子图同构)、导入导出对齐、字符串/常量引用
   - 工具(BinDiff/Diaphora)输出:matched / changed / new / deleted 函数集
   - strip 后符号缺失:靠结构匹配(见坑 2)

2. **补丁 diff(N-day)**:
   - 修复前后对比 → `changed` 函数集 = 漏洞点候选
   - 变更函数深挖:新条件分支/新校验/新增调用([[re-ghidra]] / [[re-ida]] 反编译)
   - 反推漏洞:旧代码的缺陷模式(缺失校验/越界/释放后使用)
   - 产出:漏洞函数 + 缺陷模式推断(置信度标注)

3. **变体溯源**:
   - 家族内样本两两对比 → 相似度矩阵 → 聚类(共享函数比例阈值)
   - 演进链:按时间线/相似度排序样本(早期 vs 晚期变体)
   - 共享独有函数 = 家族标志(与 [[re-attribution]] 能力证据衔接)

4. **输出差异清单**:
   - 格式:变更函数表(函数名/地址/变更类型/相似度)+ 结论
   - 按 [[analysis-contract]] 数据契约传递(下游消费)

## 跨域联合

- [[re-binary-core]] 网关:本技能归属(选择树「补丁/N-day 对比」分支)
- [[re-ghidra]] / [[re-ida]]:反编译底座(变更函数深挖)
- [[re-attribution]]:变体关联的能力证据衔接
- [[analysis-contract]]:差异清单按数据契约传递

## 常见坑与陷阱

- **编译器差异干扰匹配**:现象——同源码不同编译器编译被判不相似;原因——优化/代码生成差异;对策——用调用图与常量引用加权,降低指令哈希权重
- **strip 后符号缺失**:现象——函数名全无;原因——符号剥离;对策——结构匹配(入口特征/调用模式)、导入表锚定
- **跨架构对比降级**:现象——x86 vs ARM 匹配率低;原因——指令集不同;对策——只比逻辑层(调用图/常量/字符串),标注跨架构局限
- **大量相似导致误关联**:现象——共享库代码导致虚高相似度;原因——公共依赖(libc/框架);对策——排除共享库符号,只比业务代码
- **补丁 diff 定位偏差**:现象——changed 函数多,漏洞点被淹没;原因——补丁含重构;对策——按变更语义过滤(新增校验/边界处理优先)
  • Step 2: 结构校验

Run: npm test Expected: OK: 103 skills validated(链接:re-binary-core/re-ghidra/re-ida/re-attribution/analysis-contract/re-triage/re-cpp-abi 均存在)

  • Step 3: Commit
git add .claude/skills/re-variant/SKILL.md
git commit -m "feat: re-variant 技能——函数匹配/补丁 diff/变体溯源"

Task 3: 创建 re-hunting 技能

Files:

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

Interfaces:

  • Consumes: 无(新目录)

  • Produces: 技能目录 re-hunting(供 Task 7 的 re-hunting 链接解析;计数 103 → 104)

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

mkdir -p .claude/skills/re-hunting

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

---
name: re-hunting
type: atomic
description: >
  威胁狩猎方法论:假设驱动、遥测源选择、基线对比与验证闭环。
  触发词:威胁狩猎、狩猎、hunting、假设驱动、遥测分析、异常检测。
---

# 威胁狩猎

## 何时使用 / 何时不用

- 用:主动狩猎请求(「环境里有没有 X 的活动」)、假设驱动的环境排查
- 不用:已知样本分析([[re-behavior]]);IOC 查询([[re-ti]]);单点证据深挖(各域技能)

## 工具准备

### 日志分析工具(通用)

- 多平台: jq / grep / awk(各发行版自带或 `apt install jq` / `brew install jq`)
- 验证: `jq --version`

### 遥测查询(按环境)

- SIEM/EDR 查询接口(按部署环境给查询指引,工具不绑定)
- 本地日志: journalctl / Windows 事件日志工具(按平台)

### ATT&CK 导航(假设对齐参考)

- 网页工具(公开访问);本地可下载 Navigator 层文件

## 操作步骤

按顺序执行;假设明确再动手(坑 5)。每步产物存档(路径 + sha256,见 [[re-triage]])。

1. **狩猎假设生成**:
   - 输入:威胁情报([[re-ti]])、已知攻击模式([[re-behavior]] 经验)、环境特征
   - 假设句式:「攻击者可能通过 X 技术在环境内做了 Y」——X 对齐 ATT&CK 技术
   - 产出:假设列表(每个假设 = 可证伪的搜索目标)

2. **遥测源选择**:
   - 按假设选数据源:进程行为 → EDR/进程日志;网络 → 流量/防火墙日志;登录 → 认证日志;文件 → 文件系统监控
   - 数据源缺失 → 标注盲区(结论的有效性边界)

3. **基线 vs 异常**:
   - 基线:正常窗口的统计分布(频率/来源/目标特征)
   - 异常检测:偏离基线的行为(新进程链、非常规时段、异常目标)、规则匹配(已知模式)
   - 聚类:异常条目按特征聚类(减少人工逐个审查)

4. **验证闭环**:
   - 命中确认:异常 → 深挖([[re-behavior]] 行为分析、[[re-variant]] 样本关联)
   - 误报排除:白名单核对、环境解释(合法变更/维护窗口)
   - 证据存档:按 [[analysis-contract]] 复核格式(结论/证据/置信度)
   - 闭环输出:确认命中 → 事件报告;未命中 → 假设归档(可复跑)

## 跨域联合

- [[re-forensics]] 网关:本技能归属
- [[re-ti]]:情报输入(假设来源)
- [[re-behavior]]:命中深挖
- [[re-variant]]:样本关联
- [[analysis-contract]]:结论按复核格式交付

## 常见坑与陷阱

- **基线污染**:现象——异常被视为正常;原因——环境本身已被攻陷(基线含恶意活动);对策——基线窗口选择在已知干净时段,标注基线假设
- **遥测缺失盲区**:现象——无异常结论但环境有活动;原因——关键数据源未采集;对策——步骤 2 显式标注盲区,结论限定「在已采集遥测内」
- **误报疲劳**:现象——大量命中无人深挖;原因——规则过宽/阈值过低;对策——先聚类再审查,阈值按基线校准
- **假设过窄**:现象——只查了一个技术;原因——假设单一;对策——按 ATT&CK 技术族生成多假设(覆盖率声明)
- **结论过强**:现象——「环境干净」声明;原因——未标注盲区与假设边界;对策——结论带限定(见坑 2)
  • Step 2: 结构校验

Run: npm test Expected: OK: 104 skills validated(链接:re-behavior/re-ti/re-variant/re-forensics/analysis-contract/re-triage 均存在)

  • Step 3: Commit
git add .claude/skills/re-hunting/SKILL.md
git commit -m "feat: re-hunting 技能——假设驱动狩猎/遥测选择/验证闭环"

Task 4: 创建 re-mobile-forensics 技能

Files:

  • Create: .claude/skills/re-mobile-forensics/SKILL.md

Interfaces:

  • Consumes: 无(新目录)

  • Produces: 技能目录 re-mobile-forensics(供 Task 7 的 re-mobile-forensics 链接解析;计数 104 → 105)

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

mkdir -p .claude/skills/re-mobile-forensics

写入 .claude/skills/re-mobile-forensics/SKILL.md:

---
name: re-mobile-forensics
type: atomic
description: >
  移动设备取证:Android/iOS 备份解析、应用数据提取、删除恢复与时间线。
  触发词:移动取证、手机取证、ADB备份、iTunes备份、手机数据提取。
---

# 移动设备取证

## 何时使用 / 何时不用

- 用:设备备份/镜像的数据提取、应用数据取证、删除恢复
- 不用:App 逆向分析([[re-mobile]]);通用文件系统分析([[re-disk-forensics]])

## 工具准备

### adb(Android 设备接口)

- Linux: `apt install adb` / `dnf install android-tools`;macOS: `brew install android-platform-tools`;Windows: 官方平台工具
- 验证: `adb --version`

### libimobiledevice(iOS 设备接口)

- Linux: `apt install libimobiledevice-utils`;macOS: `brew install libimobiledevice`;Windows: 官方构建
- 验证: `idevice_id -l`(列出设备)

### 备份解析工具

- Android: `ab` 备份格式解析(python 脚本或工具);iOS: `libimobiledevice` 的 `idevicebackup2` + manifest 解析
- sqlite3(数据库读取,见 [[re-disk-forensics]] 工具准备)

## 操作步骤

按顺序执行;设备操作遵循授权边界(红线:仅授权设备)。每步产物存档(路径 + sha256,见 [[re-triage]])。

1. **Android 提取**:
   ```sh
   adb backup -f backup.ab -all        # 全量备份(应用需允许备份)
   # ab 格式:头(ANDROID BACKUP)+ 可选 AES 加密 + tar 负载
   adb shell run-as com.target.app ls data   # 应用沙箱(debuggable 应用)
   ```
   - 备份解析:ab 头 → 解包 tar(加密备份需密码)
   - 应用沙箱:`run-as`(debuggable)/ root 设备直接读
   - 数据库提取 → sqlite3([[re-disk-forensics]] 的 SQLite 页结构方法)

2. **iOS 提取**:
   ```sh
   idevicebackup2 backup --full ./backup_dir
   # 备份结构:manifest.plist + 按哈希路径组织的文件
   ```
   - 备份解析:manifest.plist(文件映射)、加密备份需密码(无密码则标注不可提取)
   - Keychain 条目(需提取工具,权限边界)
   - 应用数据:Library/Preferences、Documents、Caches(按应用沙箱路径)

3. **删除恢复与时间线**:
   - SQLite 删除记录(freelist 残留——[[re-disk-forensics]] 数据库文件格式方法)
   - 时间线重建:文件时间戳 + 数据库记录时间(注意时区——见坑 5)
   - 产出:时间线表(时间/动作/来源)+ 恢复数据

## 跨域联合

- [[re-forensics]] 网关:本技能归属
- [[re-disk-forensics]]:SQLite 结构/WAL/删除恢复方法
- [[re-mobile]]:App 结构理解(沙箱路径/数据结构)

## 常见坑与陷阱

- **加密备份无密钥**:现象——备份无法解析;原因——AES 加密;对策——无密码则标注不可提取,不硬破解(授权边界)
- **ADB backup 权限限制**:现象——备份为空;原因——应用未声明 `allowBackup`;对策——换 root/镜像提取,标注路径局限
- **iOS 哈希路径混淆**:现象——文件找不到;原因——备份文件按内容哈希组织(非原名);对策——manifest.plist 映射解析
  (注:本行表述已于 2026-09-13 修正——文件按 fileID 组织且 fileID 由路径派生(SHA1(domain + "-" + relativePath))不是内容哈希,索引文件是 Manifest.db;现文见 `.claude/skills/re-mobile-forensics/SKILL.md`,核验记录见 `docs/audit/`)
- **时间线时区**:现象——时间错位;原因——设备时区与取证时区不一致;对策——统一 UTC 记录,标注设备时区
- **沙箱边界**:现象——拿不到目标数据;原因——无 root/未越狱;对策——按可提取范围交付(限定结论),不越授权
  • Step 2: 结构校验

Run: npm test Expected: OK: 105 skills validated(链接:re-mobile/re-disk-forensics/re-forensics/re-triage 均存在)

  • Step 3: Commit
git add .claude/skills/re-mobile-forensics/SKILL.md
git commit -m "feat: re-mobile-forensics 技能——Android/iOS 备份解析与删除恢复"

Task 5: 创建 re-stego 技能

Files:

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

Interfaces:

  • Consumes: 无(新目录)

  • Produces: 技能目录 re-stego(供 Task 7 的 re-stego 链接解析;计数 105 → 106)

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

mkdir -p .claude/skills/re-stego

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

---
name: re-stego
type: atomic
description: >
  隐写术检测与提取:文件尾附加、图片 LSB、音频与其他载体、提取验证。
  触发词:隐写、stego、LSB、文件尾附加、隐写提取、图片隐写。
---

# 隐写术检测与提取

## 何时使用 / 何时不用

- 用:隐写怀疑(CTF 题/取证对象)、文件尾异常、图片/音频异常
- 不用:正常文件分析(各归各域技能)

## 工具准备

### zsteg(图片 LSB 扫描)

- 多平台: `gem install zsteg` 或源码(GitHub)
- 验证: `zsteg -v`

### steghide(图片/音频隐写)

- Linux: `apt install steghide` / `dnf install steghide`;macOS: `brew install steghide`
- 验证: `steghide info --help`

### binwalk(尾部扫描)

- 安装与验证见 [[re-fw-extract]] 工具准备

### python3(位操作/验证脚本)

- 安装与验证见 [[re-python]] 工具准备

## 操作步骤

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

1. **文件尾附加检测**:
   ```sh
   binwalk sample.png | tail -20       # 附加数据扫描
   hexdump -C sample.png | tail -10    # 尾部目检
   ```
   - 尾部附加:文件正常但尾部有多余数据(衔接 [[re-patching]] 尾部附加经验)
   - 提取:binwalk 自动分割或 dd 按偏移提取 → magic 检查([[re-triage]])

2. **图片 LSB**:
   ```sh
   zsteg sample.png                    # 全通道 LSB 扫描
   zsteg -E 'b1,rgb,lsb,xy' sample.png # 指定通道/位平面提取
   ```
   - 通道:RGB/alpha 各通道最低位;位平面:b1/b2(低 2 位)
   - 顺序:行序/位序影响提取结果(见坑 1)
   - 无工具时的脚本路径:python3 按像素遍历提取位序列

3. **其他载体**:
   - 音频:频谱隐写(音频可视化工具查频域图案)、相位/回声隐写
   - 文件冗余区:EXIF、文件头保留区、压缩文件未用空间
   - 多载体组合(题目常用)

4. **提取验证**:
   - magic 检查(提取物头部特征)
   - 可读性验证(strings/file)
   - 隐写前压缩:先提取再解压(提取物查压缩头——zlib `78 9C` / gzip `1F 8B`,见坑 3)

## 跨域联合

- [[re-ctf]] 网关:本技能归属
- [[re-fw-extract]]:binwalk 复用
- [[re-patching]]:尾部附加经验衔接
- [[re-triage]]:提取物初勘

## 常见坑与陷阱

- **LSB 顺序**:现象——提取乱码;原因——行序(从上到下/从下到上)/位序(LSB 优先/MSB 优先);对策——工具自动尝试或脚本枚举组合
- **多载体误判**:现象——一个文件中多个隐写层;原因——嵌套隐写;对策——分层提取,每层验证
- **隐写前压缩**:现象——提取物乱码;原因——明文先压缩再嵌入;对策——先查压缩特征(zlib 头)再解压
- **工具输出噪声**:现象——大量候选;原因——扫描输出含误报;对策——按 magic/可读性过滤
- **载体本身异常**:现象——文件损坏;原因——隐写写入破坏结构;对策——先修复/容忍损坏(按位提取不依赖结构)
  • Step 2: 结构校验

Run: npm test Expected: OK: 106 skills validated(链接:re-ctf/re-fw-extract/re-patching/re-triage/re-python 均存在)

  • Step 3: Commit
git add .claude/skills/re-stego/SKILL.md
git commit -m "feat: re-stego 技能——文件尾/LSB/多载体隐写检测与提取"

Task 6: 创建 re-browser-ext 技能

Files:

  • Create: .claude/skills/re-browser-ext/SKILL.md

Interfaces:

  • Consumes: 无(新目录)

  • Produces: 技能目录 re-browser-ext(供 Task 7 的 re-browser-ext 链接解析;计数 106 → 107)

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

mkdir -p .claude/skills/re-browser-ext

写入 .claude/skills/re-browser-ext/SKILL.md:

---
name: re-browser-ext
type: atomic
description: >
  浏览器扩展逆向:权限清单、恶意行为定位、混淆还原、上架审查绕过面。
  触发词:浏览器扩展、Chrome扩展、Firefox扩展、恶意扩展、extension。
---

# 浏览器扩展逆向

## 何时使用 / 何时不用

- 用:扩展文件(crx/xpi/zip)、恶意扩展行为分析、扩展权限审计
- 不用:网页 JS 混淆([[re-script-deob]] 覆盖纯脚本)

## 工具准备

### unzip / 7z(解包)

- 安装与验证见 [[re-doc-malware]] 工具准备(7z)

### jq(manifest 解析)

- Linux: `apt install jq`;macOS: `brew install jq`;Windows: 官方构建
- 验证: `jq --version`

### node(扩展脚本运行/验证,可选)

- 各平台安装见 [[re-python]] 工具准备模式(node 官方安装包)
- 验证: `node --version`

## 操作步骤

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

1. **解包与结构**:
   ```sh
   unzip sample.crx -d ext/          # crx/xpi = zip 容器
   jq '.permissions, .host_permissions' ext/manifest.json
   ```
   - 结构:manifest.json + 背景脚本(background/service_worker)+ 内容脚本(content_scripts)+ 页面
   - 权限清单:`permissions`(API 权限)、`host_permissions`(站点访问)——权限决定能力边界

2. **恶意行为定位**:
   - 数据外泄:fetch/XHR/beacon([[re-netcap]] 衔接)、`navigator.sendBeacon`、图片像素外传
   - 权限滥用:tabs(读取页面)、storage(数据收集)、webRequest(流量篡改/监控)、clipboard(剪贴板窃取)
   - 注入面:content_scripts 匹配站点、动态注入(`chrome.scripting.executeScript`)
   - 后台脚本是核心(MV3 的 service worker / MV2 的 background page)

3. **混淆还原**:
   - 衔接 [[re-script-deob]] 高级混淆对抗(bootstrap/字符串表/CFF)
   - 远程代码:MV2 允许远程 JS(`eval`/动态加载);MV3 禁止远程 JS(远程代码是审查绕过信号)

4. **上架审查绕过面分析**:
   - 动态加载(运行时拉取代码——MV2 特征)
   - obfuscation 检测规避(代码混淆超过阈值触发审查)
   - 多阶段(无害首版 + 更新后恶意——版本对比 [[re-variant]] 思路)

## 跨域联合

- [[re-managed]] 网关:本技能归属(选择树「浏览器扩展」分支)
- [[re-script-deob]]:混淆还原
- [[re-netcap]]:网络行为衔接
- [[re-variant]]:扩展版本对比(更新后恶意检测)

## 常见坑与陷阱

- **manifest 版本差异**:现象——MV2 分析思路套 MV3 失效;原因——权限模型不同(MV3 禁远程代码/后台改 service worker);对策——先确认 manifest_version
- **远程代码策略**:现象——静态找不到恶意逻辑;原因——代码远程拉取(MV2);对策——网络侧抓取([[re-netcap]])后还原
- **动态注入绕过静态分析**:现象——content_scripts 无恶意但行为异常;原因——运行时注入;对策——hook 注入 API(scripting.executeScript)
- **沙箱与页面隔离**:现象——扩展 API 调用点难定位;原因——扩展上下文与页面上下文隔离;对策——分上下文分析(background/content/page)
- **更新后恶意**:现象——首版干净;原因——版本更新注入恶意;对策——版本 diff([[re-variant]])
  • Step 2: 结构校验

Run: npm test Expected: OK: 107 skills validated(链接:re-script-deob/re-netcap/re-variant/re-managed/re-triage/re-doc-malware 均存在——re-variant 由 Task 2 创建,re-doc-malware 由 Task 1 创建)

  • Step 3: Commit
git add .claude/skills/re-browser-ext/SKILL.md
git commit -m "feat: re-browser-ext 技能——扩展权限审计/恶意行为/混淆还原"

Task 7: 挂载与计数同步

Files:

  • Modify: .claude/skills/re-malware/SKILL.md(子技能列表 + 选择树分支)
  • Modify: .claude/skills/re-binary-core/SKILL.md(子技能列表 + 选择树分支)
  • Modify: .claude/skills/re-forensics/SKILL.md(子技能列表加 2 个)
  • Modify: .claude/skills/re-ctf/SKILL.md(子技能列表加 1 个)
  • Modify: .claude/skills/re-managed/SKILL.md(子技能列表 + 选择树分支)
  • Modify: .claude/skills/re-analyze/references/rerouting.md(A 表加 3 行)
  • Modify: README.md(计数 101→107、88→94、导航加 6 行)
  • Modify: AGENTS.md(101→107、88→94)
  • Modify: .claude-plugin/marketplace.json(101→107)

Interfaces:

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

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

  • Step 1: 网关挂载(5 文件,7 处编辑)

.claude/skills/re-malware/SKILL.md 子技能列表(description 行,末尾 [[re-fileless]])追加 、[[re-doc-malware]];选择树(「无文件样本…」分支后)插入:

- **钓鱼附件(PDF/Office/RTF 文档)** → [[re-doc-malware]](文档武器化/宏链/载荷提取)

.claude/skills/re-binary-core/SKILL.md 子技能列表(description 行,末尾 [[re-fp-runtime]])追加 、[[re-variant]];选择树(「目标是 Haskell/OCaml 产物…」分支后)插入:

- **补丁/N-day 对比(修复前后/变体关联)** → [[re-variant]](函数匹配/补丁 diff)

.claude/skills/re-forensics/SKILL.md 子技能列表(description 行,末尾 [[re-attribution]])追加 、[[re-hunting]]、[[re-mobile-forensics]]

.claude/skills/re-ctf/SKILL.md 子技能列表(description 行,末尾 [[re-pwn]])追加 、[[re-stego]]

.claude/skills/re-managed/SKILL.md 子技能列表(description 行,末尾 [[re-blockchain]])追加 、[[re-browser-ext]];选择树(「EVM 合约字节码…」分支后)插入:

- **浏览器扩展(crx/xpi/zip 扩展文件)** → [[re-browser-ext]](权限审计/恶意行为/混淆还原)
  • Step 2: rerouting A 表加 3 行

.claude/skills/re-analyze/references/rerouting.md A 表末尾(RTTI 行之后)追加:

| PDF/Office 宏/钓鱼文档特征 | [[re-doc-malware]] |
| 补丁/N-day 对比需求(修复前后/变体) | [[re-variant]] |
| 文件尾附加/图片异常(隐写怀疑) | [[re-stego]] |
  • Step 3: 计数同步(3 文件)

README.md:

  • ## 技能导航(101) → ## 技能导航(107)
  • 入口 → 12 大类网关 → 88 原子技能 → 入口 → 12 大类网关 → 94 原子技能
  • 第 5 行 101 个逆向工程技能 → 107 个逆向工程技能
  • 导航行:re-malware 行加 、re-doc-malware;re-binary-core 行加 、re-variant;re-forensics 行加 、re-hunting、re-mobile-forensics;re-ctf 行加 、re-stego;re-managed 行加 、re-browser-ext

AGENTS.md:

  • (101 个技能) → (107 个技能)
  • 原子技能(88) → 原子技能(94)

.claude-plugin/marketplace.json:

  • 101 个技能 → 107 个技能

  • Step 4: 校验

Run: npm test Expected: OK: 107 skills validated

Run: grep -c "re-doc-malware\|re-variant\|re-hunting\|re-mobile-forensics\|re-stego\|re-browser-ext" README.md Expected: ≥ 5(各技能名在导航行各出现 1 次,grep -c 按行计,5 个网关行各含 1+ 名)

  • Step 5: Commit
git add .claude/skills/re-malware/SKILL.md .claude/skills/re-binary-core/SKILL.md .claude/skills/re-forensics/SKILL.md .claude/skills/re-ctf/SKILL.md .claude/skills/re-managed/SKILL.md .claude/skills/re-analyze/references/rerouting.md README.md AGENTS.md .claude-plugin/marketplace.json
git commit -m "增强: 6 技能挂载与计数同步 107(5 网关/rerouting 3 行/README-AGENTS-marketplace)"