news 2026/9/28 19:47:45

【AI赋能】MCP+Skill能力下的前端JS逆向自动化落地:TaoToken统一Key接入与JSRPC验证

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【AI赋能】MCP+Skill能力下的前端JS逆向自动化落地:TaoToken统一Key接入与JSRPC验证

1. 前端 JS 逆向为什么总卡在“定位加密函数”这一步

做前端 JS 逆向的同学大概都有同感:真正难的不是写 Python 脚本,而是前面那一大段“找入口”的过程。一个登录接口,参数里带个sign或者password,你打开 DevTools,Sources 面板里几万行混淆代码,_0x4f2a这种变量名铺满屏幕,断点打下去要么断不住,要么断在无关的定时器里。等你终于靠 XHR 断点跟到了加密函数,还要手动把函数抠出来、写 JSRPC 的注册代码、再写一层 Flask 代理给 Burp 的 autoDecoder 用。这一套流程走下来,快的话半小时,慢的话一整个下午就没了。

更麻烦的是这套流程高度重复。换一个站点,加密参数名从sign变成enc,加密方式从 MD5 变成 AES,你又得从头来一遍。定位、抠代码、注册、代理,每一步都是体力活。我试过把常用的 JSRPC 模板存下来复用,但真正耗时的“定位加密函数入口”和“判断调用链依赖”这两步,模板帮不上忙。

这就是 MCP 加 Skill 想解决的问题。MCP(Model Context Protocol)让 AI 能连上真实的 Chrome 浏览器,去触发请求、跟踪调用栈;Skill 则把“怎么定位参数、怎么生成注册代码、怎么产出 Flask 代理”这套规范固化下来,让 AI 按固定流程走。两者结合之后,逆向的初始配置阶段可以从“半自动”往“高自动”挪一大步——你只需要给出目标 URL、要分析的参数名、一个可复现的请求示例,剩下的函数发现、注册代码生成、代理代码生成,交给流程去跑。

这篇就按这个思路,把 MCP + Skill 下的 JSRPC 自动化流程串一遍,同时给出 TaoToken 统一 Key 接入的config.toml和settings.json骨架,最后用一个真实参数回填的例子验证整条链路能不能跑通。适合已经在做前端逆向、想把这套流程工程化的同学,也适合刚接触 JSRPC 想找个可复用骨架的人。

2. TaoToken 前置:统一 Key 与 API 通道准备

在讲逆向流程之前,先把模型通道这块理清楚。MCP + Skill 这套流程里,AI 需要调用模型来完成“分析调用栈、判断加密入口、生成代码”这些动作,所以你得有一个稳定的 API 通道。TaoToken 在这里的作用就是提供一个统一的 Key 和 API 入口,把模型对话、编码计划、控制台管理这些能力收口到一个地址上,省得你在多个平台之间来回切 Key。

你需要准备的东西不多:一个 TaoToken 账号,一个 API Key,然后确认你的客户端(不管是 Codex、Claude Code 还是别的支持 MCP 的工具)能通过https://taotoken.net/api这个入口发请求。注意 API 地址不带 UTM 参数,就是干净的https://taotoken.net/api。

如果你还没建 Key,可以去控制台生成一个:

控制台入口:https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite

生成之后,Key 的管理和查看在 API Keys 页面:

API Keys:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite

这里有个细节要注意:MCP 流程里 AI 会频繁发起模型调用,尤其是分析调用栈和生成代码这两步,token 消耗比普通对话高。所以建议单独建一个 Key 专门给逆向流程用,方便后面看用量、做限额。另外,如果你打算长期跑编码和 Agent 类的任务,可以了解一下 Coding Plan,它更适合这种持续调用的场景:

Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite

接入文档在这里,配置格式、参数说明都写得很清楚:

接入文档:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite

把 Key 拿到手之后,下一步就是把它写进客户端的配置文件里。下面给出config.toml和settings.json两个骨架,你可以直接复制改。

3. 可复制配置:config.toml 与 settings.json 骨架

先说明一下,不同客户端的配置文件格式不一样。Codex 用的是config.toml,Claude Code 用的是settings.json。这里两个都给出来,你按自己用的工具选。

3.1 config.toml:MCP 服务与模型通道

Codex 的配置文件在 Mac 上是~/.codex/config.toml,Windows 是%USERPROFILE%\.codex\config.toml。下面这个骨架把 chrome-devtools MCP 服务和 TaoToken 的模型通道都写进去了:

