构建 AI 逆向 MCP - 使用 MCP 辅助 JS 逆向
前言
谷歌出了一个 chrome-dev-mcp,能够自动化浏览器操作。我发现这个 MCP 能抓包,于是想:
介绍如何构建基于 MCP(Model Context Protocol)协议的 AI 逆向工具,利用 Chrome DevTools Protocol(CDP)实现浏览器自动化操作以辅助 JS 逆向分析。通过封装搜索代码、调用栈追踪、断点调试、函数 Hook 等功能,AI 可直接操作 DevTools 进行加密函数定位、Cookie 生成分析及 XHR 断点调试。相比传统人工流程,该方案显著提升效率,适用于混淆代码分析、VM 逆向及批量测试场景,但需配合浏览器环境且部分复杂逻辑仍需人工判断。
谷歌出了一个 chrome-dev-mcp,能够自动化浏览器操作。我发现这个 MCP 能抓包,于是想:
但实际用下来发现,常规逆向需要的能力它都不支持:
那能不能给它打补丁?当然可以。
Chrome DevTools Protocol(CDP)本身支持这些能力,只是谷歌的 MCP 没有封装。于是我基于 CDP 扩展了一套逆向专用工具:
| 扩展能力 | 对应工具 |
|---|---|
| 代码搜索 | search_in_sources、find_in_script |
| 调用栈追踪 | get_request_initiator |
| 断点调试 | set_breakpoint、set_breakpoint_on_text |
| 单步执行 | step_into、step_over、step_out |
| 变量查看 | get_paused_info、evaluate_on_callframe |
| 函数 Hook | hook_function、trace_function |
| XHR 拦截 | break_on_xhr |
现在,AI 可以像人一样操作 DevTools 进行逆向分析了。
下面是完整的工具集和使用指南。
MCP(Model Context Protocol)是 Anthropic 推出的模型上下文协议,允许 AI 直接调用外部工具。
传统逆向流程:
| 流程 | 描述 |
|---|---|
| 1 | 人工操作浏览器 → 复制数据 → 粘贴给 AI → AI 分析 → 人工验证 |
MCP 辅助流程:
| 流程 | 描述 |
|---|---|
| 1 | AI 直接操作浏览器 → 自动分析 → 自动验证 → 输出结果 |
| 工具 | 功能 |
|---|---|
list_pages | 列出浏览器所有页面 |
select_page | 选择要操作的页面 |
new_page | 新建页面并导航 |
navigate_page | 页面导航(URL/前进/后退/刷新) |
take_snapshot | 获取页面 DOM 快照 |
take_screenshot | 页面截图 |
| 工具 | 功能 |
|---|---|
list_network_requests | 列出所有网络请求 |
get_network_request | 获取请求详情(Headers/Body/Response) |
get_request_initiator | 获取请求调用栈 - 定位发起请求的代码 |
break_on_xhr | XHR/Fetch 断点 - URL 匹配时暂停 |
| 工具 | 功能 |
|---|---|
list_scripts | 列出页面加载的所有 JS 脚本 |
get_script_source | 获取脚本源码(支持行范围/字符偏移) |
find_in_script | 在指定脚本中搜索字符串 |
search_in_sources | 全局搜索所有脚本 |
| 工具 | 功能 |
|---|---|
set_breakpoint | 设置行断点(支持条件断点) |
set_breakpoint_on_text | 按代码文本设置断点 - 适合混淆代码 |
remove_breakpoint | 移除断点 |
list_breakpoints | 列出所有断点 |
pause | 立即暂停执行 |
resume | 继续执行 |
step_into | 单步进入 |
step_over | 单步跳过 |
step_out | 跳出当前函数 |
| 工具 | 功能 |
|---|---|
get_paused_info | 获取暂停状态(调用栈/作用域变量) |
evaluate_on_callframe | 在断点处执行表达式 - 查看变量值 |
evaluate_script | 在页面执行 JS 代码 |
inspect_object | 深度检查对象结构 |
| 工具 | 功能 |
|---|---|
hook_function | Hook 函数 - 记录调用/参数/返回值 |
unhook_function | 移除 Hook |
list_hooks | 列出所有 Hook |
trace_function | 追踪函数调用 - 不暂停,只记录 |
monitor_events | 监听 DOM 事件 |
| 工具 | 功能 |
|---|---|
get_storage | 获取 Cookie/localStorage/sessionStorage |
list_console_messages | 列出控制台消息 |
get_console_message | 获取控制台消息详情 |
目标:找到生成 w_tsfp 参数的代码
| 步骤 | 操作 |
|---|---|
| 1 | list_network_requests → 找到携带 w_tsfp 的请求 |
| 2 | get_request_initiator → 获取调用栈,定位发起代码 |
| 3 | get_script_source → 查看相关脚本 |
| 4 | set_breakpoint_on_text → 在关键代码处设断点 |
| 5 | 刷新页面触发断点 |
| 6 | get_paused_info → 查看调用栈和变量 |
| 7 | evaluate_on_callframe → 检查加密前后的值 |
目标:追踪 Cookie 的设置过程
| 步骤 | 操作 |
|---|---|
| 1 | hook_function → Hook document.cookie setter |
| 2 | 刷新页面 |
| 3 | list_console_messages → 查看 Hook 日志 |
| 4 | 从日志中获取调用栈 |
| 5 | get_script_source → 定位生成逻辑 |
目标:在特定 API 请求时暂停
| 步骤 | 操作 |
|---|---|
| 1 | break_on_xhr → 设置 URL 匹配断点(如 "/api/sign") |
| 2 | 触发请求 |
| 3 | get_paused_info → 获取完整调用栈 |
| 4 | step_into / step_over - 单步调试 |
| 5 | evaluate_on_callframe → 查看签名参数 |
目标:追踪 VM 执行过程
| 步骤 | 操作 |
|---|---|
| 1 | search_in_sources → 搜索 VM 解释器特征 |
| 2 | find_in_script → 定位具体位置 |
| 3 | set_breakpoint → 在 VM 循环处设断点 |
| 4 | get_paused_info → 获取 PC、寄存器等状态 |
| 5 | trace_function → 追踪关键函数调用 |
| 用户指令 | AI 响应 |
|---|---|
| 帮我找到这个页面 w_tsfp 参数的生成位置 | 1. 调用 list_network_requests 找到相关请求 2. 调用 get_request_initiator 获取调用栈 3. 分析调用栈,定位到 probe.js 第 XXX 行 4. 调用 get_script_source 获取上下文代码 5. 输出:w_tsfp 在 RC4 加密后通过 btoa 编码,入口函数是 ... |
| 用户指令 | AI 响应 |
|---|---|
| 在 RC4 加密函数处设断点,我想看加密前的明文 | 1. 调用 search_in_sources 搜索 "RC4" 或特征代码 2. 调用 set_breakpoint_on_text 设置断点 3. 提示用户刷新页面 4. 断点命中后调用 get_paused_info 5. 调用 evaluate_on_callframe 获取参数值 6. 输出:加密前明文是 {"loadts":...,"fingerprint":...} |
| 用户指令 | AI 响应 |
|---|---|
| Hook 所有可能的加密函数,看哪个被调用 | 1. 调用 hook_function 依次 Hook: - btoa - atob - JSON.stringify - encodeURIComponent 2. 提示用户操作页面 3. 调用 list_console_messages 查看 Hook 日志 4. 输出:btoa 被调用,参数是 RC4 加密后的数据... |
| 传统方式 | MCP 方式 |
|---|---|
| 手动打开 DevTools | AI 直接操作 |
| 复制粘贴数据 | 自动获取 |
| 人工搜索代码 | search_in_sources |
| 反复设断点调试 | AI 自动迭代 |
| 手写 Hook 代码 | hook_function 一键 Hook |
| 架构 | 描述 |
|---|---|
| 链路 | Claude ←→ MCP Server ←→ Chrome DevTools Protocol ←→ 浏览器 |
MCP Server 封装 CDP 协议,暴露为 AI 可调用的工具函数。
list_network_requests 了解请求模式search_in_sources 比手动翻代码快set_breakpoint_on_text 比行号更可靠MCP 让 AI 从'分析助手'变成'操作助手',显著提升逆向效率

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online