# Js Reverse Automation

通过 chrome-devtools-mcp 连接真实浏览器，自动定位前端加密入口，生成 JSRPC 注入代码、Flask 代理和 Burp autoDecoder 对接文档。

- Repository: https://github.com/Fausto-404/js-reverse-automation--skill (607 stars)
- Category: AI and agents
- License: Apache-2.0
- Last updated: 2026-10-10
- Runs scripts: yes, review before use

## Install

Claude Code: `npx skills add Fausto-404/js-reverse-automation--skill --skill js-reverse-automation -g -a claude-code -y`
Codex: `npx skills add Fausto-404/js-reverse-automation--skill --skill js-reverse-automation -g -a codex -y`
Cursor: `npx skills add Fausto-404/js-reverse-automation--skill --skill js-reverse-automation -g -a cursor -y`
Gemini CLI: `npx skills add Fausto-404/js-reverse-automation--skill --skill js-reverse-automation -g -a gemini-cli -y`

## Description

通过 chrome-devtools-mcp 连接真实浏览器，自动定位前端加密入口，生成 JSRPC 注入代码、Flask 代理和 Burp autoDecoder 对接文档。

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# 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 级结果保存后执行：

The rest: https://github.com/Fausto-404/js-reverse-automation--skill/blob/HEAD/js-reverse-automation/SKILL.md
