文件
skills/web-reverse/SKILL.md

14 KiB

name, description, domain, version, tags, triggers
name description domain version tags triggers
web-reverse 网页逆向工程 - 接口签名/加密/解密自动化定位与复现,支持 MCP 工具链协作 security 1.0.0
reverse
web
api
sign
encrypt
decrypt
mcp
chrome
keywords context_boost priority
primary secondary
逆向
reverse
签名
sign
加密
encrypt
解密
decrypt
接口逆向
抓包
webpack
js逆向
爬虫
sign生成
接口分析
api
fetch
xhr
crypto
webpack
obfuscate
high

Web Reverse Engineering

将一次"逆一个接口"的临时工作,升级为一套可复用、可扩展、可自动化的逆向项目执行流程。


四要素分工

┌─────────────────────────────────────────────────────────────┐
│                      四要素协作模型                          │
│                                                             │
│  ┌─────────────┐     ┌─────────────┐                       │
│  │ 人 (决策者)  │ ←→ │ Skill (模板) │                       │
│  │             │     │             │                       │
│  │ - 目标选择   │     │ - 流程模板   │                       │
│  │ - 风险边界   │     │ - 判断节点   │                       │
│  │ - 关键决策   │     │ - 产出定义   │                       │
│  │ - 结果验收   │     │             │                       │
│  └─────────────┘     └─────────────┘                       │
│         ↑                   ↑                               │
│         │                   │                               │
│         ↓                   ↓                               │
│  ┌─────────────┐     ┌─────────────┐                       │
│  │ MCP (工具)   │ ←→ │ LLM (大脑)   │                       │
│  │             │     │             │                       │
│  │ - 浏览器交互 │     │ - 上下文理解 │                       │
│  │ - 抓包      │     │ - 模式识别   │                       │
│  │ - 文件操作   │     │ - 步骤拆解   │                       │
│  │ - 沙箱运行   │     │ - 证据串联   │                       │
│  └─────────────┘     └─────────────┘                       │
└─────────────────────────────────────────────────────────────┘
角色 职责 核心价值
决策、边界、验收 把经验抽象成可复用流程
Skill 流程模板、判断节点 一次写好,长期复用
MCP 工具能力 把体力活交给工具
LLM 理解、分析、串联 不靠瞎猜,靠拆步骤+证据链

执行流程6阶段

阶段 A任务定义与边界确认

Step 1: 明确目标接口与成功标准

输入:
  - 站点/页面/功能点描述
  - 期望获取的数据或能力

关键问题:
  - 要"一个接口能用"还是"形成可复用能力"?建议后者
  - 成功标准是什么?

产出:
  - 目标描述1段话
  - 成功标准清单(可验收)

Step 2: 确认加密/签名位置

判断点:
  - 请求是否包含 sign 字段
  - 请求体是否加密
  - 响应是否加密

产出:
  - 接口画像卡(见模板)

阶段 B现场取证

Step 3: 触发目标请求

MCP操作:
  - 打开页面
  - 刷新/点击/滚动
  - 触发目标请求

产出:
  - 完整请求记录:
    - URL
    - Method
    - Headers
    - Query
    - Body
    - Response 片段

Step 4: 锁定关键字段

观察点:
  - sign 是否每次变化?
  - 请求体/响应体加密字段有哪些?
  - 是否存在时间戳/随机数/设备指纹?

产出:
  - 关键字段表:
    | 字段名 | 来源 | 是否变化 | 猜测角色 | 证据 |
    |--------|------|----------|----------|------|
    | sign   | ?    | 是       | 签名     | ...  |

阶段 C拆解任务

Step 5: 拆成可验证步骤

