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 常见加解密场景
- Web前端加密:HTML+JS实现的加密逻辑
- 小程序加密:运行在微信环境中的加密机制
- APP加密:原生应用中的加密实现
- 反爬机制:防止自动化请求的加密手段
2.2 加解密分析技术演进
-
初期阶段:
- 搜索关键词:encrypt、特殊请求头、json.stringify等
- 使用断点调试分析
- 结合mitmproxy和Burp Suite进行请求替换
-
进阶阶段:
- 使用DevTools进行深度调试
- 堆栈分析定位关键加密点
- 条件断点技术应用
-
高级阶段:
- CDP协议自动化调试
- RPC技术应用
- V8引擎Hook技术
3. 小程序加解密分析技术
3.1 微信小程序调试工具
- Wechat-open-devtools:通过Python脚本打开微信开发者工具
python main.py -all - 使用前需退出微信并删除
WeChatAppEx.exe的RadiumWMPF目录
3.2 小程序调试技巧
-
堆栈分析法:
- 从请求出发溯源到对应JS文件
- 适用于混淆代码和高端产品(如瑞数)分析
-
条件断点技术:
- 右键断点可编辑表达式
- 可执行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 基本工作流程
- 启用CDP监听(
cdp.js) - Python启动调试Web并连接CDP
- 定位加密位置并设置断点
- 调用CDP注册接口
- 调用加密/解密接口
- 通过中间代理完成数据填充
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 优势分析
- 高效性:熟练情况下10分钟内完成加解密分析
- 准确性:直接调用原JS加密函数,避免逆向误差
- 通用性:不依赖具体加密方式,适用于各种编码
- 可扩展性:可结合AI快速编写中间代理脚本
6. 高级应用:瑞数反爬解决方案
6.1 传统解决方案
- 补环境法:模拟浏览器环境获取cookie
- 需要完整逆向JS逻辑
- 工作量大且易受小更新影响
6.2 CDP解决方案
- 通过CDP直接使用真实浏览器环境
- 获取动态生成的cookie等认证信息
- 实现自动化请求构造
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 推荐工具
- WeChatOpenDevTools-Python:微信小程序调试工具
https://github.com/JaveleyQAQ/WeChatOpenDevTools-Python - Frida脚本:APP加解密Hook
https://github.com/F6JO/mPaas-frida-hook - CDP_test:CDP协议加解密示例
https://github.com/Nstkm001/CDP_test
7.2 学习资源
- V8调试原理:
https://ivanfan.site/2022/07/16/v8/v8-inspector%20%E8%B0%83%E8%AF%95/ - 瑞数反爬分析:
https://blog.csdn.net/qq_40759445/article/details/136503498
8. 总结与最佳实践
8.1 技术选型建议
- Web前端:优先使用CDP协议直接调试
- 微信小程序:结合DevTools和条件断点
- APP应用:使用Frida RPC技术
- 复杂反爬:CDP+真实浏览器环境
8.2 效率优化技巧
- 快速定位加密点:从网络请求反向追踪
- 使用AI辅助编写中间代理脚本
- 建立常用加解密模式库
- 开发自动化测试工作流
8.3 注意事项
- 微信版本更新可能导致工具失效
- CDP协议需要浏览器支持远程调试
- 部分环境可能存在法律合规风险
- 复杂混淆代码需要结合多种技术分析