Charles抓包的使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/binbinqq86/article/details/80927917

转载请注明出处:https://blog.csdn.net/binbinqq86/article/details/80927917

前言

抓包工具有很多,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的服务器地址,那么是怎么进行抓包的呢?

  • 第一种是修改https通信代码,比如Android中我们需要实现X509TrustManager接口去自己做一套证书校验,但是并不通用。
  • 第二种就是将私有CA签发的数字证书安装到手机或电脑中,并作为受信任证书保存,我们的Charles抓包使用的就是这种方式了。

HTTP的抓包

听了原理相信你大致明白了一些,下面就开始安装我们的Charles,首先去官网下载,这里我的电脑是Mac,所以本文就以Mac为例说明。打开软件由于我们是试用版,会看到如下窗口:
这里写图片描述

不过这丝毫不影响我们使用,想要进行抓包,我们首先要把Charles设置为代理:
这里写图片描述
勾选这个系统代理即可,或者点击这里:

这里写图片描述
这里写图片描述
勾选如图,然后保存即可。
接下来点击Proxy/start Recording或者点击软件界面上的小圆点,抓包工具就开始工作了,你就可以看到经过整个Mac系统发出的请求:
这里写图片描述

注意,我们的Chrome浏览器也需要设置为系统代理,才能看到浏览器发出的请求。HTTP的抓包就这么简单,另外我们看到软件界面上左侧栏有两个TAB,一个是Structure,一个是Sequence,这两个是不同的视图,Sequence中我们可以方便的过滤我们自己想要抓包的网址,这样就不会有乱七八糟的干扰了。
这里写图片描述

HTTPS的抓包

HTTP的抓包很简单,那么我们看一下HTTPS:
这里写图片描述

可以看到,这里都是乱码,抓不到任何东西,都是加密过的,那么我们来对Charles和电脑来进行一些设置。
这里写图片描述

我们选择横线处的地方安装CA证书到我们的电脑,或者第二个横线处先保存然后再安装。
这里写图片描述

我们双击这个证书,选择始终信任:
这里写图片描述
这里写图片描述

然后选择Proxy/SSL Proxying Settings
这里写图片描述
增加我们要抓包的服务器地址,HTTPS端口默认443,不用填写也可以。再次进行抓包,可以看到如下效果,说明成功:
这里写图片描述

手机抓包

上面我们介绍的是在电脑上进行抓包,那么手机上如何进行呢,下面我以Android手机为例来进行说明(IOS也类似)。同样的我们需要将手机设置代理,

首先打开Charles的代理功能:
这里写图片描述

然后将Charles证书安装到移动设备:
这里写图片描述
Charles会提示你如何进行安装:
这里写图片描述

然后在手机上打开设置,找到我们的网络连接,设置代理如下:
这里写图片描述

然后在手机浏览器打开http://chls.pro/ssl来下载Charles证书,系统会提示你进行安装:
这里写图片描述

安装完成之后,在设置需要抓包的网址(步骤同上面浏览器抓包设置),然后就可以愉快的抓手机APP的包了。
这里写图片描述

参数修改

Charles支持参数的修改,包括请求参数和接收的服务器数据:

  • 修改请求参数:
    右键点击请求地址,选择compose
    这里写图片描述
    然后点击最下面的execute执行,我们可以看到请求结果只有一条数据了,而且请求参数也改变了:
    这里写图片描述

  • 修改服务器返回数据:
    打开Tools/Rewrite,添加我们要替换的内容如下:
    这里写图片描述

然后重新请求数据,我们可以看到:
这里写图片描述
标题已经被我们成功的替换掉了。

另外还可以通过断点的方式来调试接口的请求,当然修改参数和返回结果的时候手速要快,因为基本app和服务器都有请求超时时间。右键单击需要调试的地址,然后选择Breakpoints,或者Proxy/Breakpoints Settings:
这里写图片描述

在下面的图里面双击我们添加的地址,弹出上面的Edit Breakpoint窗口,然后进行编辑,Request勾选就代表修改请求参数,Response勾选就代表修改返回结果。下面我们来进行断点调试看看:
这里写图片描述

请求点时候把参数修改为1,点击Execute看一下返回结果:
这里写图片描述

然后我们再修改返回结果看看:
这里写图片描述
这里写图片描述
成功添加了“啊啊啊”三个字,由于手速原因,笔者想同时修改入参和返回结果,尝试了好多次还是来不及,估计超时时间太短了,只有几秒钟。。。

模拟网速

有时候手机需要模拟弱网的情况进行测试,这个时候Charles就派上用场了,点击Proxy/Throttle Settings,进行如下设置:
这里写图片描述
我们选择需要进行网速限制的地址,然后设置为自己想要的网速即可,下面是56kbps和没有限制的情况对比:
这里写图片描述
这里写图片描述

可以看出,还是非常明显的。到此Charles的基本使用就讲解完毕了,有疑问的同学可以在下方留言~

猜你喜欢

转载自blog.csdn.net/binbinqq86/article/details/80927917