Charles移动端抓包实战指南:从入门到精通HTTPS流量解析

13 阅读7分钟

Charles移动端抓包实战指南:从入门到精通HTTPS流量解析

1. Charles与移动端抓包简介

Charles是一款基于代理的 网络抓包工具,支持 HTTP/HTTPS、WebSocket等协议,能实时拦截、查看、修改请求与响应。在移动开发领域,Charles已成为 调试和分析网络请求 的不可或缺工具,特别适用于移动App和微信小程序的调试工作。

此外,Sniffmaster 作为一款全平台抓包工具,支持HTTPS、TCP和UDP协议,可在iOS/Android/Mac/Windows设备上实现无需代理、越狱或root的抓包操作,提供免费的强大代理抓包功能,为开发者提供了更多便捷选择。

Charles在Stack Overflow 2023开发者调查中以72.8%的占有率位居榜首,然而约68%的用户仅使用其基础功能,未能发挥其完整潜力。本文将全面介绍Charles在移动端抓包中的应用,从基础配置到高级技巧,帮助开发者充分利用这一强大工具。

2. Charles核心工作原理

2.1 代理服务架构

Charles作为 中间人代理(MITM)运行,包含三个核心组件:

  • 拦截层:监听8888端口(默认)所有流量
  • 解析引擎:支持HTTP/1.x、HTTP/2、WebSocket协议
  • 存储系统:采用增量存储技术,平均节省45%内存

Charles作为中间人代理拦截和处理网络请求

2.2 HTTPS解密机制

Charles通过 中间人攻击(MITM)技术解密HTTPS流量,这需要在设备和Charles之间建立SSL连接,以及Charles和服务器之间建立另一个SSL连接。这一过程需要安装和信任Charles的根证书,以便Charles能够解密和重新加密HTTPS流量。

3. 环境准备与基础配置

3.1 安装Charles

从Charles官网(www.charlesproxy.com)下载适合操作系统的版本。安装完成后,将Charles拖入Applications文件夹即可使用。

3.2 基础代理配置

  1. 打开Charles → 菜单栏 → Proxy → Proxy Settings
  2. 在"HTTP Proxy"选项卡中,勾选"Enable transparent HTTP proxying"
  3. 设置端口(默认为8888)
  4. 点击OK保存设置

3.3 电脑端证书配置

为解密HTTPS流量,需要安装并信任Charles的根证书:

  1. 打开Charles → Help → SSL Proxying → Install Charles Root Certificate
  2. 在钥匙串访问中找到Charles Proxy CA证书
  3. 右键 → 显示简介 → "信任"设置为「始终信任」
  4. 输入密码后完成配置
  5. 重启Charles生效

4. 移动端抓包配置实战

4.1 手机代理配置

要抓取移动端流量,需要确保 手机和电脑在同一Wi-Fi网络 下,并配置手机代理:

  1. 查看电脑IP地址:在Charles中点击Help → Local IP Address
  2. 在手机Wi-Fi设置中,配置代理服务器为电脑IP,端口设置为8888

4.2 移动端证书安装

iOS设备 证书安装步骤:

  1. 使用Safari浏览器访问:chls.pro/ssl 或 http://<你的Mac IP>:8888
  2. 跳转描述文件安装界面 → 安装Charles证书
  3. 打开设置 → 通用 → 关于本机 → 证书信任设置 → 启用「Charles Proxy CA」

Android设备 证书安装注意事项:

  • Android 7.0以上系统默认不再信任用户安装的证书
  • 需要将Charles证书加入系统证书存储,这通常需要root设备
  • 或者修改应用代码,在AndroidManifest中添加networkSecurityConfig配置

4.3 启用HTTPS解密

仅安装证书不能解密HTTPS,需要手动指定要解密的域名:

  1. Charles菜单栏 → Proxy → SSL Proxying Settings…
  2. 点击Add
  3. 填入Host(域名或通配符)和Port

示例配置:

HostPort*.weixin.qq.com443*.taobao.com443*.alipay.com443api.xxx.com443

5. Charles高级功能实战

5.1 断点调试

Charles的 断点功能 允许拦截和修改请求/响应:

  1. 在感兴趣的请求上右键,选择Breakpoints
  2. 刷新应用或重新触发请求
  3. 请求将在Charles中暂停,允许修改请求参数或响应数据
  4. 使用Execute按钮继续请求

请求中断

