iOS模拟器与iOS真机器
相比,iOS模拟器与PC
宿主用的同一个网络,所以, 要抓取iOS模拟器中的HTTPS请求的话,不需要设置网络代理,因为根本就没有设置的地方。
只需要安装Charles Root CA
,安装步骤如下:
1、打开Charles
。
2、打开一个iOS Simulator
。
3、通过点击Charles
的菜单Help ➝ SSL Proxying ➝ Install Charles Root Certificate in iOS Simulators
,出现如下提示:
4、点击OK
按钮,然后通过点击iOS Simulator
的Settings ➝ General ➝ About ➝ Certificate Trust Settings
,界面如下:
5、点击开关按钮,出现如下的提示:
6、点击Continue
按钮。
该证书已经被用户设置为受信任的证书了。此时就可以用Charles
抓取该iOS Simulator
中的app
发起的HTTPS
请求了。
抓取iOS真机
中的HTTPS请求的步骤如下:
1、与抓取iOS真机中的HTTP请求的步骤一样
2、在iOS真机
的浏览器中打开http://chls.pro/ssl,会出现如下的弹出框:
这个链接的本质就是从您本地PC上的Charles中复制证书到您的Android设备,然后安装之。
给这个证书取个名字,比如Charles
,然后点击OK
按钮。
Android7.0
开始的系统默认不信任用户自己添加到系统的CA证书,也就是说, 即使你在Android7.0
之后的系统上安装了Charles Proxy CA
, 也无法抓取HTTPS请求,那如何解决此问题呢?
Android官方解决方案对我们来说,一般没啥作用,因为我们抓包通常是抓别人的App的数据,我们一般不会对别人的App做修改。
还有一种办法需要把手机ROOT掉,方法如下:
Android
系统的系统证书的存放目录是:/system/etc/security/cacerts/
。
下面是某Android手机的/system/etc/security/cacerts/
目录下的内容:
该目录里面的证书文件的文件名规则为:${Certificate_Hash}.{Number}
。
${Certificate_Hash}
可以通过如下命令获得:
openssl x509 -subject_hash_old -in charles-ssl-proxying-certificate.pem | head -n 1
{Number}
作为后缀名,是为了防止文件名冲突的,比如如果两个证书算出${Certificate_Hash}
是一样的话, 那么其中一个证书的后缀名数字可以设置成0
,而另一个证书的后缀名数字可以设置成1
。
计算好${Certificate_Hash}
之后,我们就把证书重命名:
cp charles-ssl-proxying-certificate.pem e18b03cd.0
把符合命名规则的证书推送到手机的/system/etc/security/cacerts/
目录下:
adb push e18b03cd.0 /system/etc/security/cacerts/e18b03cd.0
此时你应该可以在手机的设置->安全->加密与凭据->信任的凭据
的系统标签页看到你新加入的证书,将其启用即可顺利抓包
Read-only file system
mount -o remount rw /