Files
reverse-skills-max/vendor-new/js-reverse-automation--skill/js-reverse-automation/SKILL.md

93 lines
5.2 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.

---
name: js-reverse-automation
description: 通过 chrome-devtools-mcp 连接真实浏览器,自动定位前端加密入口,生成 JSRPC 注入代码、Flask 代理和 Burp autoDecoder 对接文档。
metadata:
author: Fausto-404
---
# JS 逆向自动化
通过 JSRPC 与真实浏览器完成前端加密入口定位、运行时取证、对抗分析、验证和工程化交付。浏览器连接、文档身份和 action 级结果必须形成可复核证据链。
## 适用场景
- 登录/注册页面密码加密
- API 请求签名
- 表单字段加密
- 响应数据解密
## 输入格式
```
Target URL: https://xxx/login
Parameters To Analyze: password
Optional Fetch Example: fetch("https://xxx/api/login", {...})
```
## 核心流程
1. **预分析 Fetch Example**(如果有)→ 提取加密算法、参数格式、目标 URL
2. 打开页面 → 注入 Hook → 触发目标动作
3. 捕获网络请求 → 定位加密函数
4. 注册 JSRPC → 生成 Flask/Burp 产物
5. 验证输出 → 按标准最终交付格式输出完整结果
遇到反调试、反 Hook、JSVMP、动态 Cookie、环境型签名或动态加载时,先生成并运行 `adversarial_runtime_probe.js`;只有观察到明确对抗信号后,才使用 `--mode intervene` 或源码级插桩。
## 详细工作流
详见 `workflow/pipeline.md`
## 对抗与验证能力
- **对抗运行时探针**:反调试、完整性检查、环境属性、动态代码、响应链、Worker/WebSocket/WASM/iframe 加载事件。
- **持久 Hook**:页面重新赋值后自动检测丢失并尝试恢复;所有 Patch 可通过 `uninstall()` 回滚。
- **Hook 组合**:对抗探针与运行时加密探针共享 `__JSRA_HOOK_REGISTRY__`,同一 API 采用可卸载的分层包装,外部替换只触发一次重建。
- **安全证据**:原始捕获采用有界循环引用安全快照,避免 CryptoJS/JSEncrypt 对象导致导出失败。
- **浏览器会话契约**:注入、调用和导航绑定到当前 tab/document;断线、超时、暂停或导航后不复用旧引用,避免把未知状态误报成成功。
- **控制流观测**:可选观察控制台清理、历史导航、存储访问和关闭页面等干扰信号;只有明确启用干预模式时才阻止受控动作,默认不改变业务行为。
- **源码级保守插桩**:针对明确选择的简单属性读取生成 tap,不默认改写全量代码。
- **对抗差分**:比较基线与干预后的事件、请求、错误和新增证据;差分报告不等于目标已被绕过。
- **完整交付**:标准 JSRPC 产物在调用期间捕获最终 `fetch/XHR` 网络请求,返回明文、最终 route、密文/签名请求体、HTTP 状态和业务响应;最终结果同时保留分析结果、验证表、可复制命令、关闭命令、Burp autoDecoder 配置和生成产物;对抗信息作为补充证据追加。
- **能力边界**:验证码、WebAuthn、设备证明、跨域隔离 Realm 和未导出的 WASM 内部函数仍需保留为人工或 unsupported 路径。
## 交付前强制检查
生成 Flask 代理后必须执行:
```bash
python3 scripts/check_delivery_contract.py \
--proxy generated/flask_proxy.py \
--output artifacts/delivery_contract.json
```
该检查必须同时通过 JSRPC 地址归一化、Burp `application/octet-stream` 完整报文、`Content-Length` 重建和 `dataBody` wrapper 四项回归。`jsrpc.base_url` 可以填写 `http://127.0.0.1:12080` 或 `http://127.0.0.1:12080/go`,生成器必须保证最终只请求一次 `/go`。
端口监听不等于 JSRPC 可用。最终报告前还必须使用真实浏览器执行 action 级 smoke test,并确认返回 `plaintext`、最终 route、非空 `requestBody`、HTTP 状态和业务响应;`/list` 无 action、`/go` 返回 400 或 Flask 返回 502 时,不得写“Flask 代理验证通过”。
将 action 级结果保存后执行:
```bash
python3 scripts/validate_browser_evidence.py \
--input artifacts/jsrpc_smoke.json \
--output artifacts/browser_evidence.json
```
如果同时保存了浏览器桥接状态、`tabId` 和当前 `documentId`,再增加 `--require-session`。超时、断线、待恢复或文档身份变化只能标记为未确认,不能通过重放旧请求来补证据。
Burp 整包模式必须支持外层 `Content-Type: application/octet-stream`,从内层 HTTP 报文识别真实 Content-Type,返回完整改写报文;请求/响应方向仍每次只能选择一个,解密接口和加密接口可以同时配置。
## 约束规则
详见 `constraints/rules.md`
## 参考资料(按需加载)
- 反调试:`references/antidebug-patterns.md`
- 复杂入口:`references/advanced-entrypoints.md`
- 证据收集:`references/evidence-collection.md`
- 能力边界:`references/capability-boundaries.md`
- 输出契约:`references/output-contract.md`
- 最终报告模板:`references/final-report-template.md`
- 对抗运行时:`references/adversarial-runtime.md`
- 浏览器会话与证据:`references/browser-session-contract.md`
## Token 预算
- 单次调用:50,000 token
- 最大工具调用:20 次
- 停止条件:找到入口并验证通过 / 所有降级策略失败 / Token 预算耗尽