32 KiB
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)"