爬虫实战:从数据到产品
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3 抓包分析工具

1.Charles

Charles 是一款跨平台的抓包软件,它本质上是一款代理软件,当应用将流量转发到Charles时,它能够对数据包进行拦截、分析以及修改,从而达到分析网络流量的目的。它能够支持任何允许设置网络代理的软件,支持的代理类型包括 HTTP 代理、HTTPS代理、Socks5代理。

在浏览器上设置Charles和普通的代理设置并无差异,在此不再赘述。在移动端配置时,由于Android的某些应用会忽略系统的全局代理,所以Charles无法获得流量。这时候就要借助 Postern 这款软件进行流量的转发。Postern 会模拟出一个 VPN来拦截系统的所有流量,并转发到Charles中。Postern可以自定义规则,选择性地将流量转发到Charles中,从而过滤一些无用的信息。

Charles还提供了编辑请求、生成curl命令等非常实用的功能,在后面的例子中将会介绍。

需要注意的是,Android 7及iOS的系统中引入了SSL Pinning技术,因此无法抓取到一些HTTPS的请求。SSL Pinning会检查客户端的证书是否和服务端的证书相匹配,如果不匹配则断开连接。由于Charles属于代理软件,可以认为是中间人攻击软件,因此解密SSL时需要安装Charles的证书才能解密在Android 7之前的版本,手机上安装了Charles的证书后,客户端验证证书链时认为证书是匹配的,从而可以建立连接。

绕过SSL Pinning的方法有:

●使用Android 7以下版本的手机,这是最为简单有效的方案。

●破解 Android 7 以上的手机并进行 root,安装 Xposed 框架,然后安装JustTrustMe进行破解;或者对root过的手机使用Frida结合Universal Android SSL Pinning Bypass with Frida脚本。

2.Packet Capture

Packet Capture是Android系统上一款好用的抓包软件,它无须对手机进行root,即可方便地查看流量的细节,因为它可以模拟成一个VPN对应用程序的请求进行抓包。与Charles相比,Packet Capture有以下不同:

●只能在手机上抓取、查看,处理起来不是很方便。常用来做快速抓包,或判定请求的类型和参数等。

●不能修改网络的流量。

●能够针对特定的APP进行流量拦截,这样可以减少一些软件的后台通信对抓包的干扰。

●以VPN的形式提供服务,可以抓取设置代理后无法工作的软件。

3.mitmproxy

mitmproxy 是用 Python 和 C 开发的一款中间人代理软件。与 Charles 类似,mitmproxy 可在终端下运行,并且可以用来拦截、修改、重放和保存 HTTP/HTTPS请求。与Charles不同的是,mitmproxy可以利用Python脚本进行定制化的操作。通常来讲,我们会用Charles进行一系列分析,在需要拦截、修改、保存请求时再使用mitmproxy工具及其脚本。