如何使用 Charles 抓取手机的网络包?

作者: 王炳明 分类: 工具库 发布时间: 2022-10-08 21:52 热度:448

1. 准备工作

  • 手机:已经 Root 的手机,因为需要写入根证书
  • Charles:免费30 天(过期只是限制使用时长而已,还算良心)
  • WIFI:手机和电脑,要连接到同一局域网里

2. 电脑设置

开启代理功能

点击菜单栏:Proxy – Proxy Setting

  • 设置静态代码端口 8888
  • 可以勾上 Enable transparent HTTP proxying

如何使用 Charles 抓取手机的网络包?

正常情况下,除了一些不太重要的静态的资源外,一些比较重要、核心的数量包都使用了更为安全的 HTTPS,因为需要在 Charles 开启 SSL Proxying

点击菜单栏: Proxy – SSL Proxying Settings

  • 勾选 Enable SSL Proxying
  • 选择要抓包的一些域名(注意使用通配符),我这里设置 拼多多 的一些域名

如何使用 Charles 抓取手机的网络包?

这样还不行,因为现在手机正常都开启啊 SSL Pinnning

因为还需要一些小技巧,还解决这个问题,否则你抓到的 HTTPS 的包会都是 Unkown 的。

使用 Charles、Fiddler 等中间人网络代理工具时,网上的方法,大都是使用通过设备浏览器访问 http://chls.pro/ssl 安装证书

但这种证书只在“用户”层,启用“SSL 代理”会因证书不受信导致 https 抓包失败。

因此这里提供一些可行的方法。

电脑安装根证书

点击菜单栏上点击 Help – SSL Proxying ,安装根证书到电脑上

如何使用 Charles 抓取手机的网络包?

安装后,该根证书是不受信任的

如何使用 Charles 抓取手机的网络包?

可以设置一下始终信任

如何使用 Charles 抓取手机的网络包?

设置信任后,可以查看

如何使用 Charles 抓取手机的网络包?

手机安装根证书

先在 Charles 生成一个根证书保存到电脑上

如何使用 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)

如何使用 Charles 抓取手机的网络包?

并将文件“311f0693.0”通过 Root 文件管理器 (若没有,可以在应用商店里搜索 Root Explorer )保存至 Android 设备目录“/system/etc/security/cacerts/”下;

如何使用 Charles 抓取手机的网络包?

3. 手机设置

先在 Charles 上点击菜单栏 Help – Local IP Address

如何使用 Charles 抓取手机的网络包?

查看到本机的局域网 ip 地上

如何使用 Charles 抓取手机的网络包?

然后打开手机里的 WIFI 设置,找到你正连接的 WIFI 网络(需要与电脑在同一局域网),在里面添加代理

  • 代理服务器的 IP,即上面查看的 192.168.1.4
  • 代理的服务器 Port,即之前设置的 8888

如何使用 Charles 抓取手机的网络包?

此时电脑上会立即弹出一个弹窗,提示你手机将连接到 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

文章有帮助,请作者喝杯咖啡?

发表评论