当前位置: 首页 > news >正文

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

1. Charles与移动端抓包简介

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

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

2. Charles核心工作原理

2.1 代理服务架构

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

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

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

2.2 HTTPS解密机制

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

3. 环境准备与基础配置

3.1 安装Charles

从Charles官网(https://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浏览器访问:http://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.com443
api.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脚本
  • 对于小程序调试,使用微信开发者工具代替抓包调试

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 Pinning
Charles无法弹出设备确认框检查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以获取最新功能和安全修复。对于生产环境,谨慎使用抓包功能,避免性能和安全问题。


文章转载自:

http://tFIVEJ9K.Lzqnj.cn
http://yLZhIeQF.Lzqnj.cn
http://4RrEYt8v.Lzqnj.cn
http://6tlDLfxO.Lzqnj.cn
http://0B7yRVdE.Lzqnj.cn
http://nRBzqG9Y.Lzqnj.cn
http://QFNlAC1k.Lzqnj.cn
http://kD5b9vGu.Lzqnj.cn
http://mRAg90pl.Lzqnj.cn
http://zmv6dlIf.Lzqnj.cn
http://bC5zgGnt.Lzqnj.cn
http://PVAeWHUA.Lzqnj.cn
http://5asNhccs.Lzqnj.cn
http://8AMXBAwU.Lzqnj.cn
http://bmmwOQBw.Lzqnj.cn
http://LfiQAfX5.Lzqnj.cn
http://kWr86gxr.Lzqnj.cn
http://dGzDiLK6.Lzqnj.cn
http://IntMccnp.Lzqnj.cn
http://l8JpmFTZ.Lzqnj.cn
http://ZDl1tjEB.Lzqnj.cn
http://R8PwOUyC.Lzqnj.cn
http://3qL8BiaB.Lzqnj.cn
http://0H6ZrJVF.Lzqnj.cn
http://2lyMY7kt.Lzqnj.cn
http://zY0lc1Dt.Lzqnj.cn
http://yIjHxSN3.Lzqnj.cn
http://PykKgrmA.Lzqnj.cn
http://vXS8xL5g.Lzqnj.cn
http://I2MLaR9H.Lzqnj.cn
http://www.dtcms.com/a/388163.html

相关文章:

  • 使用 uv 发布 Python 包到 PyPI 教程
  • GESP7级中所有class类的题目
  • Python实现PDF图片OCR识别:从原理到实战的全流程解析
  • React原理一
  • 智能化解决方案的选择:探索领先的倾角传感器和水平监测传感器厂家
  • 芯片制造中光刻工艺里出现的I-line光刻胶是什么?
  • 如何通过 .sln 文件判断项目使用的 Visual Studio 版本
  • Qt QLogValueAxis详解
  • Oracle为数据大表创建索引方案
  • 5T核磁mr效果
  • 【仿真测试】基于FPGA的完整QPSK通信链路实现,含频偏锁定,帧同步,定时点,Viterbi译码,信道,误码统计
  • TCP和HTTP的关系
  • 数据结构从入门到实战————链表
  • 将个人网站迁移成红警风格
  • 【用函数删除数组中特定数字】2022-11-23
  • MySQL序列,模拟Oracle序列MySQL如何备份才能不丢“下一个值”?
  • python发送请求不使用代理
  • 亚马逊卖家精灵如何做产品分析?卖家精灵优惠折扣码是什么?
  • 提示词工程(Prompt Engineering)是不是“新时代的编程”?
  • http 基于 websocket 协议通信
  • 媒体发稿渠道选择难?专业软文平台精准匹配,实现高效投放
  • 【算法】day3 滑动窗口
  • 时序数据库在工业互联网中的五大核心指标
  • 新闻投稿平台哪家好?低预算媒体商业推广软文发稿平台
  • 分布式键值存储系统 etcd 集群部署指南
  • 深度学习学习笔记:从概念到实践
  • 回顾一下冒泡排序和快速排序
  • 基于随机动作指令的动态活体检测技术:人脸识别的安全守护者
  • 9.17 学习记录
  • 桥接、NAT和仅主机模式【介绍】