# ~/.codex/config.toml # 模型通道配置:统一走 TaoToken model_provider = "taotoken" model = "claude-sonnet-4-20250514" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" env_key = "TAOTOKEN_API_KEY" # chrome-devtools MCP 服务 [mcp_servers.chrome-devtools] command = "npx" args = ["-y", "chrome-devtools-mcp@latest"] # 如果你还想加别的 MCP 服务,按同样格式往下写 # [mcp_servers.other] # command = "..." # args = ["..."]

这里env_key = "TAOTOKEN_API_KEY"的意思是,Key 不直接写在配置文件里,而是通过环境变量传入。这样更安全,也方便你在不同机器上切换。设置环境变量的方式:

# Mac / Linux,写进 ~/.zshrc 或 ~/.bashrc export TAOTOKEN_API_KEY="你的Key" # Windows PowerShell $env:TAOTOKEN_API_KEY="你的Key"

如果你不想用环境变量,也可以直接把 Key 写在config.toml里,但要注意这个文件别提交到 Git:

[model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" api_key = "你的Key"

3.2 settings.json:Claude Code 侧配置

如果你用的是 Claude Code,配置文件在~/.claude/settings.json。骨架如下:

{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "你的Key" }, "mcpServers": { "chrome-devtools": { "command": "npx", "args": ["-y", "chrome-devtools-mcp@latest"] } } }

Claude Code 这边有个好处,它原生支持 Skill 目录,把逆向的 Skill 放进去就能被识别。Skill 的放置路径后面会讲。

3.3 验证 MCP 服务是否生效

配置写完之后,先别急着跑逆向流程,确认 MCP 服务能起来。在 Codex 里执行:

codex mcp list

如果看到chrome-devtools在列表里,说明配置被读到了。然后启动一次 MCP 服务,观察是否会自动拉起浏览器:

codex mcp add chrome-devtools -- npx -y chrome-devtools-mcp@latest

这一步如果看到浏览器窗口被打开,就说明 MCP 通道通了。如果没反应,检查两件事:一是npx能不能正常执行,二是 Chrome 的远程调试端口有没有被占用。

4. 把 JSRPC 调用、加密参数定位串成可复用流程

配置通了之后,进入正题。这一节把整个流程拆成几个阶段,每个阶段对应 Skill 里的一个动作,你照着走就行。

4.1 Skill 目录结构与放置

先把 Skill 放到客户端的 skills 目录。Codex 在 Mac 上的路径是/Users/用户名/.codex/skills/,Claude Code 是~/.claude/skills/。把整个js-reverse-automation--skill目录拷进去:

# Mac 示例 cp -r js-reverse-automation--skill /Users/你的用户名/.codex/skills/

目录结构长这样,重点是SKILL.md和scripts/下的几个生成器:

js-reverse-automation--skill/ ├── README.md ├── SKILL.md # 主控文件,定义触发条件和流程阶段 ├── agents/ │ └── openai.yaml # agent 入口配置 ├── artifacts/ # 运行期产物目录 │ ├── phase0_input.json │ ├── phase1_trace.json │ ├── phase2_entrypoints.json │ ├── phase3_dependencies.json │ └── validation_report.json ├── references/ │ ├── workflow-recon.md │ ├── output-contract.md │ ├── failure-recovery.md │ ├── validation-checklist.md │ └── antidebug/ # 11 项反调试处理说明 └── scripts/ ├── check_inputs.py ├── emit_analysis_result.py ├── emit_jsrpc_stub.py # JSRPC 代码生成器 ├── emit_flask_proxy.py # Flask 代理生成器 ├── emit_burp_doc.py # Burp autoDecoder 文档生成器 └── validate_artifacts.py

SKILL.md只负责定义“任务怎么被触发、必须输入什么、流程分几个阶段、输出和验收怎么要求”,具体的代码生成逻辑在scripts/里。这种拆分的好处是,你换一个站点,只要改输入,流程和生成器不用动。

4.2 启动 Chrome 远程调试

MCP 要连上真实浏览器,得先让 Chrome 开着远程调试端口。Mac 下这样启动:

/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \ --remote-debugging-port=9222 \ --remote-debugging-address=0.0.0.0

Windows 下:

"C:\Program Files\Google\Chrome\Application\chrome.exe" ^ --remote-debugging-port=9222 ^ --remote-debugging-address=0.0.0.0

启动之后,浏览器会以调试模式打开。这时候 MCP 服务就能通过 9222 端口连上它,去触发请求、跟踪调用栈。注意这个浏览器实例最好单独开,别和你日常用的混在一起,免得 Cookie 和插件干扰。

4.3 输入四要素,让流程跑起来

在客户端里调用 Skill,然后按提示输入四样东西:

