巧用Chrome-CDP远程调用Debug突破JS逆向
字数 1097 2025-08-22 12:23:42

巧用Chrome CDP远程调用Debug突破JS逆向 - 教学文档

1. CDP (Chrome DevTools Protocol) 基础

1.1 什么是CDP

  • Chrome DevTools Protocol (CDP) 是Chrome浏览器提供的远程调试协议
  • 允许开发者通过HTTP/WebSocket接口与浏览器实例交互
  • 提供对DOM、网络、性能、JavaScript调试等功能的控制

1.2 CDP核心功能

  • DOM操作:获取、修改页面DOM结构
  • 网络监控:拦截、修改网络请求
  • JavaScript调试:断点设置、变量查看、调用栈追踪
  • 执行环境控制:注入JS代码、修改执行上下文

2. 远程调试配置

2.1 启动Chrome调试模式

chrome.exe --remote-debugging-port=9222 --user-data-dir=remote-profile
  • --remote-debugging-port:指定调试端口
  • --user-data-dir:指定用户数据目录(避免影响主配置)

2.2 获取调试目标

访问 http://localhost:9222/json 获取可调试页面列表

{
  "description": "",
  "devtoolsFrontendUrl": "/devtools/inspector.html?ws=localhost:9222/devtools/page/FA7FAB6A4B789E8B3A4C5D6E7F8A9B0",
  "id": "FA7FAB6A4B789E8B3A4C5D6E7F8A9B0",
  "title": "Example Page",
  "type": "page",
  "url": "https://example.com",
  "webSocketDebuggerUrl": "ws://localhost:9222/devtools/page/FA7FAB6A4B789E8B3A4C5D6E7F8A9B0"
}

3. CDP在JS逆向中的应用

3.1 绕过反调试

  • 方法1:通过CDP覆盖调试检测函数
Page.addScriptToEvaluateOnNewDocument({
  source: `
    window.console.debug = () => {};
    Object.defineProperty(window, 'debugger', {get: () => {}});
  `
});
  • 方法2:禁用断点触发
Debugger.setSkipAllPauses({ skip: true });

3.2 动态Hook函数

Debugger.setBreakpointByUrl({
  lineNumber: 123,
  url: "https://example.com/script.js"
});

Debugger.pauseOnAsyncCall({
  parentStackTraceId: "..."
});

3.3 内存数据提取

Runtime.evaluate({
  expression: "window.sensitiveData",
  returnByValue: true
});

4. 实战案例:突破加密参数

4.1 定位加密函数

Debugger.searchInContent({
  scriptId: "...",
  query: "encrypt"
});

4.2 设置断点并提取参数

Debugger.setBreakpoint({
  location: {
    scriptId: "...",
    lineNumber: 456
  }
});

Debugger.on("paused", (event) => {
  const callFrames = event.callFrames;
  const localScope = callFrames[0].scopeChain[0];
  
  Runtime.getProperties({
    objectId: localScope.object.objectId
  }).then((result) => {
    console.log("Local variables:", result);
  });
});

4.3 修改函数行为

Runtime.evaluate({
  expression: `
    window.originalEncrypt = window.targetFunction;
    window.targetFunction = function(params) {
      console.log("Intercepted params:", params);
      return window.originalEncrypt(params);
    }
  `
});

5. 高级技巧

5.1 网络请求拦截

Network.setRequestInterception({
  patterns: [{
    urlPattern: "*",
    resourceType: "XHR",
    interceptionStage: "HeadersReceived"
  }]
});

Network.on("requestIntercepted", (event) => {
  Network.getResponseBodyForInterception({
    interceptionId: event.interceptionId
  }).then((response) => {
    console.log("Intercepted response:", response);
  });
});

5.2 DOM事件监听

DOMDebugger.setInstrumentationBreakpoint({
  eventName: "click"
});

DOMDebugger.on("instrumentationBreakpoint", (event) => {
  console.log("DOM event intercepted:", event);
});

5.3 性能分析

Profiler.start();
// 执行操作...
Profiler.stop().then((profile) => {
  console.log("CPU profile:", profile);
});

6. 安全注意事项

  1. 仅用于授权测试:确保有合法权限
  2. 避免生产环境使用:调试模式会降低安全性
  3. 清理痕迹:测试完成后关闭调试会话
  4. 遵守法律法规:仅用于合法逆向工程目的

7. 工具推荐

  1. chrome-remote-interface:Node.js CDP客户端库
  2. Puppeteer:高级CDP封装
  3. Playwright:多浏览器自动化工具
  4. Selenium with CDP:结合Selenium使用CDP功能

8. 常见问题解决

8.1 连接被拒绝

  • 检查Chrome是否以调试模式启动
  • 验证端口是否正确
  • 确保没有防火墙阻止连接

8.2 断点不生效

  • 确认脚本已加载
  • 检查行号是否正确
  • 尝试使用Debugger.setBreakpointByUrl

8.3 数据获取失败

  • 确保在正确上下文中执行
  • 检查跨域限制
  • 尝试使用Runtime.evaluatecontextId参数

这份文档涵盖了CDP在JS逆向中的核心应用,从基础配置到高级技巧,重点突出了实际逆向工程中的关键技术和解决方案。如需更详细案例,可参考原文档提供的PDF版本。

巧用Chrome CDP远程调用Debug突破JS逆向 - 教学文档 1. CDP (Chrome DevTools Protocol) 基础 1.1 什么是CDP Chrome DevTools Protocol (CDP) 是Chrome浏览器提供的远程调试协议 允许开发者通过HTTP/WebSocket接口与浏览器实例交互 提供对DOM、网络、性能、JavaScript调试等功能的控制 1.2 CDP核心功能 DOM操作 :获取、修改页面DOM结构 网络监控 :拦截、修改网络请求 JavaScript调试 :断点设置、变量查看、调用栈追踪 执行环境控制 :注入JS代码、修改执行上下文 2. 远程调试配置 2.1 启动Chrome调试模式 --remote-debugging-port :指定调试端口 --user-data-dir :指定用户数据目录(避免影响主配置) 2.2 获取调试目标 访问 http://localhost:9222/json 获取可调试页面列表 3. CDP在JS逆向中的应用 3.1 绕过反调试 方法1 :通过CDP覆盖调试检测函数 方法2 :禁用断点触发 3.2 动态Hook函数 3.3 内存数据提取 4. 实战案例:突破加密参数 4.1 定位加密函数 4.2 设置断点并提取参数 4.3 修改函数行为 5. 高级技巧 5.1 网络请求拦截 5.2 DOM事件监听 5.3 性能分析 6. 安全注意事项 仅用于授权测试 :确保有合法权限 避免生产环境使用 :调试模式会降低安全性 清理痕迹 :测试完成后关闭调试会话 遵守法律法规 :仅用于合法逆向工程目的 7. 工具推荐 chrome-remote-interface :Node.js CDP客户端库 Puppeteer :高级CDP封装 Playwright :多浏览器自动化工具 Selenium with CDP :结合Selenium使用CDP功能 8. 常见问题解决 8.1 连接被拒绝 检查Chrome是否以调试模式启动 验证端口是否正确 确保没有防火墙阻止连接 8.2 断点不生效 确认脚本已加载 检查行号是否正确 尝试使用 Debugger.setBreakpointByUrl 8.3 数据获取失败 确保在正确上下文中执行 检查跨域限制 尝试使用 Runtime.evaluate 的 contextId 参数 这份文档涵盖了CDP在JS逆向中的核心应用,从基础配置到高级技巧,重点突出了实际逆向工程中的关键技术和解决方案。如需更详细案例,可参考原文档提供的PDF版本。