Charles抓包App的HTTPS请求并解决SSL Pinning
随着移动互联网的普及,App也变得泛滥。不过,App没有像电脑浏览器那样方便的开发者工具,这不利于我们去分析网络请求,进而编写爬虫之类的东西。不过,这个问题也并非没法解决,可以利用中间人攻击的方式,由电脑代理来自手机的流量,这样就可以获取到手机的网络请求了。
设置代理
首先,手机与电脑需连接同一网络,然后在手机WiFi的高级选项里设置代理为手动,并填写主机名为电脑的IP地址,端口为8888(Charles的默认值)。
然后,在 系统偏好设置-网络 里,设置代理,勾选网页代理和安全网页代理,代理服务器填 127.0.0.1,端口号为8888。
在Charles的代理设置中可以设置端口号,勾选HTTP透明代理。在Charles的SSL代理设置中,启用SSL代理,并添加一个Include:*:443
。
添加证书
在Charles的Help>SSL proxying
菜单,可以安装证书。如果要抓取电脑上的HTTPS请求,选择“Install Charles Root Certificate”,这会打开钥匙串访问,选择Charles Proxy CA证书,双击打开,展开“信任”,选择始终信任。
如果想抓取手机上的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框架。
最后,到Releases · Fuzion24/JustTrustMe下载JustTrustMe模块,然后安装,再打开Xposed Installer,在模块里启用JustTrustMe模块。
上面这些做完后,就可以使用Charles去抓包App的HTTPS请求,即使使用了SSL pinning。