-
-
[原创]构建 AI 逆向 MCP - 使用 MCP 辅助 JS 逆向
-
-
[原创]构建 AI 逆向 MCP - 使用 MCP 辅助 JS 逆向
构建 AI 逆向 MCP - 使用 MCP 辅助 JS 逆向
前言
谷歌出了一个 chrome-dev-mcp,能够自动化浏览器操作。我发现这个 MCP 能抓包,于是想:能不能用于 JS 逆向分析?
但实际用下来发现,常规逆向需要的能力它都不支持:
- ❌ 搜索代码
- ❌ 追踪调用栈
- ❌ 打断点调试
- ❌ Hook 函数
- ❌ 查看变量值
那能不能给它打补丁?当然可以。
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 进行逆向分析了。
项目地址:37bK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6*7K9r3W2*7K9s2g2G2k6r3g2E0j5h3!0Q4x3V1k6B7M7#2)9J5k6s2u0W2N6X3g2J5M7$3g2Q4x3X3c8E0j5%4l9`.
下面是完整的工具集和使用指南。
一、什么是 MCP
MCP(Model Context Protocol)是 Anthropic 推出的模型上下文协议,允许 AI 直接调用外部工具。
传统逆向流程:
1 | 人工操作浏览器 → 复制数据 → 粘贴给 AI → AI 分析 → 人工验证
|
MCP 辅助流程:
1 | AI 直接操作浏览器 → 自动分析 → 自动验证 → 输出结果
|
二、JS 逆向 MCP 工具集
2.1 页面管理
| 工具 |
功能 |
list_pages |
列出浏览器所有页面 |
select_page |
选择要操作的页面 |
new_page |
新建页面并导航 |
navigate_page |
页面导航(URL/前进/后退/刷新) |
take_snapshot |
获取页面 DOM 快照 |
take_screenshot |
页面截图 |
2.2 网络分析
| 工具 |
功能 |
list_network_requests |
列出所有网络请求 |
get_network_request |
获取请求详情(Headers/Body/Response) |
get_request_initiator |
获取请求调用栈 - 定位发起请求的代码 |
break_on_xhr |
XHR/Fetch 断点 - URL 匹配时暂停 |
2.3 脚本分析
| 工具 |
功能 |
list_scripts |
列出页面加载的所有 JS 脚本 |
get_script_source |
获取脚本源码(支持行范围/字符偏移) |
find_in_script |
在指定脚本中搜索字符串 |
search_in_sources |
全局搜索所有脚本 |
2.4 断点调试
| 工具 |
功能 |
set_breakpoint |
设置行断点(支持条件断点) |
set_breakpoint_on_text |
按代码文本设置断点 - 适合混淆代码 |
remove_breakpoint |
移除断点 |
list_breakpoints |
列出所有断点 |
pause |
立即暂停执行 |
resume |
继续执行 |
step_into |
单步进入 |
step_over |
单步跳过 |
step_out |
跳出当前函数 |
2.5 运行时分析
| 工具 |
功能 |
get_paused_info |
获取暂停状态(调用栈/作用域变量) |
evaluate_on_callframe |
在断点处执行表达式 - 查看变量值 |
evaluate_script |
在页面执行 JS 代码 |
inspect_object |
深度检查对象结构 |
2.6 Hook 与追踪
| 工具 |
功能 |
hook_function |
Hook 函数 - 记录调用/参数/返回值 |
unhook_function |
移除 Hook |
list_hooks |
列出所有 Hook |
trace_function |
追踪函数调用 - 不暂停,只记录 |
monitor_events |
监听 DOM 事件 |
2.7 存储与控制台
| 工具 |
功能 |
get_storage |
获取 Cookie/localStorage/sessionStorage |
list_console_messages |
列出控制台消息 |
get_console_message |
获取控制台消息详情 |
三、实战场景
3.1 定位加密函数
目标:找到生成 w_tsfp 参数的代码
1 2 3 4 5 6 7 | 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 → 检查加密前后的值
|
3.2 分析 Cookie 生成
目标:追踪 Cookie 的设置过程
1 2 3 4 5 | 1. hook_function → Hook document.cookie setter
2. 刷新页面
3. list_console_messages → 查看 Hook 日志
4. 从日志中获取调用栈
5. get_script_source → 定位生成逻辑
|
3.3 XHR 断点调试
目标:在特定 API 请求时暂停
1 2 3 4 5 | 1. break_on_xhr → 设置 URL 匹配断点(如 "/api/sign")
2. 触发请求
3. get_paused_info → 获取完整调用栈
4. step_into/step_over → 单步调试
5. evaluate_on_callframe → 查看签名参数
|
3.4 VM 字节码分析
目标:追踪 VM 执行过程
1 2 3 4 5 | 1. search_in_sources → 搜索 VM 解释器特征
2. find_in_script → 定位具体位置
3. set_breakpoint → 在 VM 循环处设断点
4. get_paused_info → 获取 PC、寄存器等状态
5. trace_function → 追踪关键函数调用
|
四、AI 对话示例
4.1 定位加密入口
1 2 3 4 5 6 7 8 | 用户:帮我找到这个页面 w_tsfp 参数的生成位置
AI:
1. 调用 list_network_requests 找到相关请求
2. 调用 get_request_initiator 获取调用栈
3. 分析调用栈,定位到 probe.js 第 XXX 行
4. 调用 get_script_source 获取上下文代码
5. 输出:w_tsfp 在 RC4 加密后通过 btoa 编码,入口函数是 ...
|
4.2 动态调试
1 2 3 4 5 6 7 8 9 | 用户:在 RC4 加密函数处设断点,我想看加密前的明文
AI:
1. 调用 search_in_sources 搜索 "RC4" 或特征代码
2. 调用 set_breakpoint_on_text 设置断点
3. 提示用户刷新页面
4. 断点命中后调用 get_paused_info
5. 调用 evaluate_on_callframe 获取参数值
6. 输出:加密前明文是 {"loadts":...,"fingerprint":...}
|
4.3 批量 Hook
1 2 3 4 5 6 7 8 9 10 11 | 用户:Hook 所有可能的加密函数,看哪个被调用
AI:
1. 调用 hook_function 依次 Hook:
- btoa
- atob
- JSON.stringify
- encodeURIComponent
2. 提示用户操作页面
3. 调用 list_console_messages 查看 Hook 日志
4. 输出:btoa 被调用,参数是 RC4 加密后的数据...
|
五、优势总结
5.1 效率提升
| 传统方式 |
MCP 方式 |
| 手动打开 DevTools |
AI 直接操作 |
| 复制粘贴数据 |
自动获取 |
| 人工搜索代码 |
search_in_sources |
| 反复设断点调试 |
AI 自动迭代 |
| 手写 Hook 代码 |
hook_function 一键 Hook |
5.2 适合场景
- 混淆代码分析:AI 可以快速搜索、设断点、查看变量
- VM 逆向:自动追踪执行流程,记录状态变化
- 加密算法定位:Hook + 调用栈分析,快速定位入口
- 批量测试:自动化执行多轮测试
5.3 局限性
- 需要浏览器配合(DevTools Protocol)
- 某些反调试可能检测 CDP 连接
- 复杂异步逻辑仍需人工判断
- AI 理解能力有限,核心决策仍需人工
六、搭建指南
6.1 环境要求
- Chrome/Chromium 浏览器
- Node.js 运行时
- Claude Desktop 或支持 MCP 的客户端
6.2 核心原理
1 | Claude ←→ MCP Server ←→ Chrome DevTools Protocol ←→ 浏览器
|
MCP Server 封装 CDP 协议,暴露为 AI 可调用的工具函数。
6.3 关键能力
- 页面控制:导航、刷新、截图
- 网络拦截:请求列表、调用栈追踪
- 脚本调试:断点、单步、变量查看
- 代码注入:Hook、Trace、执行任意 JS
七、最佳实践
- 先观察再动手:用
list_network_requests 了解请求模式
- 善用搜索:
search_in_sources 比手动翻代码快
- 断点要精准:
set_breakpoint_on_text 比行号更可靠
- Hook 优先:先 Hook 观察,再设断点深入
- 保存上下文:让 AI 记录关键发现,避免重复分析
- 分步验证:每一步都验证结果,避免错误累积
MCP 让 AI 从"分析助手"变成"操作助手",显著提升逆向效率
传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!