使用 Charles 对 Android 微信进行抓包

in 技术 with 0 comment

写在前面

最近要做一些测试,需要对微信抓包。但是当我像往常一样打开 Charles 代理,在手机上安装证书后,微信上的数据却什么都抓不到,包括微信内置浏览器打开的任何网页,因此怀疑是微信在搞鬼。

网上搜索了一番之后得出:

  1. Android 7.0 以下,微信版本任意,都会信任系统提供的证书
  2. Android 7.0 及以上,微信 7.0 以下,微信会信任系统提供的证书
  3. Android 7.0 及以上,微信 7.0 以上,微信只信任它自己配置的证书列表

因为微信的旧版本可能会出现无法登录的情况,而且我的手机是 Android 10,因此我选择的是「方案 1」,即使用 Android 7.0 及以下版本系统,配合微信的最新版。

由于手头没有 Android 7.0 及以下版本的测试机,所以我使用的是 网易 MuMu 这款 Android 模拟器(正好是 Android 6.0,符合「方案 1」)。不过由于出现过使用模拟器登录微信被封号的案例,请自行评估风险后尝试!

Charles 设置

Charles 是一款用 Java 写的跨平台抓包软件,挺好用的,现在无论是 Windows 还是 macOS 上我都是用这个(Fiddler 被我抛弃了 😂),这里就不多做介绍了。

首先打开 Charles,在菜单中打开 Proxy -> Proxy Settings

这里我们设置 HTTP代理。我这里设置端口号为 8888,并勾选 Enable transparent HTTP proxying

任何设置需要抓取的范围,在 Charles 菜单中点击 Proxy -> SSL Proxying Settings

点击 Add 添加,Host 中输入 * 表示匹配所有主机,HTTPS 协议默认端口 443,最后保存即可。

最后我们还要将 Charles 自签的根证书安装到系统中,否则会提示不安全,而无法抓包。

同样在 Charles 菜单 Help -> SSL Proxying -> Insatll Charles Root Certificate

macOS 的话不要忘了在钥匙串中将这个证书设为“始终信任”,否则依然无法使用。

在手机端设置

保证手机与电脑在同一个局域网下,拿出我们一开始的 MuMu 模拟器,在无线网络配置中设置代理,IP 就是 Charles 所在电脑的内网 IP,端口是我们刚刚设置的 8888

还是一样,我们还需要安装 Charles 自签的证书,浏览器访问 https://www.charlesproxy.com/getssl 即可下载以安装证书,如果不能下载证书说明上面的代理没有设置好。

开始抓包吧

好啦,这样就设置好了 Charles 抓包的基本步骤,需要注意的是,在我的使用过程中流量通过 Charles 转发会变得非常慢,因此建议在微信登录后再接入 Charles 代理。

Responses