本教程演示在Mac OS Monterey 12.2.1
版本的操作系统上,使用的Charles的版本是1.9.56
,模拟器为网易MuMu模拟器,版本号4.6.2
。
Charles的设置
相关软件的安装此处不再展开描述,正常来说,安装Charles和MuMu模拟器(大家也可以选用自己熟悉的模拟器)的过程是比较顺利的,如果安装过程遇到困难,可以自行搜索错误信息解决。软件安装好之后,打开Charles,并依次选择Proxy -> macOS Proxy
,这时Charles就会监听电脑的所有网络请求,用浏览器随便访问几个网站,会看到如下图所示的界面。
区域①显示了不同的请求地址的数据包,点击区域②的按钮可用于清除区域①的内容,点击区域③的按钮可用于控制开始抓包和暂停抓包,点击区域④的按钮可用于开始和暂停SSL代理。
我们注意到,区域①中的每一个网址都是被折叠起来了,随便展开某个网址,然后点击其中的某条数据(也就是一次网络请求),可以在右部看到这个请求的详细信息,如下图所示。
在上图中我们好像看到了一个不太友好的标志,在https://csdning.cn
这个域名下的三个网络请求都是一个红色的❌,后面跟着<unknown>
。这时如果用浏览器访问csdn的官网的话,正常情况下是访问不了的,它会提示你连接是不安全的,这是因为Charles默认只能代理http
类型的请求,而对csdn的访问是https
类型的,因此这种访问会被禁止。
上述问题的解决方案是安装CA证书。在Charles中,依次点击Help -> SSL Proxying -> Install Charles Root Certificate
,如下图所示。
现在我们可以在Certificates
中看到Charles代理,默认它是不被信任的,如下图所示。
双击Charles的证书,会弹出一个新的窗口,将这个窗口Trust
下的所有选项都设为Always Trust
,如下图所示。
证书设置完毕之后,再确认一下自己的代理设置是否正确。依次点击Proxy -> Proxy Settings
,然后设置代理的端口,默认为8888
(需要保证这个端口没有被其它应用程序占用),并且勾选Support HTTP/2
和Enable transparent HTTP proxying
选项,如下图所示。
通过上面的设置,Charles应该已经可以抓到http
请求的数据包了,但如果想要抓取https
的数据包,还需要进一步的设置。依次选择Proxy -> SSL Proxying Settings
,在弹出的窗口中勾选Enable SSL Proxying
选项,并在Include
中添加要抓取哪些Host
和Port
的网络请求,如果不是百分百的确定,可以将这两项都设置为*
,表示抓取所有的数据流,如下图所示。
现在我们回到Charles的主界面中,为了美观起见,先点一下区域②的清除按钮,将之前抓到的包都清除一下。然后再用浏览器访问csdn官网,如果之前都配置正确的话,此时就已经可以正常访问了,Charles抓到的包如下图所示。
如果抓取某个地址的数据流有问题,那么可以通过Notes
选项卡来查看提示信息。假如我没有进行SSL Proxying Settings
这一步,那么浏览器可以正常上网,但是Chales却不能正常抓取数据包。比如访问https://www.baidu.com
,会发现抓取到的数据名称为<unknown>
,在Overview
选项卡中有Notes
信息,当然也可以点击单独的Notes
选项卡来查看相关信息,如下图所示。
在Notes
给出的信息中,已经很明确的告诉我们了,对当前访问的host,SSL代理不可用,你可以在代理设置中激活SSL代理,并且设置需要走代理的host。
模拟器的设置
到目前为止,Charles已经可以在电脑上抓包了,但我们的最终目的是抓取手机APP上的数据包,因此还需要继续设置。在模拟器中安装Android操作系统时需要注意,因为安卓7.0之后对第三方证书增加了限制,会导致证书不起作用,因此需要安装6.0及以下版本的操作系统。我用于本教程演示的是6.0版本的安卓系统。
回到Charles中,依次选择Help -> SSL Proxying -> Install Charles Root Certiticate on a Mobile Device or Remote Browser
,会弹出一个窗口,根据上面的提示信息,去模拟器中做相应的操作。
首先在模拟器中设置代理,依次点击设置 -> WLAN
,然后长按网络名称,会弹出一个窗口,选择此窗口中的修改网络
,如下图所示。
将代理方式设置为手动,代理服务器主机名和端口设置为之前提示信息中显示的114.212.22.215
和8888
,如下图所示。
保存之后,打开模拟器中的浏览器,访问chls.pro/ssl
,此时会在Charles中弹出一个提示窗,询问你是否允许连接,点击Allow。
如果一切设置正常,现在模拟器中的浏览器会下载安全证书。打开下载的证书,并且给它起个名字,然后点击确定即可完成证书的安装。此时可能会让你设置锁屏密码,按照提示设置即可。
效果演示
证书安装成功之后,在模拟器的浏览器中看看能不能打开百度首页,如果可以,那么所有的配置就都完成了,如果不可以,那么需要再回到之前的步骤中找原因。
现在在模拟器中的所有网络请求都能被Charles捕获。首先点一下扫把形状的清除按钮,然后在模拟器的浏览器中访问bilibili.com
,在Charles中可以捕获到此过程的数据流。
到此为止,已经实现了手机APP的抓包操作。关于Charles界面右部的这几个选项卡,即Overview
,Contents
,Summary
,Chart
,Notes
等的使用,大家可以从网络上搜索其它资料做更进一步的学习。