Files
hello_js_reverse_skill/references/mcp-cookbook.md
T
白夜 b5cf8b121a feat(v2.4.0): JSVMP 双路径攻克体系 + jsdom 环境补丁知识库
基于实战经验重构 JSVMP 分析框架:

- SKILL.md: 新增路径选择决策树(路径 A 算法追踪 vs 路径 B 环境伪装)
- SKILL.md: 路径 B「环境伪装六步法」完整方法论(采集→对比→分级→补丁→验证→端到端)
- SKILL.md: 新增场景 10「JSVMP + jsdom 环境伪装」、解法模式 E
- SKILL.md: 标注三板斧适用边界与局限,经验法则扩充至 22 条
- references/jsdom-env-patches.md: 新增 jsdom 环境补丁知识库(Function.toString 三层防御 / plugins 完整模拟 / DOM 布局属性 / 30+ API 存根)
- cases/: 新增经验库系统(模板 + 首个 JSVMP 实战案例含 58 项环境检测差异全表)
- references/jsvmp-analysis.md: JSVMP 专项分析详细指南
- references/troubleshooting.md: 常见问题排查指南
- templates/python-request/: Python 项目模板
- 各 references 文档增强、Python 技术栈支持、MCP v1.1 适配(44→52 工具)

Made-with: Cursor
2026-04-02 18:10:05 +08:00

14 KiB
Raw Blame History

MCP 工具使用手册

概述

本手册详细说明 camoufox-reverse MCP 服务器的使用方式, 提供常见逆向场景下的具体操作步骤。

工具速查表

camoufox-reverse MCP(52 个工具)

类别 工具 核心用途
浏览器 launch_browser / close_browser 启动/关闭反检测浏览器
导航 navigate / reload / go_back 页面导航
页面交互 click / type_text / wait_for 元素交互
截图 take_screenshot / take_snapshot 截图 / 无障碍树
页面信息 get_page_info / get_page_html 页面状态和 HTML
源码搜索 search_code 在所有 JS 中搜索(结构化结果,默认 max_results=50)
精确搜索 search_code_in_script 在指定脚本中搜索(前后 3 行上下文,适合大文件)
源码获取 get_script_source 获取指定脚本的代码
源码保存 save_script 将脚本保存到本地文件
脚本列表 list_scripts 列出页面加载的所有脚本
执行 JS evaluate_js / evaluate_js_handle 在页面执行任意 JS
加载前注入 add_init_script 页面加载前注入脚本(支持 persistent 跨导航重注入)
伪断点 set_breakpoint_via_hook 通过 Hook 设置伪断点(支持 persistent 持久化)
断点数据 get_breakpoint_data 获取伪断点捕获的数据
函数追踪 trace_function / get_trace_data 追踪函数调用(支持 persistent 跨导航持久化)
自定义 Hook hook_function 注入自定义 Hook(before/after/replace,支持 non_overridable 防覆盖)
预设 Hook inject_hook_preset 一键 Hook(xhr/fetch/crypto/websocket/debugger_bypass,默认持久化)
移除 Hook remove_hooks 移除所有 Hook(支持 keep_persistent 保留持久化 Hook)
冻结原型 freeze_prototype 冻结任意原型方法,防止页面 JS 覆盖 Hook
属性追踪 trace_property_access / get_property_access_log Proxy 级别属性访问追踪
JSVMP 插桩 hook_jsvmp_interpreter 一键插桩 JSVMP(Function.prototype.apply + 30+ 敏感属性)
JSVMP 日志 get_jsvmp_log 获取 JSVMP 日志(API 调用统计 + 属性读取摘要)
JSVMP 字符串 dump_jsvmp_strings 提取字符串数组,识别 API 名称,检测混淆模式
环境采集 compare_env 全面收集浏览器环境(navigator/screen/canvas/WebGL/Audio/timing)
网络捕获 start_network_capture / stop_network_capture 启停网络捕获(支持 capture_body 捕获响应体)
网络请求 list_network_requests 列出捕获的请求
请求详情 get_network_request 获取请求完整信息(含响应体)
请求来源 get_request_initiator 获取请求的 JS 调用栈(改进 URL 匹配 + 诊断信息)
请求拦截 intercept_request / stop_intercept 拦截/修改/Mock 请求
Cookie get_cookies / set_cookies / delete_cookies Cookie 管理
Storage get_storage / set_storage localStorage / sessionStorage
状态管理 export_state / import_state 保存/恢复浏览器状态
控制台 get_console_logs 读取控制台输出
指纹 get_fingerprint_info 检查浏览器指纹
反检测 check_detection 测试是否被反爬识别
反调试 bypass_debugger_trap 绕过 debugger 陷阱