1、目标网址(完整 URL):https://target.example.com/login 2、需要分析的加密参数名(如 sign / enc / token):password 3、可复现请求示例(优先给 fetch/抓包原始请求): POST /api/login username=111111&password=111111&code=1234&role=000002 4、环境限制(浏览器版本、是否需要代理/插件、是否允许注入): Chrome 120+,允许注入,无代理

这四样是 Skill 的必填输入,缺一个流程就会在check_inputs.py这一步报错。输入给全之后,AI 会按阶段往下走:

第一阶段,MCP 连上浏览器,复现你给的请求,把调用链路 trace 下来,结果写进artifacts/phase1_trace.json。第二阶段,从 trace 里识别出password这个参数的入口函数,写进phase2_entrypoints.json。第三阶段,提取入口函数的依赖、上下文和调用方式,写进phase3_dependencies.json。最后,生成器根据这些产物产出 JSRPC 注入代码、Flask 代理代码和 Burp 对接文档。

整个过程你只需要在开头给一次输入,后面等它跑完就行。跑完之后去artifacts/目录看产物,重点看validation_report.json,里面会告诉你哪些阶段通过了、哪些需要人工介入。

4.4 反调试处理

逆向过程中遇到无限 debugger、控制台检测、时间差检测这些是常事。Skill 的references/antidebug/下针对 11 项常见反调试手段都写了处理说明,比如debugger-loop.md处理无限 debugger 和 eval 类问题,console-detect.md处理控制台检测和日志篡改,timer-check.md处理时间差和 Promise 时序检测。流程跑到对应阶段时,如果检测到反调试,会自动去查这些说明并采取对应动作。你不需要手动去改,但建议跑完之后翻一下这些文件,了解它做了什么,方便出问题时排查。

5. 验证请求:从 JSRPC 到 Flask 再到 Burp

流程跑完之后,产物在artifacts/目录里。这一节用一个真实参数回填的例子,验证整条链路能不能跑通。假设目标参数是password,加密方式是 MD5。

5.1 启动 JSRPC 并注入

先启动 JSRPC 服务。然后在浏览器开发者工具的 Console 里,执行 JSRPC 项目里的JsEnv_Dev.js内容。这一步是把 JSRPC 的运行环境注入到页面里。

接着注入 AI 生成的 JSRPC 注册代码,文件名类似jsrpc_inject_hr_ncu_password.js。注入之后,测试一下 JSRPC 调用是否正常:

curl "http://127.0.0.1:12080/go?group=fausto&action=generate_password_md5&param=111111"

如果返回了加密后的结果,说明 JSRPC 这一层通了。如果返回错误,检查两件事:一是group和action名字对不对,二是注入的注册代码有没有报错。

5.2 运行 Flask 代理

JSRPC 通了之后,运行 AI 生成的 Flask 代理,文件名类似flask_proxy_hr_ncu.py:

python flask_proxy_hr_ncu.py

然后测试 Flask 能不能正常加密:

curl -X POST http://127.0.0.1:8888/encode \ -H "Content-Type: application/x-www-form-urlencoded" \ --data-urlencode "dataBody=username=111111&password=111111&code=1234&role=000002"

返回的dataBody里,password应该已经被替换成加密后的值。到这一步,JSRPC 到 Flask 的链路就通了。

5.3 对接 Burp autoDecoder

最后一步是把 Flask 代理接到 Burp 的 autoDecoder 插件上。AI 生成的emit_burp_doc.py会产出一份对接说明,按说明在 autoDecoder 里配置接口地址和参数映射就行。配置好之后,在 Burp 里改包,password参数会自动经过 Flask 代理加密,再发出去。

整个链路跑通之后,你抓包、改包、加密参数回填这一套就自动化了。换一个站点,只要重新给一次输入,流程会重新生成对应的注册代码和代理代码,不用从头写。

6. 本篇常见错排查

流程跑起来之后,常见的坑集中在几个地方。这里按现象列一下,方便你对号入座。

MCP 连不上浏览器:先确认 Chrome 是不是用--remote-debugging-port=9222启动的,然后访问http://127.0.0.1:9222/json/version看有没有返回。如果没返回,说明端口没起来,检查 Chrome 路径和参数。如果返回了但 MCP 还是连不上,检查config.toml里mcp_servers.chrome-devtools的配置有没有写错,特别是args里的包名。

JSRPC 调用返回空或报错:多半是注册代码里的group或action名字对不上。去artifacts/phase2_entrypoints.json里看 AI 识别出的入口函数名,和注入代码里的名字核对一下。另外确认JsEnv_Dev.js是不是在注册代码之前注入的,顺序反了会找不到环境。

Flask 代理返回 500:先看 Flask 的日志,通常是 JSRPC 那边没通。单独用 curl 测一下 JSRPC 的接口,确认能返回结果,再测 Flask。如果 JSRPC 通了但 Flask 报错,检查 Flask 代码里的 JSRPC 地址和端口是不是127.0.0.1:12080。

