Files
reverse-skills-max/vendor-new/rev-skills/docs/superpowers/plans/2026-08-18-six-skills-v2.md

769 lines
32 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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**
```bash
mkdir -p .claude/skills/re-doc-malware
```
写入 `.claude/skills/re-doc-malware/SKILL.md`:
````markdown
---
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**
```bash
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**
```bash
mkdir -p .claude/skills/re-variant
```
写入 `.claude/skills/re-variant/SKILL.md`:
````markdown
---
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**
```bash
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**
```bash
mkdir -p .claude/skills/re-hunting
```
写入 `.claude/skills/re-hunting/SKILL.md`:
````markdown
---
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**
```bash
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**
```bash
mkdir -p .claude/skills/re-mobile-forensics
```
写入 `.claude/skills/re-mobile-forensics/SKILL.md`:
````markdown
---
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**
```bash
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**
```bash
mkdir -p .claude/skills/re-stego
```
写入 `.claude/skills/re-stego/SKILL.md`:
````markdown
---
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**
```bash
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**
```bash
mkdir -p .claude/skills/re-browser-ext
```
写入 `.claude/skills/re-browser-ext/SKILL.md`:
````markdown
---
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**
```bash
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]]`;选择树(「**无文件样本**…」分支后)插入:
```markdown
- **钓鱼附件(PDF/Office/RTF 文档)** → [[re-doc-malware]](文档武器化/宏链/载荷提取)
```
`.claude/skills/re-binary-core/SKILL.md` 子技能列表(description 行,末尾 `[[re-fp-runtime]]`)追加 `、[[re-variant]]`;选择树(「**目标是 Haskell/OCaml 产物**…」分支后)插入:
```markdown
- **补丁/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 合约字节码**…」分支后)插入:
```markdown
- **浏览器扩展(crx/xpi/zip 扩展文件)** → [[re-browser-ext]](权限审计/恶意行为/混淆还原)
```
- [ ] **Step 2: rerouting A 表加 3 行**
`.claude/skills/re-analyze/references/rerouting.md` A 表末尾(RTTI 行之后)追加:
```markdown
| 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**
```bash
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)"
```