场景化操作手册

场景 1:分析数据接口的加密参数

目标:找到接口中加密参数的生成逻辑

步骤 1:启动反检测浏览器
  [camoufox-reverse] launch_browser()

步骤 2:导航到目标页面
  [camoufox-reverse] navigate(url="https://target.com")

步骤 3:确认页面加载
  [camoufox-reverse] take_screenshot() → 确认页面正常

步骤 4:开始网络捕获
  [camoufox-reverse] start_network_capture()

步骤 5:触发数据请求(如翻页)
  [camoufox-reverse] click(selector=".next-page")
  或
  [camoufox-reverse] evaluate_js(expression="document.querySelector('.next').click()")

步骤 6:查看网络请求
  [camoufox-reverse] list_network_requests

步骤 7:获取目标请求详情
  [camoufox-reverse] get_network_request(request_id=N)
  → 记录 URL、Headers、Params、Response

步骤 8:获取请求调用栈(黄金路径)
  [camoufox-reverse] get_request_initiator(request_id=N)
  → 直接定位发起请求的 JS 函数

步骤 9:搜索加密参数
  [camoufox-reverse] search_code(keyword="参数名=")
  [camoufox-reverse] search_code(keyword="参数名")

步骤 10:读取相关源码
  [camoufox-reverse] get_script_source(script_url="包含加密逻辑的脚本URL")

步骤 11:设置伪断点验证
  [camoufox-reverse] set_breakpoint_via_hook(target_function="加密函数路径")
  触发请求 →
  [camoufox-reverse] get_breakpoint_data
  → 查看捕获的参数和返回值

目标:找到 Cookie 的生成逻辑

步骤 1:注入 Cookie Hook
  [camoufox-reverse] hook_function(
    function_path="Document.prototype.cookie",
    hook_code="console.log('[Cookie Set]', arguments[0]); console.trace('Cookie Stack');",
    position="before"
  )
  或使用预设 Hook:
  [camoufox-reverse] inject_hook_preset(preset="crypto")

步骤 2:刷新页面触发 Cookie 生成
  [camoufox-reverse] reload()

步骤 3:读取 Hook 输出
  [camoufox-reverse] get_console_logs
  → 找到 Cookie 设置记录和调用栈

步骤 4:根据调用栈定位生成函数
  [camoufox-reverse] search_code(keyword="目标函数名")
  [camoufox-reverse] get_script_source(script_url="...")

步骤 5:分析生成逻辑
  [camoufox-reverse] set_breakpoint_via_hook(target_function="cookie生成函数")
  刷新页面 →
  [camoufox-reverse] get_breakpoint_data → 查看入参和返回值
  [camoufox-reverse] trace_function(function_path="加密函数", log_args=true, log_return=true, log_stack=true)
  [camoufox-reverse] get_trace_data → 查看中间值

场景 3:混淆代码分析

目标:还原混淆的 JS 代码

步骤 1:列出所有脚本
  [camoufox-reverse] list_scripts
  → 找到可疑的混淆脚本(通常文件名无意义或体积很大)