Burp autoDecoder 加密不生效:检查 autoDecoder 里的接口地址是不是 Flask 的http://127.0.0.1:8888/encode,参数名是不是dataBody。另外确认 Burp 的拦截范围有没有覆盖到目标请求,有时候是请求根本没经过 autoDecoder。

反调试导致流程中断:如果页面有无限 debugger,流程可能在 trace 阶段就卡住。去references/antidebug/下找对应的处理说明,手动在浏览器里先绕过反调试,再重新跑流程。Skill 会自动处理一部分,但不是所有情况都能覆盖。

模型调用报 401 或 403:检查 TaoToken 的 Key 有没有正确设置到环境变量里,config.toml里的env_key名字和实际环境变量名要一致。如果用的是settings.json,检查ANTHROPIC_API_KEY有没有写对。

7. 把流程固化成你自己的逆向工作台

这套流程跑顺之后,你会发现前端 JS 逆向的初始配置阶段被压缩了很多。以前要手动定位加密函数、抠代码、写注册、写代理,现在给一次输入,等流程跑完,产物直接可用。真正需要人工介入的,主要是反调试绕过和最后的 Burp 配置这两块。

如果你想把这套东西固化成自己的工作台,有几个方向可以继续做。一是把常用的加密方式(MD5、AES、RSA)的注册代码模板整理出来,让生成器直接套用;二是把反调试处理做成可配置的开关,遇到特定站点时手动启用;三是把artifacts/目录的产物做成版本管理,同一个站点多次跑的结果可以对比,方便排查回归问题。

模型通道这块,如果你打算长期跑这类任务,建议把 Key 和用量单独管理。模型对话入口在这里,需要临时验证某个模型行为时可以用:

模型对话:https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=model-chat&utm_campaign=rewrite

Claude Code 侧的接入配置可以参考这个:

ClaudeCodeAnthropic:https://taotoken.net/claude-code-anthropic?utm_source=taotoken_aicg_blog_end&utm_content=claude-code-anthropic&utm_campaign=rewrite

最后提醒一句,逆向流程里涉及注入和改包,务必在你有授权的目标上操作。这套工具的价值在于把重复劳动自动化,而不是绕过该有的边界。把流程跑通之后,你会发现省下来的时间可以花在更有意思的地方,比如分析加密算法的实现细节,或者优化整个链路的稳定性。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/28 19:46:58

大模型推流网关全局自适应过载保护与自愈机制实战

在大模型推流(Streaming LLM)网关承载海量高并发长连接时,由于每个连接都是长达数十秒的流式交互,当突发流量洪峰超过网关或下游 GPU 的物理承载极限时,系统常常面临毁灭性的**“自适应过载崩溃与全网雪崩(…

作者头像 李华
网站建设 2026/9/28 19:46:37

峰岹FU6832F量产烧录方案:昂科烧录器良率99.7%实战

1. 项目缘起与方案选型1.1 为什么关注峰岹FU6832F这颗芯片第一次拿到峰岹科技FU6832F的样片时,我其实有点意外。这颗芯片在电机控制圈子里口碑不错,但公开的中文实操资料少得可怜,大部分工程师要么靠FAE支持,要么自己啃英文数据手…

作者头像 李华
网站建设 2026/9/28 19:45:57

ABB ACS510/550变频器面板中文设置与参数备份保姆级教程

1. 上手之前,先弄明白ACS510/550面板到底能干什么ABB ACS510和ACS550这两款变频器,在风机水泵、传送带、搅拌机这些场景里几乎是“标配级”的存在。尤其是ACS550,当年很多水处理项目、楼宇自控项目里一用就是十几年,到现在还在稳定…

作者头像 李华
网站建设 2026/9/28 19:45:52

ACS510/550变频器中文设置、参数备份与通讯配置全攻略

干这行的都清楚,ABB ACS510和ACS550这两款变频器在国内泵站、风机、传送带上的存量有多大。设备皮实耐造,十几年还在转,但很多老机器有个尴尬问题:面板默认英文,老师傅一走,新接手的电工看着满屏“PARAMETE…

作者头像 李华
网站建设 2026/9/28 19:45:32

RK3568+OV5695嵌入式AI入侵检测教学套件设计解析

1. 为什么实验室里“演”不好入侵检测?——从真实安防场景倒推教学套件的设计逻辑我带过三届嵌入式AI方向的实训班,每次讲到“视频流中的目标检测落地”,学生第一反应都是打开YOLOv5的GitHub仓库,跑通COCO数据集上的demo&#xff…

作者头像 李华