Cdp协议深度应用Web渗透加解密
字数 1707 2025-08-29 08:29:42

CDP协议在Web渗透测试中的深度应用与加解密技术

1. CDP协议基础与应用概述

Chrome DevTools Protocol (CDP)是Chrome浏览器提供的调试协议,允许开发者通过程序化的方式与浏览器交互,实现调试、监控和修改网页行为的功能。

1.1 CDP协议核心特点

  • 基于WebSocket通信
  • 提供完整的浏览器调试功能
  • 支持JavaScript执行环境控制
  • 能够拦截和修改网络请求
  • 支持DOM操作和事件模拟

1.2 在渗透测试中的应用场景

  • Web应用加解密分析
  • 反爬机制绕过
  • 动态内容调试
  • 混淆代码解析
  • 自动化测试脚本开发

2. Web渗透中的加解密技术

2.1 常见加解密场景

  1. Web前端加密:HTML+JS实现的加密逻辑
  2. 小程序加密:运行在微信环境中的加密机制
  3. APP加密:原生应用中的加密实现
  4. 反爬机制:防止自动化请求的加密手段

2.2 加解密分析技术演进

  1. 初期阶段

    • 搜索关键词:encrypt、特殊请求头、json.stringify等
    • 使用断点调试分析
    • 结合mitmproxy和Burp Suite进行请求替换
  2. 进阶阶段

    • 使用DevTools进行深度调试
    • 堆栈分析定位关键加密点
    • 条件断点技术应用
  3. 高级阶段

    • CDP协议自动化调试
    • RPC技术应用
    • V8引擎Hook技术

3. 小程序加解密分析技术

3.1 微信小程序调试工具

  • Wechat-open-devtools:通过Python脚本打开微信开发者工具
    python main.py -all
    
  • 使用前需退出微信并删除WeChatAppEx.exeRadiumWMPF目录

3.2 小程序调试技巧

  1. 堆栈分析法

    • 从请求出发溯源到对应JS文件
    • 适用于混淆代码和高端产品(如瑞数)分析
  2. 条件断点技术

    • 右键断点可编辑表达式
    • 可执行JS代码进行运行时修改
    • 应用场景:
      • 替换明文数据
      • 绕过never debugger
      • 动态修改函数行为

4. APP加解密分析技术

4.1 RPC技术应用

  • 基本原理:将加密前的数据转发至中转服务器,修改后返回源程序
  • 典型案例:支付宝mPaas框架Hook
    // 示例Frida Hook脚本
    Java.perform(function() {
      var targetClass = "com.alipay.mobile.common.transport.http.HttpUrlHeader";
      var methodName = "getHeaders";
      var hookClass = Java.use(targetClass);
      hookClass[methodName].overload().implementation = function() {
        var result = this[methodName]();
        send(result); // 发送到中转服务器
        return modifyResult(result); // 返回修改后的结果
      };
    });
    

4.2 V8引擎Hook技术

  • 微信小程序基于V8引擎运行
  • V8-inspector注入:尝试恢复被阉割的调试功能
  • 关键函数dispatchProtocolMessage - CDP协议消息分发函数

5. CDP协议在加解密中的实战应用

5.1 基本工作流程

  1. 启用CDP监听(cdp.js)
  2. Python启动调试Web并连接CDP
  3. 定位加密位置并设置断点
  4. 调用CDP注册接口
  5. 调用加密/解密接口
  6. 通过中间代理完成数据填充

5.2 高效脚本实现

# CDP_test示例代码
import websockets
import asyncio
import json

async def cdp_client():
    async with websockets.connect('ws://localhost:9222/devtools/page/XXX') as ws:
        # 设置断点
        await ws.send(json.dumps({
            "id": 1,
            "method": "Debugger.setBreakpointByUrl",
            "params": {
                "lineNumber": 123,
                "url": "https://target.com/encrypt.js"
            }
        }))
        
        # 执行加密函数
        await ws.send(json.dumps({
            "id": 2,
            "method": "Runtime.evaluate",
            "params": {
                "expression": "window.encrypt('testdata')",
                "returnByValue": True
            }
        }))
        
        response = await ws.recv()
        print(json.loads(response))

5.3 优势分析

  1. 高效性:熟练情况下10分钟内完成加解密分析
  2. 准确性:直接调用原JS加密函数,避免逆向误差
  3. 通用性:不依赖具体加密方式,适用于各种编码
  4. 可扩展性:可结合AI快速编写中间代理脚本

6. 高级应用:瑞数反爬解决方案

6.1 传统解决方案

  • 补环境法:模拟浏览器环境获取cookie
  • 需要完整逆向JS逻辑
  • 工作量大且易受小更新影响

6.2 CDP解决方案

  1. 通过CDP直接使用真实浏览器环境
  2. 获取动态生成的cookie等认证信息
  3. 实现自动化请求构造
async def bypass_rs():
    async with websockets.connect('ws://localhost:9222/devtools/page/XXX') as ws:
        # 获取cookie
        await ws.send(json.dumps({
            "id": 1,
            "method": "Network.getAllCookies"
        }))
        cookies = await ws.recv()
        
        # 执行生成动态参数的JS
        await ws.send(json.dumps({
            "id": 2,
            "method": "Runtime.evaluate",
            "params": {
                "expression": "window.generateDynamicParam()",
                "returnByValue": True
            }
        }))
        dynamic_param = await ws.recv()
        
        return construct_request(cookies, dynamic_param)

7. 工具与资源