步骤 2:保存混淆脚本到本地
  [camoufox-reverse] save_script(script_url="混淆脚本URL", save_path="./project/obfuscated.js")

步骤 3:搜索关键特征
  [camoufox-reverse] search_code(keyword="_0x")
  → 确认混淆类型(OB混淆)
  
  [camoufox-reverse] search_code(keyword="switch|while.*true")
  → 检查是否有控制流平坦化

步骤 4:在浏览器中还原字符串
  [camoufox-reverse] evaluate_js(expression="返回字符串数组的代码")
  → 获取解密后的字符串映射

步骤 5:定位关键函数
  [camoufox-reverse] search_code(keyword="encrypt|sign|md5|aes")
  → 找到加密相关代码的大致位置
  [camoufox-reverse] get_script_source → 获取上下文

场景 4:WASM 逆向

目标:分析 WASM 加密函数的输入输出

步骤 1:搜索 WASM 加载代码
  [camoufox-reverse] search_code(keyword="WebAssembly|.wasm|instantiate")

步骤 2:找到 WASM 文件
  [camoufox-reverse] list_network_requests
  → 找到 .wasm 文件的请求

步骤 3:分析 WASM 调用
  [camoufox-reverse] search_code(keyword="exports.|instance.exports")
  → 找到导出函数的调用代码

步骤 4:追踪输入输出
  [camoufox-reverse] set_breakpoint_via_hook(target_function="wasm导出函数调用路径")
  触发请求 →
  [camoufox-reverse] get_breakpoint_data → 查看入参和返回值

步骤 5:在浏览器中测试
  [camoufox-reverse] evaluate_js(expression="调用wasm函数并返回结果")
  → 验证 I/O 关系

场景 5:WebSocket 通信分析

目标:分析 WebSocket 消息格式和加密

步骤 1:注入 WebSocket Hook
  [camoufox-reverse] inject_hook_preset(preset="websocket")

步骤 2:读取 WS 消息日志
  [camoufox-reverse] get_console_logs
  → 获取 WS 发送/接收消息

步骤 3:搜索 WS 相关代码
  [camoufox-reverse] search_code(keyword="WebSocket|ws.send|onmessage")

步骤 4:手动发送 WS 消息
  [camoufox-reverse] evaluate_js(expression="ws.send(JSON.stringify({...}))")

高级技巧

使用 trace_function 自动记录函数调用

[camoufox-reverse] trace_function(
    function_path="window.encrypt",
    log_args=true,
    log_return=true,
    log_stack=true,
    max_captures=50,
    persistent=True          → 跨导航持久化,页面刷新/跳转后自动重注入
)

→ 每次 encrypt 被调用时自动记录参数、返回值和调用栈,不暂停执行 → get_trace_data 会自动合并页面数据和 Python 端持久化数据

使用 inject_hook_preset 一键 Hook

默认 persistent=True(持久化,跨导航自动重注入):

[camoufox-reverse] inject_hook_preset(preset="xhr")              → Hook 所有 XHR 请求
[camoufox-reverse] inject_hook_preset(preset="fetch")             → Hook 所有 fetch 请求
[camoufox-reverse] inject_hook_preset(preset="crypto")            → Hook btoa/atob/JSON.stringify
[camoufox-reverse] inject_hook_preset(preset="websocket")         → Hook WebSocket 消息
[camoufox-reverse] inject_hook_preset(preset="debugger_bypass")   → 绕过反调试

使用 hook_function 自定义 Hook

[camoufox-reverse] hook_function(
    function_path="XMLHttpRequest.prototype.open",
    hook_code="console.log('[XHR]', arguments[0], arguments[1])",
    position="before",
    non_overridable=True     → 防覆盖:Object.defineProperty 冻结 + toString 伪装 native code
)

→ 在 XHR.open 调用前输出请求方法和 URL,即使页面 JS 尝试覆盖也不会丢失

使用 freeze_prototype 防止 Hook 被覆盖

