抓包工具有很多,Windows上都是使用Fiddler,但其实Fiddler同时也支持Mac,Linux版本,官网下载地址如下:https://www.telerik.com/download/fiddler。
而Mac上大家常用的就是瓷瓶子Charles,它也是全平台支持的,官网下载地址如下:http://www.charlesproxy.com/download/。不过Charles是收费的,但是如果你不付费,每次可以使用三十分钟,然后软件自动退出,每次回到软件界面会有10秒的delay模态窗口提示,相对来说,这个算是非常友好的了,不怎么影响我们使用。今天我们就来讲解一下Charles的简单使用:
想要了解其中原理,首先需要知道HTTPS相关知识,还不了解的同学可以参考我的上一篇文章:https://blog.csdn.net/binbinqq86/article/details/80939838。整个抓包的过程,Charles充当的就是中间人的角色。Charles本身是一个代理工具,如果只是普通的HTTP请求,因为数据本身没有经过再次加密,因此作为代理可以知道所有客户端到服务器的请求内容和服务器返回给客户端的数据内容。而HTTPS由于对传输和数据进行了加密,所以Charles作为中间代理,就需要对客户端伪装成服务器,对服务器伪装成客户端。
客户端一般会对服务器的CA证书做检验(这里我们忽略双向校验的情况),一般浏览器或者手机都内置了很多CA根证书,而大部分网站都是这些知名CA机构颁发的证书,所以我们访问的时候系统帮我们自动校验了证书的合法性,但是比如12306以及我们的Charles证书,系统是默认不信任的,会导致无法访问HTTPS的服务器地址,那么是怎么进行抓包的呢?
听了原理相信你大致明白了一些,下面就开始安装我们的Charles,首先去官网下载,这里我的电脑是Mac,所以本文就以Mac为例说明。打开软件由于我们是试用版,会看到如下窗口:
不过这丝毫不影响我们使用,想要进行抓包,我们首先要把Charles设置为代理:
勾选这个系统代理即可,或者点击这里:
勾选如图,然后保存即可。
接下来点击Proxy/start Recording或者点击软件界面上的小圆点,抓包工具就开始工作了,你就可以看到经过整个Mac系统发出的请求:
注意,我们的Chrome浏览器也需要设置为系统代理,才能看到浏览器发出的请求。HTTP的抓包就这么简单,另外我们看到软件界面上左侧栏有两个TAB,一个是Structure,一个是Sequence,这两个是不同的视图,Sequence中我们可以方便的过滤我们自己想要抓包的网址,这样就不会有乱七八糟的干扰了。
可以看到,这里都是乱码,抓不到任何东西,都是加密过的,那么我们来对Charles和电脑来进行一些设置。
我们选择横线处的地方安装CA证书到我们的电脑,或者第二个横线处先保存然后再安装。
然后选择Proxy/SSL Proxying Settings
增加我们要抓包的服务器地址,HTTPS端口默认443,不用填写也可以。再次进行抓包,可以看到如下效果,说明成功:
上面我们介绍的是在电脑上进行抓包,那么手机上如何进行呢,下面我以Android手机为例来进行说明(IOS也类似)。同样的我们需要将手机设置代理,
然后将Charles证书安装到移动设备:
Charles会提示你如何进行安装:
然后在手机浏览器打开http://chls.pro/ssl来下载Charles证书,系统会提示你进行安装:
安装完成之后,在设置需要抓包的网址(步骤同上面浏览器抓包设置),然后就可以愉快的抓手机APP的包了。
Charles支持参数的修改,包括请求参数和接收的服务器数据:
然后重新请求数据,我们可以看到:
标题已经被我们成功的替换掉了。
另外还可以通过断点的方式来调试接口的请求,当然修改参数和返回结果的时候手速要快,因为基本app和服务器都有请求超时时间。右键单击需要调试的地址,然后选择Breakpoints,或者Proxy/Breakpoints Settings:
在下面的图里面双击我们添加的地址,弹出上面的Edit Breakpoint窗口,然后进行编辑,Request勾选就代表修改请求参数,Response勾选就代表修改返回结果。下面我们来进行断点调试看看:
请求点时候把参数修改为1,点击Execute看一下返回结果:
然后我们再修改返回结果看看:
成功添加了“啊啊啊”三个字,由于手速原因,笔者想同时修改入参和返回结果,尝试了好多次还是来不及,估计超时时间太短了,只有几秒钟。。。
有时候手机需要模拟弱网的情况进行测试,这个时候Charles就派上用场了,点击Proxy/Throttle Settings,进行如下设置:
我们选择需要进行网速限制的地址,然后设置为自己想要的网速即可,下面是56kbps和没有限制的情况对比:
可以看出,还是非常明显的。到此Charles的基本使用就讲解完毕了,有疑问的同学可以在下方留言~