┌─────────────────────────────────────────────────────────────┐
│                    逆向任务树(三主链)                       │
│                                                             │
│                    ┌─────────────┐                          │
│                    │   目标接口   │                          │
│                    └──────┬──────┘                          │
│           ┌───────────────┼───────────────┐                 │
│           ▼               ▼               ▼                 │
│   ┌─────────────┐ ┌─────────────┐ ┌─────────────┐          │
│   │ A. Sign链   │ │ B. 请求链   │ │ C. 响应链   │          │
│   │             │ │             │ │             │          │
│   │ 如何生成    │ │ 如何加密    │ │ 如何解密    │          │
│   │ sign        │ │ 请求体      │ │ 响应        │          │
│   └──────┬──────┘ └──────┬──────┘ └──────┬──────┘          │
│          │               │               │                  │
│          ▼               ▼               ▼                  │
│   输入/输出/验证   输入/输出/验证   输入/输出/验证           │
└─────────────────────────────────────────────────────────────┘

原则AI 不适合"瞎猜",适合系统化分析


阶段 DAI + MCP 自动化定位

Step 6: 定位加密/签名入口

常见线索:
  - 请求发起点fetch/xhr 封装)
  - sign 生成函数调用链
  - 加密库/webpack 模块

产出:
  - 入口函数/文件/模块 ID
  - 调用链路(从请求发起点回溯到签名/加密)

Step 7: 抽取最小可复现上下文

目标:
  - 不是把全站代码搬下来
  - 而是抽取能跑通的最小集合

产出:
  - 关键模块代码片段:
    - 签名模块
    - 加密模块
    - 依赖模块
  - 依赖清单:
    - 全局变量
    - window/document
    - crypto
    - 环境检测

Step 8: Webpack 模块解包

操作:
  - AI 自动对 webpack 模块解包
  - 拿到签名与加密模块代码

产出:
  - 可阅读/可引用的模块源码
  - 提取后的函数集合

阶段 E本地沙箱复现

Step 9: Node 沙箱跑通关键函数

目标:
  - 明文输出 sign
  - 明文生成请求体
  - 解密响应得到业务 JSON

常见补齐项:
  - document / window 环境模拟
  - polyfillTextEncoder、atob/btoa 等)
  - 环境检测绕过

产出:
  - sign() 最小实现
  - encryptPayload() 最小实现
  - decryptResponse() 最小实现
  - 可直接运行的脚本demo

Step 10: 端到端验证

做法:
  - 用导出的函数直接构造一次真实请求
  - 验证返回数据

产出:
  - 可运行 PoCProof of Concept
  - 对照证据:与浏览器抓包结果一致

阶段 F工程化封装

Step 11: 封装为可复用模块

产出:
  - 代码模块:
    - sign.ts/js
    - crypto.ts/js
    - client.ts/js
  - Skill 更新:
    - 把本次新增的判断点/补齐技巧/陷阱写入模板

关键原则

┌─────────────────────────────────────────────────────────────┐
│                        核心原则                              │
│                                                             │
│  1. 不要"一句话逆完接口"                                    │
│     逆向必须拆步骤,每步有证据、有验证                        │
│                                                             │
│  2. AI 是放大器scale,不是替代者                         │
│     人负责判断与抽象;体力活交给 AI + 工具                    │
│                                                             │
│  3. 真正有价值的是"方法/能力体系",不是某个接口              │
│     把经验沉淀为可复用 Skill,长期收益最大                    │
│                                                             │
│  4. 不靠瞎猜,靠拆步骤 + 证据链 + 逐步验证                   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

里程碑与验收

里程碑 标准 产出
M1 抓包完成 目标请求 + sign/加密证据
M2 定位完成 入口 + 调用链 + 关键模块
M3 函数复现 sign/encrypt/decrypt 至少跑通 1 个
M4 端到端 PoC 真实请求 + 解密得到业务数据
M5 工程化封装 模块化 + 文档 + Skill 沉淀

模板

接口画像卡 (Interface Profile)

# 基本信息
页面入口: 
目标行为: 
请求标识: 
Method: 

# 加密情况
是否有 sign: 是/否
  - 字段名: 
请求体是否加密: 是/否
  - 字段名: 