[camoufox-reverse] freeze_prototype(className="XMLHttpRequest", methodName="send")

→ 冻结原型方法(configurable:false + writable:false),防止 JSVMP 等覆盖你的 Hook

使用 JSVMP 专项工具

[camoufox-reverse] hook_jsvmp_interpreter        → 一键插桩 Function.prototype.apply + 30+ 敏感属性
[camoufox-reverse] dump_jsvmp_strings             → 提取字符串数组,识别 API 名称
  触发操作...
[camoufox-reverse] get_jsvmp_log                  → 获取 API 调用统计 + 属性读取摘要
[camoufox-reverse] compare_env                    → 收集完整浏览器环境(补环境基准线)

使用属性访问追踪

[camoufox-reverse] trace_property_access(target_expression="navigator")
  触发操作...
[camoufox-reverse] get_property_access_log        → 查看 navigator 的哪些属性被读取

→ 精确发现 JSVMP 或签名逻辑读取了哪些环境属性

使用 search_code_in_script 精确搜索大文件

[camoufox-reverse] search_code_in_script(script_id=3, keyword="sign|token|encrypt")

→ 在指定脚本中搜索,返回前后 3 行上下文,适合 200KB+ 的 JSVMP 文件

使用 add_init_script 进行预分析

[camoufox-reverse] add_init_script(script=`
    const knownGlobals = new Set(Object.keys(window));
    setInterval(() => {
        const newGlobals = Object.keys(window).filter(k => !knownGlobals.has(k));
        if (newGlobals.length > 0) {
            console.log('[Monitor] 新全局变量:', newGlobals);
            newGlobals.forEach(k => knownGlobals.add(k));
        }
    }, 1000);
`, persistent=True)         → 跨导航持久化

使用 evaluate_js 提取运行时数据

[camoufox-reverse] evaluate_js(expression=`
    JSON.stringify(document.cookie.split('; ').reduce((obj, pair) => {
        const [k, v] = pair.split('=');
        obj[k] = v;
        return obj;
    }, {}))
`)

使用 intercept_request 拦截/修改请求

[camoufox-reverse] intercept_request(url_pattern="**/api/data*", action="log")     → 仅记录
[camoufox-reverse] intercept_request(url_pattern="**/ads/*", action="block")       → 屏蔽广告
[camoufox-reverse] intercept_request(url_pattern="**/api/*", action="modify", modify_headers={"X-Custom": "test"})
[camoufox-reverse] intercept_request(url_pattern="**/api/*", action="mock", mock_response={"status": 200, "body": "{\"ok\":1}"})

camoufox-reverse MCP 工具分类总览(52 个)

类别 工具 说明
浏览器生命周期 launch_browser close_browser 启动/关闭 Camoufox
页面导航 navigate reload go_back 导航控制
页面交互 click type_text wait_for UI 自动化
页面状态 get_page_info take_screenshot take_snapshot get_page_html 页面信息
源码分析 list_scripts get_script_source search_code search_code_in_script save_script JS 逆向核心
JS 执行 evaluate_js evaluate_js_handle add_init_script 代码执行(支持持久化)
调试 set_breakpoint_via_hook get_breakpoint_data get_console_logs 伪断点调试(支持持久化)
Hook trace_function get_trace_data hook_function inject_hook_preset remove_hooks freeze_prototype 函数 Hook(支持持久化 + 防覆盖)
属性追踪 trace_property_access get_property_access_log Proxy 级别属性访问监控
JSVMP 专项 hook_jsvmp_interpreter get_jsvmp_log dump_jsvmp_strings compare_env JSVMP 虚拟机保护分析
网络 start_network_capture stop_network_capture list_network_requests get_network_request get_request_initiator intercept_request stop_intercept 网络分析(支持响应体捕获)
存储 get_cookies set_cookies delete_cookies get_storage set_storage export_state import_state 状态管理
反检测 get_fingerprint_info check_detection bypass_debugger_trap 指纹与反检测