7.1 推荐工具

  1. WeChatOpenDevTools-Python:微信小程序调试工具
    https://github.com/JaveleyQAQ/WeChatOpenDevTools-Python
    
  2. Frida脚本:APP加解密Hook
    https://github.com/F6JO/mPaas-frida-hook
    
  3. CDP_test:CDP协议加解密示例
    https://github.com/Nstkm001/CDP_test
    

7.2 学习资源

  1. V8调试原理:
    https://ivanfan.site/2022/07/16/v8/v8-inspector%20%E8%B0%83%E8%AF%95/
    
  2. 瑞数反爬分析:
    https://blog.csdn.net/qq_40759445/article/details/136503498
    

8. 总结与最佳实践

8.1 技术选型建议

  1. Web前端:优先使用CDP协议直接调试
  2. 微信小程序:结合DevTools和条件断点
  3. APP应用:使用Frida RPC技术
  4. 复杂反爬:CDP+真实浏览器环境

8.2 效率优化技巧

  1. 快速定位加密点:从网络请求反向追踪
  2. 使用AI辅助编写中间代理脚本
  3. 建立常用加解密模式库
  4. 开发自动化测试工作流

8.3 注意事项

  1. 微信版本更新可能导致工具失效
  2. CDP协议需要浏览器支持远程调试
  3. 部分环境可能存在法律合规风险
  4. 复杂混淆代码需要结合多种技术分析
CDP协议在Web渗透测试中的深度应用与加解密技术 1. CDP协议基础与应用概述 Chrome DevTools Protocol (CDP)是Chrome浏览器提供的调试协议,允许开发者通过程序化的方式与浏览器交互,实现调试、监控和修改网页行为的功能。 1.1 CDP协议核心特点 基于WebSocket通信 提供完整的浏览器调试功能 支持JavaScript执行环境控制 能够拦截和修改网络请求 支持DOM操作和事件模拟 1.2 在渗透测试中的应用场景 Web应用加解密分析 反爬机制绕过 动态内容调试 混淆代码解析 自动化测试脚本开发 2. Web渗透中的加解密技术 2.1 常见加解密场景 Web前端加密 :HTML+JS实现的加密逻辑 小程序加密 :运行在微信环境中的加密机制 APP加密 :原生应用中的加密实现 反爬机制 :防止自动化请求的加密手段 2.2 加解密分析技术演进 初期阶段 : 搜索关键词:encrypt、特殊请求头、json.stringify等 使用断点调试分析 结合mitmproxy和Burp Suite进行请求替换 进阶阶段 : 使用DevTools进行深度调试 堆栈分析定位关键加密点 条件断点技术应用 高级阶段 : CDP协议自动化调试 RPC技术应用 V8引擎Hook技术 3. 小程序加解密分析技术 3.1 微信小程序调试工具 Wechat-open-devtools :通过Python脚本打开微信开发者工具 使用前需退出微信并删除 WeChatAppEx.exe 的 RadiumWMPF 目录 3.2 小程序调试技巧 堆栈分析法 : 从请求出发溯源到对应JS文件 适用于混淆代码和高端产品(如瑞数)分析 条件断点技术 : 右键断点可编辑表达式 可执行JS代码进行运行时修改 应用场景: 替换明文数据 绕过never debugger 动态修改函数行为 4. APP加解密分析技术 4.1 RPC技术应用 基本原理 :将加密前的数据转发至中转服务器,修改后返回源程序 典型案例 :支付宝mPaas框架Hook 4.2 V8引擎Hook技术 微信小程序基于V8引擎运行 V8-inspector注入 :尝试恢复被阉割的调试功能 关键函数 : dispatchProtocolMessage - CDP协议消息分发函数 5. CDP协议在加解密中的实战应用 5.1 基本工作流程 启用CDP监听( cdp.js ) Python启动调试Web并连接CDP 定位加密位置并设置断点 调用CDP注册接口 调用加密/解密接口 通过中间代理完成数据填充 5.2 高效脚本实现 5.3 优势分析 高效性 :熟练情况下10分钟内完成加解密分析 准确性 :直接调用原JS加密函数,避免逆向误差 通用性 :不依赖具体加密方式,适用于各种编码 可扩展性 :可结合AI快速编写中间代理脚本 6. 高级应用:瑞数反爬解决方案 6.1 传统解决方案 补环境法 :模拟浏览器环境获取cookie 需要完整逆向JS逻辑 工作量大且易受小更新影响 6.2 CDP解决方案 通过CDP直接使用真实浏览器环境 获取动态生成的cookie等认证信息 实现自动化请求构造 7. 工具与资源 7.1 推荐工具 WeChatOpenDevTools-Python :微信小程序调试工具 Frida脚本 :APP加解密Hook CDP_ test :CDP协议加解密示例 7.2 学习资源 V8调试原理: 瑞数反爬分析: 8. 总结与最佳实践 8.1 技术选型建议 Web前端 :优先使用CDP协议直接调试 微信小程序 :结合DevTools和条件断点 APP应用 :使用Frida RPC技术 复杂反爬 :CDP+真实浏览器环境 8.2 效率优化技巧 快速定位加密点:从网络请求反向追踪 使用AI辅助编写中间代理脚本 建立常用加解密模式库 开发自动化测试工作流 8.3 注意事项 微信版本更新可能导致工具失效 CDP协议需要浏览器支持远程调试 部分环境可能存在法律合规风险 复杂混淆代码需要结合多种技术分析