响应是否加密: 是/否
  - 字段名: 

# 请求特征
关键 Header: 
关键 Cookie: 
变化字段: 

# 初步分析
初步猜测: 
  - [ ] 时间戳
  - [ ] 随机数
  - [ ] 设备指纹
  - [ ] 会话标识

# 验收标准
成功标准: 

逆向任务树

# A. Sign 生成链
A_sign:
  输入: 
  输出: 
  验证: 
  状态: pending

# B. 请求体加密链
B_encrypt:
  输入: 
  输出: 
  验证: 
  状态: pending

# C. 响应解密链
C_decrypt:
  输入: 
  输出: 
  验证: 
  状态: pending

三函数交付清单

functions:
  - name: sign(input)
    type: string
    status: pending
  
  - name: encryptPayload(payload)
    type: string | bytes
    status: pending
  
  - name: decryptResponse(resp)
    type: object
    status: pending

files:
  - demo.js: 端到端请求示例
  - README.md: 如何运行 + 验证点

执行清单

## 阶段 A: 任务定义
- [ ] 明确目标接口与成功标准
- [ ] 确认加密/签名位置(接口画像卡)

## 阶段 B: 现场取证
- [ ] 抓包拿到目标请求
- [ ] 关键字段表完成

## 阶段 C: 拆解任务
- [ ] 拆成三链sign / req / resp
- [ ] 定义每链的输入/输出/验证

## 阶段 D: 定位与抽取
- [ ] AI + MCP 定位入口与调用链
- [ ] 抽取最小可复现上下文
- [ ] Webpack 模块解包(如适用)

## 阶段 E: 沙箱复现
- [ ] Node/沙箱补齐环境
- [ ] 跑通关键函数
- [ ] 端到端 PoC 验证

## 阶段 F: 工程化
- [ ] 模块化封装 + 文档
- [ ] 将新增经验写回 Skill

MCP 工具清单

Chrome 相关

chrome_navigate:
  用途: 打开目标页面
  参数: url, wait_for

chrome_click:
  用途: 点击触发请求
  参数: selector

chrome_evaluate:
  用途: 执行 JS 获取数据
  参数: script

chrome_screenshot:
  用途: 截图取证
  参数: selector (optional)

网络相关

network_capture:
  用途: 抓取请求
  参数: url_pattern, method

network_get_requests:
  用途: 获取请求列表
  参数: filter

network_get_response:
  用途: 获取响应内容
  参数: request_id

文件相关

file_write:
  用途: 写入代码文件
  参数: path, content

file_read:
  用途: 读取代码文件
  参数: path

沙箱相关

sandbox_run:
  用途: 执行 Node 代码
  参数: code, context

sandbox_eval:
  用途: 执行表达式
  参数: expression

常见技巧

Webpack 模块定位

// 查找 webpack 模块
// 方法1: 全局搜索模块 ID
webpackJsonp.forEach(chunk => {
  chunk[1].forEach((module, id) => {
    if (module.toString().includes('sign')) {
      console.log('Found sign module:', id);
    }
  });
});

// 方法2: 覆写 fetch/xhr 捕获调用栈
const originalFetch = window.fetch;
window.fetch = function(...args) {
  console.trace('fetch called:', args);
  return originalFetch.apply(this, args);
};

环境补齐

// Node 环境补齐
global.window = global;
global.document = {
  createElement: () => ({ getContext: () => null }),
  getElementById: () => null,
  querySelector: () => null,
};
global.navigator = { userAgent: 'Mozilla/5.0...' };
global.location = { href: 'https://example.com' };

常见加密库识别

CryptoJS:
  特征: CryptoJS.AES, CryptoJS.MD5, CryptoJS.enc.Base64

Node-forge:
  特征: forge.md, forge.cipher, forge.util

Sm-crypto:
  特征: sm2.doEncrypt, sm3, sm4

自定义:
  特征: 分析混淆模式,通常是 Base64 + 自定义变换

相关技能