Charles + Proxifier 抓包实战:从环境搭建到疑难解析

张开发
2026/4/20 9:20:25 15 分钟阅读

分享文章

Charles + Proxifier 抓包实战:从环境搭建到疑难解析
1. 环境准备搭建抓包基础设施搞开发的朋友们应该都遇到过这样的场景某个本地应用死活不走系统代理你想抓它的包就像追一只不按套路跑的野猫。这时候CharlesProxifier的组合就像专业驯猫师今天我就带你们从零开始搭建这个黄金搭档。先说说硬件要求其实普通开发机就够用。我实测在8GB内存的Windows 10机器上跑得很稳但建议给Charles分配至少2GB内存后面会教你怎么调。软件方面需要准备Charles 4.6以上版本新版对TLS 1.3支持更好Proxifier 3.42以上旧版可能有证书校验问题目标应用程序建议先用Chrome测试流程安装时有个细节容易翻车Charles默认监听8888端口但有些杀毒软件会占用这个端口。我建议安装时改成8889避免和常见服务冲突。装好后先别急着启动记得把Windows防火墙的入站规则打开不然待会儿连本地回环都抓不到包。2. 证书配置SSL抓包的生命线很多新手栽在证书这一关我见过有人折腾三天才发现是证书没装对。Charles的证书安装分两个层面系统级和应用级。系统级证书要让电脑信任Charles在Windows上得手动拖到受信任的根证书颁发机构千万别选错文件夹。有个坑是证书有效期默认只有7天可以在Charles的SSL Proxy Settings里改成365天。应用级证书更麻烦特别是那些用自定义证书存储的Java应用。我去年分析一个金融软件时发现它自带了一套证书机制。解决方案是在Proxifier里给这个exe单独设置规则绕过SSL拦截改用裸TCP抓包。具体操作是在Proxification Rules里添加规则Action选DirectApplications填你的exe路径。3. 代理联动Charles与Proxifier的默契配合核心配置就三步但每一步都有玄机Charles设置Proxy - Proxy Settings里勾选SOCKS proxy端口保持和安装时一致。有个隐藏技巧是在External Proxy Settings里勾上Web Proxy(HTTP)这样能抓到更多HTTP流量。Proxifier配置Proxy Servers添加127.0.0.1:8889协议选SOCKS5。这里90%的教程都错了他们让你选HTTP/HTTPS实测会报Proxy server cannot establish SSL connection错误。规则调优Proxification Rules必须把localhost和Charles的流量设为Direct否则会产生死亡循环。我建议把规则顺序调成第一条NameCharles, Applicationscharles.exe, ActionDirect第二条NameLocalhost, Target hosts127.0.0.1, ActionDirect第三条NameDefault, ActionProxy测试时先用浏览器访问http://www.baidu.com看到Charles里出现流量再试目标应用。如果应用没反应可能是它硬编码了代理设置这时候得用Process Monitor查它的网络行为。4. 疑难解析那些年我们踩过的坑坑点1无限循环代理症状是CPU飙高Charles疯狂刷日志。除了前面说的规则设置还要检查Windows的IE代理设置是否清空。我遇到过一次系统代理和Proxifier打架的情况解决方案是netsh winsock reset。坑点2TLS握手失败表现为抓到的HTTPS流量全是乱码。先确认Charles的SSL代理设置里包含目标域名再检查应用是否启用了证书固定。对于Electron应用得在启动参数加--ignore-certificate-errors。坑点3UDP流量丢失Proxifier默认不处理UDP对于视频类应用要在Advanced - DNS里启用Resolve hostnames through proxy。有个副作用是DNS查询会变慢建议在Rules里单独处理DNS请求。上周帮同事调试一个股票交易软件发现它用了自定义的二进制协议。常规方法抓不到包最后是用Raw标签页配合Wireshark才分析出来。这种特殊情况需要灵活组合工具别被标准流程限制住思路。5. 高阶技巧从抓包到分析能稳定抓包只是开始真正的价值在于分析。Charles有两个杀手锏功能Rewrite功能实时修改请求/响应。比如把某个API返回的JSON里的version字段改成2.0测试客户端兼容性。配置时要记得勾选Enable Rewrite和Unmatched requests pass through。Map Local功能把线上请求映射到本地文件。我常用这个来mock未完成的接口比如把/api/user映射到本地的user.json。路径里可以用正则表达式像^/api/(.*)匹配所有API。对于二进制协议可以用Hex View模式查看原始报文。有次分析游戏协议时发现前4字节是消息长度后面跟着protobuf数据用这个线索成功逆向出了通信格式。6. 性能调优让抓包更丝滑长时间抓包可能会遇到性能问题这里分享几个实战经验在Charles的Recording Settings里启用Throttling限制带宽到100KB/s避免被大数据量冲垮修改启动参数在charles.vmoptions里加上-Xmx2048m分配更多内存关闭不需要的视图像Chart和Sequence视图特别吃资源定期清理会话我习惯每抓1GB数据就File - New Session有个反直觉的技巧在Proxy - Recording Settings里排除图片/css/js等静态资源反而能提升抓包效率。毕竟我们通常更关注API流量没必要为这些资源消耗性能。7. 安全注意事项抓包虽好可不要违法哦。有几点必须注意不要在生产环境抓敏感数据我都是在隔离的测试环境操作抓包结束后立即关闭Proxifier避免隐私泄露定期清理Charles日志建议配置自动删除7天前的记录分析完立即卸载测试证书防止被恶意利用去年审计一个金融APP时发现它居然用HTTP传身份证照片。这种重大漏洞要及时上报千万别自己留存敏感数据。技术是把双刃剑用对地方才能创造价值。

更多文章