Files

259 lines
17 KiB
Markdown
Raw Permalink 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.

# 技能库第三轮扩充实施计划(2026-08-20)
## 总览
- 范围:5 新增 + 6 技能融合(8 章)+ 全库同步项(计数/导航/路由)
- 总数:107 → 112
- 设计依据:docs/superpowers/specs/2026-08-20-skill-wave-v3-design.md(归位决策已定案,勿改动)
- 工作流:每任务 = 实现 → 评审(技术事实核对 + 红线对照)→ npm test → commit → 下一任务
- 红线:呈现中性(禁「最推荐/强烈建议」)、隐私脱敏(不指向具体项目/公司/产品)、不绑定具体工具(跨 OS 安装命令/硬件选购指引)、git add 只加任务文件
## 任务顺序(关键:新技能先于引用它的融合任务,避免中间态死链)
1. re-flutter(新增)
2. re-rtos(新增)
3. re-mips(新增)
4. re-tee(新增)
5. re-harmonyos(新增)
6. re-hybrid-app(融合 RN/Hermes + [[re-flutter]] 链接)
7. re-iot-proto(融合 BLE + NFC 两章)
8. re-game(融合 Lua + Shader 两章)
9. re-hw-chip(融合侧信道一章)
10. re-fw-extract(融合 MCU 一章 + [[re-rtos]] 链接)
11. re-format-pe(融合 Delphi/VB6 一章)
12. 同步项(计数/README/triage/re-mobile 网关清单)
13. 最终全分支评审 + 修复波
每个新增技能完成后 npm test 允许有「指向未来任务的死链」?——不允许:validate.mjs 会 FAIL。因此**新增技能内部不允许链接未创建技能**;对未来的引用留到融合任务时再补(如 re-hybrid-app 的 [[re-flutter]] 在 Task 6 才写)。新增技能只链接已存在技能。
## 通用格式要求(所有任务)
- SKILL.md 结构:frontmatter(name=目录名、description 含触发词)→ # 标题 → ## 何时使用 / 何时不用 → ## 工具准备(跨 OS 安装命令 + 验证命令;硬件类给选购指引不绑型号)→ ## 操作步骤(编号、每步命令、存档习惯)→ 章节 → ## 跨域联合([[链接]])→ ## 常见坑与陷阱(**标题**:现象——…;原因——…;对策——… 格式)
- 触发词与既有技能不重叠(如 re-flutter 不抢 re-apk 的 smali 触发词)
- 坑条目 ≥3 条,每条含现象/原因/对策三要素
---
## Task 1:re-flutter(新增)
**目标文件**:`.claude/skills/re-flutter/SKILL.md`
**内容结构**:
- 何时用/不用:用 Flutter App(Android `libapp.so` / iOS App.framework、`libflutter.so`、`kernel_blob.bin`、assets 下 snapshot);不用纯原生 App([[re-apk]] / [[re-ios]])、不用 Web 版 Flutter
- 工具准备:python3(blob 结构解析)、strings/binutils、Ghidra(blob 反汇编与字符串交叉引用)、frida(动态侧,见 [[platform-tips]] 沙箱原则)、`--split-debug-info` 符号映射说明
- 操作步骤(编号):
1. 识别:`file` + `strings` 定位 libapp.so、检查 assets/flutter_assets 下的 kernel_blob.bin(debug 模式)vs AOT snapshot(release 模式)
2. snapshot 结构:Dart AOT snapshot 的 blobs 分区(ObjCode/rodata/instructions/strings/…)手动解析与字符串定位——strings blob 里找业务字符串,交叉引用回指令 blob
3. 符号还原:有 `--split-debug-info` 的 symbol 映射文件 → 名字直接映射;无映射 → 从字符串/`dart:` 库注册调用点反推
4. 引擎 vs 业务区分:libflutter.so 是引擎不分析(除非引擎层 hook),重点 libapp.so
5. 动态侧(沙箱):frida hook Dart VM 入口(`Dart_CreateRootLibrary` / 库注册)观察加载流程;Dart VM Service 可连时直接枚举 isolate/库
- 跨域联合:[[re-apk]]、[[re-ios]]、[[re-mobile]]、[[re-frida]]、[[re-hybrid-app]]
- 坑(至少 3):
- release 无 kernel_blob(只有 AOT)——别找 snapshot 文件
- 混淆后 Dart 名字是短名(tree-shaking/obfuscate)——用 symbol 映射或字符串定位,参考 [[re-go]] garble 思路(不写死链接,可提)
- 引擎代码混入业务 —— 按 libapp/libflutter 边界过滤
- frida 版本与设备匹配(沿用 re-frida 工具准备要求)
**验收**:npm test 通过(112 前为 107+1=108);无死链;触发词不撞 re-apk/re-hybrid-app
## Task 2:re-rtos(新增)
**目标文件**:`.claude/skills/re-rtos/SKILL.md`
**内容结构**:
- 何时用/不用:MCU/IoT 固件跑 FreeRTOS/ThreadX/Zephyr/RT-Thread;不用裸机固件(MCU 镜像基础走 [[re-fw-extract]])、不用 Linux 内核([[re-kernel]])
- 工具准备:Ghidra(结构体定义与任务表还原,ARM/ARM Thumb 处理器模块)、binwalk(镜像提取先行)、python3
- 操作步骤:
1. 前置:镜像提取与格式识别(链接 [[re-fw-extract]])
2. RTOS 识别:启动代码(reset handler → 系统初始化 → 调度器启动)、搜索调度器特征串/符号(`xTaskCreate`/`osKernelStart`/`_tx_thread_create`/`z_thread_entry` 类)、头部字符串
3. 任务表定位:FreeRTOS 的 `pxCurrentTCB`/任务链表静态区、ThreadX 的 `_tx_thread_created_list` 双向链表、Zephyr 的 `_kernel` 结构 —— 在 Ghidra 中定义结构体逐字段还原(优先级/状态/栈指针/任务名)
4. 任务栈识别:栈底/栈顶常量定位,按栈归属切分任务边界
5. 内核对象:队列/信号量/互斥/定时器 结构体定位,看板式从内核 API 调用点反推
6. 按任务拆分反编译:每个任务一个入口点,独立分析(对应 [[re-analyze]] 的单函数深分析)
- 跨域联合:[[re-fw-extract]]、[[re-fw-emulate]]、[[re-binary-core]]、[[re-mcu]](Task 10 后才建,Task 2 先不链接!)
- 坑(至少 3):
- 调度器启动前代码别当任务分析
- 任务名是调试符号,stripped 固件里没有——用栈指针/优先级特征定位
- 不同 RTOS 任务结构差异大(链表 vs 静态表)——先识别再定结构体
- RTOS 版本文本串可被混淆(新版本去掉字符串)——用结构特征兜底
**注意**:Task 2 不得链接 re-mcu(Task 10 才创建)。re-mcu 的引用由 Task 10 补写。
## Task 3:re-mips(新增)
**目标文件**:`.claude/skills/re-mips/SKILL.md`
**内容结构**:
- 何时用/不用:MIPS 固件/恶意软件(路由器/嵌入式)、MIPS 架构样本;不用 ARM/x86 系([[re-binary-core]] 通用底座)
- 工具准备:Ghidra/IDA 的 MIPS 处理器模块、binwalk(固件提取)、qemu-user 的 MIPS 模式(动态,沙箱原则)、python3
- 操作步骤:
1. 前置:固件提取([[re-fw-extract]])与架构确认(`file`/`readelf -h`)
2. 字节序判断:MIPS 大端/小端(`readelf` e_flags、字符串可读性)
3. 反编译注意:**延迟槽**(branch/jump 后一条指令仍执行——反汇编工具处理但手读代码时容易错位)、`$gp`/`$ra` 调用约定、GP 相对寻址(`.got` 重定位表)、`-mlong-calls` 跳板
4. 路由器固件专项:web 后端 httpd 定位(认证绕过/命令注入模式)、`/bin/busybox` 集成命令识别、固件配置与密码哈希提取
5. 动态验证(沙箱):qemu-user 跑 MIPS 样本或固件内程序,观察行为
- 跨域联合:[[re-fw-extract]]、[[re-fw-rootfs]]、[[re-binary-core]]、[[re-ghidra]]、[[re-vuln]]、[[re-sandbox]]
- 坑(至少 3):
- 延迟槽:分支后的指令在跳转前已执行——跟踪执行流时容易错
- 大小端判断错 → 指令全部乱
- `$gp` 相对引用没有重定位信息时靠基址猜测
- 路由器固件常见非标准头/压缩层(多步 binwalk)
## Task 4:re-tee(新增)
**目标文件**:`.claude/skills/re-tee/SKILL.md`
**内容结构**:
- 何时用/不用:TrustZone/OP-TEE/Trusted App/secure storage/设备密钥相关;不用 Windows 内核([[re-kernel]])、不用普通 App 层
- 工具准备:Ghidra/IDA(ARM64)、固件提取工具链([[re-fw-extract]])、frida/内核侧 hook([[re-frida]] 沙箱原则)、python3
- 操作步骤:
1. 架构定位:normal world vs secure world、SMC 指令与监控模式(EL3)、TEE OS 加载入口(bootrom/固件中定位)
2. OP-TEE 结构:core(可信 OS 内核)与 TA(可信应用)分离;TA 二进制格式(`.ta`:ELF with TA 头/签名)解析
3. TA 分析:入口(`TA_InvokeCommand`/命令分发表)、命令号枚举、secure storage 对象操作(`TEE_*` API 调用点)
4. 主机侧调用面:Linux 侧 `TEE_IOC_*` ioctl 结构、client 库调用序列——从两头夹逼 TA 的输入输出格式
5. 常见厂商差异(泛化表述,不指具体产品):自定义 TEE 的接口/结构差异处理思路
- 跨域联合:[[re-fw-extract]]、[[re-kernel]]、[[re-mobile]]、[[re-hw-chip]]、[[re-binary-core]]
- 坑(至少 3):
- TA 是签名+加密的固件镜像——先解密/验签流程再谈静态分析
- secure world 代码拿不到时用主机侧 ioctl 调用面反推
- 反调试:secure world 侧监测/防 dump 机制(泛化)
- SMC 参数传递寄存器约定(x0-x7 泛化)错误会导致完全误读
## Task 5:re-harmonyos(新增)
**目标文件**:`.claude/skills/re-harmonyos/SKILL.md`
**内容结构**:
- 何时用/不用:鸿蒙 App(hap/hsp/har)、ArkTS 字节码;不用普通 Android([[re-apk]])
- 工具准备:hap 解包工具(hap-tools 类,不绑定具体实现——给通用描述与备选)、python3、字符串/资源提取工具、[[re-java]] 思路复用(jadx 类工具针对 abc 的替代——泛化)
- 操作步骤:
1. 包结构:hap ≈ APK 变体(`module.json`、`resources/`、`ets/` 字节码目录、`.abc` 文件);解包流程与 APK 同源(zip 容器)
2. 字节码识别:`.abc`(ArkCompiler 字节码)文件头/段结构特征
3. 业务逻辑还原:字符串定位 + 反汇编(ArkCompiler 反汇编器思路)、JS/TS 业务资源提取(与 [[re-script-deob]] 方法衔接)
4. 与 Android 异同:无 dex/smali 层(跳过 [[re-apk]] 的 dex 环节)、资源与 manifest 结构类似(可复用 jadx 思路但目标格式不同)
5. 动态侧(沙箱):模拟器/真机运行时观察([[re-mobile]] 编排)
- 跨域联合:[[re-apk]]、[[re-hybrid-app]]、[[re-java]]、[[re-mobile]]、[[re-script-deob]]
- 坑(至少 3):
- 用 Android 工具直接开 hap 会漏 ets 目录——记住是双容器(zip + 内部资源)
- abc 反汇编器版本敏感(ArkCompiler 演进)——先识别编译版本
- 混淆后的 ArkTS 名字短名——字符串/资源定位兜底
## Task 6:re-hybrid-app(融合)
**目标文件**:`.claude/skills/re-hybrid-app/SKILL.md`
**内容**:追加「## React Native / Hermes」章节(位置在现有内容之后、跨域联合之前):
- 识别:`.hbc` 文件头魔数(`c61fbc03` 类)、RN 应用结构(`index.android.bundle` 类)
- Hermes 字节码:反汇编思路(hermesc 类工具)、内存布局/段特征
- JS bundle 提取:Metro 打包结构(`__d` 函数注册表类)、从 bundle 恢复业务 JS
- 原生桥接:NativeModules 定位(`TurboModule`/`NativeModules` 引用点)、桥接方法名与实现映射
- 动态:[[re-frida]] hook JS 运行时(`console.log`/模块加载点)
- 在现有 Flutter 段末尾补一句指向 [[re-flutter]](「Flutter 专项见 [[re-flutter]]」,不重复内容)
- 更新 frontmatter description 触发词补 Hermes/hbc
**验收**:章节格式与既有章节一致;[[re-flutter]] 链接有效(Task 1 已建);坑 ≥3 条(Hermes 版本差异、bundle 加密、字节码与明文 JS 混合等)
## Task 7:re-iot-proto(融合两章)
**目标文件**:`.claude/skills/re-iot-proto/SKILL.md`
**内容 A「## BLE 链路层」**:
- 嗅探:nRF 系硬件(泛化给选购指引)与主机软件抓包流程
- 广播/连接:广播包解析(ADV_IND/ADV_SCAN_IND 类)、连接事件时序、信道 37/38/39
- 配对加密:LE Legacy Pairing / LE Secure Connections 协商流程、LTK/STK 定位点、白名单/绑定密钥存储
- GATT:服务/特征枚举、handle 定位、读写通知点
- 与既有 MQTT/CoAP/Zigbee 章节并列
**内容 B「## NFC / 智能卡」**:
- ISO14443 帧结构、防冲突流程(UID/SAK 类)
- APDU 交互(CLA/INS/P1/P2/数据)、卡片应用定位
- MIFARE Classic:Crypto-1 弱点(重放/破解思路,泛化)、扇区密钥处理
- proxmark3 类设备流程(泛化选购)
**验收**:两章不重叠既有章节;坑 ≥3 条/章(或合并 ≥5);frontmatter 触发词补 BLE 链路/NFC/智能卡
## Task 8:re-game(融合两章)
**目标文件**:`.claude/skills/re-game/SKILL.md`
**内容 A「## 游戏脚本引擎(Lua)」**:
- Lua 字节码:header(签名/版本)、指令结构、常量表/upvalue 表定位
- 反汇编:luac 类工具思路;LuaJIT 字节码差异(不同版本)
- Cocos 系脚本资源提取:`.jsc`/`.luac` 混淆变体(XOR/头截断——参考 [[re-fw-extract]] 的 XOR 章节思路)
- 脚本 hook:[[re-frida]] 或内存侧 hook Lua 函数(`lua_pcall` 类入口)
**内容 B「## 图形与 Shader」**:
- SPIR-V:`spirv-dis` 反汇编、指令集结构
- DXIL/DXBC:dxc 反汇编思路、SM 版本识别
- GLSL 还原:spirv-cross 类工具(泛化)
- 找渲染入口:着色器加载点(文件/内存)、常量表定位
**验收**:两章格式一致;坑 ≥3/章;不抢 re-frida/re-script-deob 触发词
## Task 9:re-hw-chip(融合一章)
**目标文件**:`.claude/skills/re-hw-chip/SKILL.md`
**内容「## 侧信道与故障注入」**:
- SPA/DPA:功耗曲线采集原理、差分分析思路(密钥位相关性)、采集设备(chipwhisperer 类泛化选购指引)
- 故障注入:时钟毛刺/电压毛刺、glitch 宽度/相位定位流程、重放与结果判定(跳过分支/改返回值类)
- 与去封装衔接:已有章节的流程联动
- 安全边界提示:授权范围(沿用技能库使用边界)
**验收**:与现有去封装/裸片章节并列不冲突;坑 ≥3
## Task 10:re-fw-extract(融合一章)
**目标文件**:`.claude/skills/re-fw-extract/SKILL.md`
**内容「## MCU 镜像分析」**:
- 镜像格式:Intel HEX(.hex)/bin 差异、程序内存布局(flash 起始/中断向量表)
- 向量表定位:复位向量 → 启动代码(衔接 [[re-rtos]]:跑 RTOS 的固件)
- ISA 识别与反汇编:8051/AVR/PIC/MSP430 各自特征(Ghidra 处理器模块),熔丝位/配置位概念(泛化)
- 与既有 binwalk/magic 流程衔接(镜像提取后进入本节的判断条件)
**验收**:[[re-rtos]] 链接有效(Task 2 已建);坑 ≥3
## Task 11:re-format-pe(融合一章)
**目标文件**:`.claude/skills/re-format-pe/SKILL.md`
**内容「## 老运行时识别(Delphi / VB6)」**:
- Delphi VCL:RTTI 结构定位(类名/方法表)、vmt 定位、Borland 资源段(`.rsrc` 内特征)
- VB6:MSVBVM60 运行时特征(导入/资源)、入口定位(`WinMain` 类)
- 老壳注意:PECompact 类轻壳与 [[re-packer-id]] 衔接
- 识别先行:格式解析阶段就判断运行时(Delphi 的 `TApplication` 类串、VB6 的资源脚本特征)
**验收**:不抢 [[re-packer-id]] 触发词;坑 ≥3
## Task 12:同步项
**改动文件**:
1. `package.json` description:107 → 112
2. `.claude-plugin/marketplace.json` description(顶层):107 → 112(插件条目 description 无计数,不动)
3. `README.md`:首段「107 个逆向工程技能」→ 112;技能导航段:re-mobile 组 + re-flutter、re-harmonyos;re-firmware 组 + re-rtos;re-binary-core 组 + re-mips;re-tee 挂组按 Task 4 实现时定(默认 re-firmware 组);导航清单里同步各融合技能(不列章节,只保持技能名完整)
4. `.claude/skills/re-analyze/references/triage.md`:移动路径补 re-flutter/re-harmonyos;固件路径补 re-rtos
5. `.claude/skills/re-mobile/SKILL.md`:子技能清单 + [[re-flutter]] + [[re-harmonyos]]
6. `README.md` 安装段不动;marketplace.json 版本保持 0.0.2
**验收**:`grep -c` 全文无残留「107 个」;npm test 112 全绿;claude plugin validate 通过
## Task 13:最终全分支评审
- 全量 diff 复核(结构/红线 2/触发词重叠/坑格式)
- 技术事实抽查(延迟槽、Hermes 魔数、Dart snapshot、RTOS 结构、abc 格式、Crypto-1、SPIR-V 指令)
- npm test + claude plugin validate 双绿
- 台账更新 .superpowers/sdd/progress.md
## 评审清单(每任务)
- [ ] frontmatter name=目录名、description 含触发词、type=atomic
- [ ] 有「## 工具准备」(跨 OS 命令 + 验证)
- [ ] [[链接]] 全部存在(validate.mjs 强制)
- [ ] 红线 1:无最高级强推措辞
- [ ] 红线 2:无具体项目/公司/产品指代
- [ ] 不绑定具体工具(方法为核心,工具可替换)
- [ ] 坑条目含现象/原因/对策三要素
- [ ] 触发词不重叠
- [ ] npm test 全绿