reverse-skills-max: initial public release (restored, redacted, hardened)
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
---
|
||||
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 预算耗尽
|
||||
Reference in New Issue
Block a user