抓取Android设备中的HTTPS请求
1、分析

抓取Android设备中的HTTPS请求, 比抓取Android设备中的HTTP请求要多一个步骤, 多的这个步骤就是要在Android设备中安装Charles Proxy CA

Android7.0之前的系统会信任用户自己安装的证书;而Android7.0开始的系统不信任用户自己安装的证书。

2、总结

抓取Android设备中的HTTPS请求的步骤如下:

1、与抓取Android设备中的HTTP请求的步骤一样

2、确认Android设备的系统版本是多少

3、Android7.0之前的系统

Android7.0之前的系统安装了Charles Proxy CA即可抓取HTTPS请求, 下面就是安装Charles Proxy CA的方法:

Android设备的浏览器中打开http://chls.pro/ssl,会出现如下的弹出框:

这个链接的本质就是从您本地PC上的Charles中复制证书到您的Android设备,然后安装之。

给这个证书取个名字,比如Charles,然后点击OK按钮。

现在就可以用这个Android设备抓取HTTPS请求了。

4、Android7.0之后的系统

Android7.0开始的系统默认不信任用户自己添加到系统的CA证书,也就是说, 即使你在Android7.0之后的系统上安装了Charles Proxy CA, 也无法抓取HTTPS请求,那如何解决此问题呢?

Android官方解决方案

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 /