跳到主要内容

Charles抓包App的HTTPS请求并解决SSL Pinning

· 阅读需 4 分钟

随着移动互联网的普及,App也变得泛滥。不过,App没有像电脑浏览器那样方便的开发者工具,这不利于我们去分析网络请求,进而编写爬虫之类的东西。不过,这个问题也并非没法解决,可以利用中间人攻击的方式,由电脑代理来自手机的流量,这样就可以获取到手机的网络请求了。

设置代理

首先,手机与电脑需连接同一网络,然后在手机WiFi的高级选项里设置代理为手动,并填写主机名为电脑的IP地址,端口为8888(Charles的默认值)。

屏幕快照 2020-06-14 16.00.59.png

然后,在 系统偏好设置-网络 里,设置代理,勾选网页代理和安全网页代理,代理服务器填 127.0.0.1,端口号为8888。

屏幕快照 2020-06-14 16.14.27.png

在Charles的代理设置中可以设置端口号,勾选HTTP透明代理。在Charles的SSL代理设置中,启用SSL代理,并添加一个Include:*:443

屏幕快照 2020-06-14 16.56.45.png

添加证书

在Charles的Help>SSL proxying菜单,可以安装证书。如果要抓取电脑上的HTTPS请求,选择“Install Charles Root Certificate”,这会打开钥匙串访问,选择Charles Proxy CA证书,双击打开,展开“信任”,选择始终信任。

屏幕快照 2020-06-14 16.24.41.png

如果想抓取手机上的HTTPS请求,选择“Install Charles Root Certificate on a Mobile Device or Remote Brower”,然后打开手机的浏览器,访问chls.pro/ssl下载证书,然后安装这个证书(一般在手机设置里的安全里)。

通过上面的方式就可以实现在电脑上获取手机上的HTTPS请求了。

SSL pinnig

不少App使用了SSL pinning,也就是证书锁定,即App将证书内置于App内,这样就不会使用Charles证书,导致无法查看到HTTPS的明文数据。为此,可以使用Xposed框架的JustTrustMe模块。

首先,确保手机已root。因为这里我使用了MuMu模拟器,直接在设置里勾选“开启ROOT权限”即可。然后,在手机的设置的关于里,查看系统的版本,比如我使用的MuMu模拟器的安卓版本为6.0。然后下载安装Xposed Installer,到Xposed Installer | Xposed Module Repository下载Xposed Installer,由于我的安卓版本高于4.4,所以到[OFFICIAL] Xposed for Lollipop/Marshmallow/Nougat/Oreo [v90-beta3, 2018/01/29]下载。

安装好Xposed Installer后,打开,在这个App的首页即可下载安装Xposed框架。

屏幕快照 2020-06-14 17.02.09.png

最后,到Releases · Fuzion24/JustTrustMe下载JustTrustMe模块,然后安装,再打开Xposed Installer,在模块里启用JustTrustMe模块。

上面这些做完后,就可以使用Charles去抓包App的HTTPS请求,即使使用了SSL pinning。

参考链接

前言 · app抓包利器:Charles