如何使用 Charles 抓取手机的网络包?
1. 准备工作
- 手机:已经 Root 的手机,因为需要写入根证书
- Charles:免费30 天(过期只是限制使用时长而已,还算良心)
- WIFI:手机和电脑,要连接到同一局域网里
2. 电脑设置
开启代理功能
点击菜单栏:Proxy – Proxy Setting
- 设置静态代码端口 8888
- 可以勾上 Enable transparent HTTP proxying
正常情况下,除了一些不太重要的静态的资源外,一些比较重要、核心的数量包都使用了更为安全的 HTTPS,因为需要在 Charles 开启 SSL Proxying
点击菜单栏: Proxy – SSL Proxying Settings
- 勾选 Enable SSL Proxying
- 选择要抓包的一些域名(注意使用通配符),我这里设置 拼多多 的一些域名
这样还不行,因为现在手机正常都开启啊 SSL Pinnning
因为还需要一些小技巧,还解决这个问题,否则你抓到的 HTTPS 的包会都是 Unkown 的。
使用 Charles、Fiddler 等中间人网络代理工具时,网上的方法,大都是使用通过设备浏览器访问 http://chls.pro/ssl 安装证书
但这种证书只在“用户”层,启用“SSL 代理”会因证书不受信导致 https 抓包失败。
因此这里提供一些可行的方法。
电脑安装根证书
点击菜单栏上点击 Help – SSL Proxying ,安装根证书到电脑上
安装后,该根证书是不受信任的
可以设置一下始终信任
设置信任后,可以查看
手机安装根证书
先在 Charles 生成一个根证书保存到电脑上
导出证书并保存为扩展名“.pem”或“.cer”文件;
然后打开终端命令查看证书信息;
“.pem”文件使用:
openssl x509 -subject_hash_old -in cert.pem
“.cer”文件使用:
openssl x509 -subject_hash_old -in cert.cer -inform der
重命名“cert.pem”为“311f0693.0”(查看命令执行后第一行字符串+.0)
并将文件“311f0693.0”通过 Root 文件管理器 (若没有,可以在应用商店里搜索 Root Explorer )保存至 Android 设备目录“/system/etc/security/cacerts/”下;
3. 手机设置
先在 Charles 上点击菜单栏 Help – Local IP Address
查看到本机的局域网 ip 地上
然后打开手机里的 WIFI 设置,找到你正连接的 WIFI 网络(需要与电脑在同一局域网),在里面添加代理
- 代理服务器的 IP,即上面查看的 192.168.1.4
- 代理的服务器 Port,即之前设置的 8888
此时电脑上会立即弹出一个弹窗,提示你手机将连接到 Charles,不用管,直接点 Allow 允许。
4. 参考文章
- https://zhuanlan.zhihu.com/p/409343172
- https://www.crifan.org/client_ssl_handshake_failed_remote_host_closed_connection_during_handshake/
- https://blog.yii2.cc/mutual-tls-authentication/
- https://zhuanlan.zhihu.com/p/60392573