响应中断

发起请求

Charles断点检查

修改请求参数

发送修改后请求

接收响应

Charles断点检查

修改响应数据

返回修改后响应

应用接收响应

5.2 弱网模拟

Charles的 Throttling功能 可以模拟各种网络环境:

  1. 菜单栏 → Proxy → Throttle Settings
  2. 勾选"Enable Throttling"
  3. 选择预设网络条件(如3G、4G)或自定义带宽、延迟和可靠性
  4. 可以配置Only for selected hosts,只对特定域名限速

弱网模拟参数包括:

  • 带宽:决定数据传输速率
  • 往返延迟:网络往返延迟(ms)
  • 可靠性:模拟不稳定的网络
  • MTU:设置数据包大小

5.3 请求重写与映射

Charles提供多种 请求操作 功能:

  • Map Local:将远程资源映射到本地文件,用于测试修改后的资源
  • Map Remote:将请求重定向到另一个远程地址
  • Rewrite:实时修改请求和响应中的特定内容
  • Black List:阻止特定请求,返回403或直接丢弃

5.4 重复请求与压力测试

Charles可以 重复发送请求,用于性能测试和调试:

  1. 右键选择请求
  2. 选择Repeat(单次重复)或Repeat Advanced(高级重复)
  3. 在Repeat Advanced中可以设置重复次数和并发数

6. 高级场景与故障排除

6.1 处理SSL Pinning

许多大型App(如微信、支付宝、抖音)启用 SSL Pinning(证书锁定),即使安装了Charles证书,也无法解密流量。

解决方案

  • 使用Android模拟器 + 低版本应用进行抓包
  • 使用Frida + SSL Pinning Bypass脚本
  • 对于小程序调试,使用微信开发者工具代替抓包调试

对于启用SSL Pinning的应用,Sniffmaster 的HTTPS暴力抓包功能可以无需代理直接解密HTTPS流量,支持指定APP过滤和双向验证爆破,提供了另一种有效的解决方案。

6.2 Android高版本抓包问题

Android 7.0以上系统 默认不再信任用户安装的证书,解决方案包括:

  1. 修改应用代码,在AndroidManifest中添加networkSecurityConfig配置
  2. Root设备,将Charles证书加入系统证书存储
  3. 使用模拟器(如Genymotion)

6.3 常见问题与解决方案

问题解决方案抓不到HTTPS内容检查是否添加域名到SSL Proxying Settings手机访问不了证书地址尝试http://:8888,确认Charles正在运行并手机代理正确App请求依然加密不可见可能该App启用了SSL PinningCharles无法弹出设备确认框检查Mac防火墙设置,关闭防火墙或允许Charles网络访问

7. 实战案例:分析春雨医生APP

以下是一个使用Charles分析"春雨医生"APP接口的实际案例:

  1. 整体接口预览:在模拟器中打开春雨医生APP,电脑端打开Charles,在APP中加载各个页面
  2. 接口识别:查找包含关键数据接口,如"找医生"功能
  3. 接口分析:复制接口到浏览器中直接访问,分析参数和响应
  4. 接口跟踪:使用Focus功能专注于特定域名(api.chunyuyisheng.com)的请求
  5. 断点测试:添加断点修改响应数据,测试不同数据下的应用行为

通过这一流程,可以全面了解APP的网络请求结构,为后续开发和调试提供依据。

8. 总结与最佳实践

Charles是移动端开发中 不可或缺的调试工具,熟练掌握Charles可以极大提高开发效率。以下是一些最佳实践建议:

  1. 组织结构化会话:使用Session功能组织不同项目的抓包数据
  2. 使用过滤功能:通过Filter功能聚焦关键请求,避免信息过载
  3. 保存常用配置:将常用的SSL Proxying和Throttling配置保存为预设
  4. 结合其他工具:对于启用SSL Pinning的应用,结合Frida等工具进行调试
  5. 尊重隐私和法律:仅对自己拥有或有权测试的应用进行抓包分析

随着应用安全性的提高,抓包技术面临更多挑战,但Charles作为网络调试利器的地位仍然不可替代。通过掌握Charles的高级功能和解决常见问题的方法,开发者可以更高效地进行移动应用调试和优化。

提示:Charles是付费软件,但提供免费试用期。定期更新Charles以获取最新功能和安全修复。对于生产环境,谨慎使用抓包功能,避免性能和安全问题。