文章目录
- 1.安装
-
- [🧰 准备工作](#🧰 准备工作)
- [🔧 步骤详解](#🔧 步骤详解)
-
- [一、配置 Charles Proxy](#一、配置 Charles Proxy)
-
- [1. 设置监听端口](#1. 设置监听端口)
- [2. 启用 SSL 代理](#2. 启用 SSL 代理)
- [3. 安装 Charles 根证书(用于解密 HTTPS)](#3. 安装 Charles 根证书(用于解密 HTTPS))
- [二、配置 Proxifier](#二、配置 Proxifier)
-
- [1. 添加 Charles 作为代理服务器](#1. 添加 Charles 作为代理服务器)
- [2. 创建规则,指定目标软件走代理](#2. 创建规则,指定目标软件走代理)
- [3. (可选)禁用其他规则](#3. (可选)禁用其他规则)
- 三、开始抓包
- [🔍 常见问题排查](#🔍 常见问题排查)
- [✅ 补充建议](#✅ 补充建议)
- 2.实现原理:
要在 Windows 系统中使用 Charles + Proxifier 对特定软件(尤其是不支持手动设置代理的程序)进行 HTTPS 抓包 ,可以按照以下步骤操作。该方法适用于抓取桌面应用程序(如 Electron 应用、游戏客户端、某些桌面工具等)发出的 HTTPS 请求。
1.安装
🧰 准备工作
-
安装 Charles Proxy
- 官网:https://www.charlesproxy.com/
- 安装并启动 Charles。
-
安装 Proxifier
- 官网:https://www.proxifier.com/
- 安装并启动 Proxifier。
-
确保目标软件尚未运行(避免漏抓初始请求)。
🔧 步骤详解
一、配置 Charles Proxy
1. 设置监听端口
- 打开 Charles →
Proxy→Proxy Settings - 确保 HTTP 代理端口为(默认)
8888,勾选Enable transparent HTTP proxying
2. 启用 SSL 代理
-
Proxy→SSL Proxying Settings -
勾选
Enable SSL Proxying -
在
Locations中添加:Host: * Port: 443(或指定具体域名,如
api.example.com:443)
3. 安装 Charles 根证书(用于解密 HTTPS)
Help→SSL Proxying→Install Charles Root Certificate- 安装到 "受信任的根证书颁发机构"
- 如果抓包的是其他用户或系统服务,还需在 本地计算机 的证书存储中安装(通过 certlm.msc)
💡 注意:Windows 10/11 可能需要管理员权限安装证书,并重启浏览器/应用。
二、配置 Proxifier
Proxifier 的作用是强制指定程序的所有网络流量(包括 HTTPS)走 Charles 代理。
1. 添加 Charles 作为代理服务器
- 打开 Proxifier →
Profile→Proxy Servers - 点击
Add- Address:
127.0.0.1 - Port:
8888 - Protocol:
HTTPS
- Address:
2. 创建规则,指定目标软件走代理
Profile→Proxification Rules- 点击
Add新建规则:- Name : 如
TargetApp via Charles - Applications : 点击
Browse,选择你要抓包的.exe文件(如C:\Program Files\App\app.exe) - Action : 选择刚创建的代理(
127.0.0.1:8888 HTTP) - Enabled: 勾选
- Name : 如
⚠️ 确保该规则优先级高于默认直连规则(可拖动调整顺序)。
3. (可选)禁用其他规则
- 暂时禁用
Default规则,或确保你的规则在它之上,避免流量绕过。
三、开始抓包
- 启动 Charles(保持运行)
- 启动 Proxifier(保持运行)
- 启动你要抓包的 目标软件
- 在 Charles 中查看请求:
- HTTP 请求直接显示
- HTTPS 请求如果 SSL Proxying 配置正确,会显示明文内容
- 如果看到
CONNECT但内容是加密的,说明证书未正确安装或域名未加入 SSL Proxying 列表
🔍 常见问题排查
| 问题 | 解决方案 |
|---|---|
HTTPS 显示乱码或 <encrypted> |
1. 确认证书已安装到"受信任的根证书颁发机构" 2. 确保域名在 SSL Proxying Locations 中(建议用 *:443) |
| 软件无法联网 | 1. 检查 Proxifier 规则是否匹配正确 .exe 2. 检查防火墙/杀毒软件是否拦截 3. 尝试在 Proxifier 中开启日志(View → Log)看是否成功代理 |
| 抓不到某些请求 | 有些程序使用 自定义 TLS 实现(如 Go、Rust 编译的程序)可能忽略系统证书,需额外手段(如 DLL 注入、Frida 等) |
| Charles 提示 "SSL Proxying not enabled for this host" | 在 SSL Proxying Settings 中添加对应 host:port |
✅ 补充建议
- 抓包前清空 Charles(
Edit → Clear) - 使用 Proxifier 的 Log 功能确认流量是否经过代理
- 对于 UWP 应用(如 Microsoft Store 安装的软件),Proxifier 可能无法捕获,需改用 Fiddler + Loopback Exemption 或 WinDivert + 自定义工具
如你能提供具体软件名称(如微信 PC 版、某游戏客户端等),我可以给出更针对性的配置建议。
2.实现原理:
Charles 和 Proxifier 是两个常被搭配使用的网络调试工具,它们在抓包(尤其是对不支持手动设置代理的桌面软件)时各司其职、互补协作。下面从 各自职责 和 底层原理 两个层面详细解释:
一、各自职责(分工)
工具 主要职责
Charles Proxy HTTP/HTTPS 代理服务器 + 流量解析器
• 监听本地端口(如 8888)
• 接收客户端发来的 HTTP/HTTPS 请求
• 解密 HTTPS(通过中间人攻击 MITM)
• 展示明文请求/响应内容(Header、Body、Cookies 等)
Proxifier 强制流量重定向器(强制代理)
• 拦截指定进程的所有 TCP/UDP 出站连接
• 将原本直连的流量强制转发到 Charles 的代理端口
• 让"不支持代理设置"的程序也能走代理
✅ 简单说:
Proxifier 负责"把流量送进 Charles",Charles 负责"看懂并展示流量内容"。
二、工作原理详解
-
Charles 的原理:HTTP 代理 + TLS 中间人(MITM)
(1)作为 HTTP 代理
默认监听 127.0.0.1:8888
客户端(如浏览器)配置代理后,所有 HTTP 请求会先发给 Charles:
http
GET http://example.com/api HTTP/1.1
Host: example.com
Charles 再以自己身份向目标服务器发起真实请求,返回结果给客户端。
(2)处理 HTTPS:CONNECT 隧道 + 伪造证书
客户端想访问 https://api.example.com,会先发:
http
CONNECT api.example.com:443 HTTP/1.1
Charles 收到后建立 TCP 隧道,并动态生成一张伪造的证书(由 Charles 根证书签发)
如果客户端信任 Charles 根证书,就会认为这是合法证书,继续通信
Charles 于是能同时解密客户端 ↔ Charles 和 Charles ↔ 服务器 的流量 → 实现 HTTPS 明文抓包
🔐 关键前提:客户端必须信任 Charles 的根证书,否则会报证书错误。
-
Proxifier 的原理:Windows 网络层 Hook + 强制代理
(1)驱动级网络拦截
Proxifier 安装一个 NDIS Intermediate Driver 或使用 Winsock LSP / WFP(Windows Filtering Platform)
能在系统内核层捕获所有进程的出站 TCP/UDP 连接
即使程序没调用 WinHTTP、没读注册表代理设置,也能被拦截
(2)强制重定向到代理
当检测到 satellite.exe 尝试连接 api.elegoo.com:443
Proxifier 不直接连接目标,而是:
-
建立到 127.0.0.1:8888(Charles)的连接
-
发送 CONNECT api.elegoo.com:443 HTTP/1.1
-
将后续所有原始 TCP 数据流透传给 Charles
🔄 效果:对目标程序来说,它以为自己在直连服务器;实际上所有流量都经过了 Charles。
(3)规则匹配机制
基于:进程路径、目标 IP/域名、端口等
只有匹配规则的流量才被代理,其他流量可直连(Default 规则)
三、完整数据流(以抓取 Elegoo Satellite 为例)
mermaid
sequenceDiagram
participant App as Elegoo Satellite.exe
participant Proxifier
participant Charles
participant Server as api.elegoo.com
App->>Proxifier: 尝试连接 api.elegoo.com:443 (TCP)
Proxifier->>Charles: 建立连接到 127.0.0.1:8888
Proxifier->>Charles: 发送 "CONNECT api.elegoo.com:443"
Charles->>Server: 建立真实 TLS 连接
Charles-->>Proxifier: 返回 "HTTP/1.1 200 Connection Established"
Proxifier-->>App: 通知连接成功(透明)
App->>Proxifier: 发送加密 TLS 数据
Proxifier->>Charles: 转发 TLS 数据
Charles->>Charles: 用私钥解密 → 得到明文 HTTP
Charles->>Charles: 记录请求内容(Header/Body)
Charles->>Server: 转发或修改请求
Server-->>Charles: 返回响应
Charles-->>Proxifier: 转发响应(可能已解密)
Proxifier-->>App: 返回响应
💡 注意:只有 Charles 能看到明文 HTTP 内容,Proxifier 只看到原始 TCP 流(加密的 TLS)。
四、为什么需要两者配合?
场景 单独 Charles 单独 Proxifier Charles + Proxifier
浏览器抓包 ✅ 支持(可设代理) ❌ 无解析能力 ✅(但没必要)
普通 .NET/Java 应用 ⚠️ 可能支持系统代理 ❌ 无内容解析 ✅
不支持代理的 C++/Go/Electron 应用 ❌ 流量不经过 Charles ❌ 只能看 IP/端口 ✅ 唯一可行方案
🎯 核心价值:让"无法配置代理"的程序也能被 Charles 抓包。
五、局限性与注意事项
-
仅支持 TCP(HTTP/HTTPS)
Proxifier 对 UDP、ICMP、WebSocket(非 HTTP Upgrade)支持有限。
-
HTTPS 抓包依赖证书信任
若目标程序使用 证书绑定(Certificate Pinning),即使安装 Charles 证书也无法解密。
-
UWP 应用可能无法拦截
Windows Store 应用受沙盒限制,需额外开启 loopback 权限。
-
性能开销
所有流量经两次中转(App → Proxifier → Charles → Internet),延迟略增。
总结
工具 角色 技术原理
Charles 内容解析者 HTTP 代理 + TLS MITM(伪造证书)
Proxifier 流量引导者 系统级网络 Hook + 强制 CONNECT 转发
✅ 组合效果:
"看不见代理设置的程序" → 被 Proxifier 强制引流 → Charles 当作普通浏览器一样解析其 HTTPS 流量 → 开发者看到完整明文请求!
这种组合是逆向工程、API 分析、客户端调试的标准利器。