谷歌在安卓7.0修改了安全策略,用户添加的CA证书不能再用于安全链接,对于https传输的数据就抓取不到了,会显示
<unknown>。
个人解决方法是将charles的CA证书安装进系统信任的证书目录下,这样在开启charles代理的时候,系统就会认为CA证书安全,从而能够获取https数据。
准备工做:
一台已root过的手机,我用的是小米5,开启开发者选项链接电脑。
下载charles证书,电脑端浏览器输入chls.pro/ssl便可下载,若是未下载也能够在charles>>help>>SSL Proxying>>Save Charles Root Certificate保存证书到本地文件夹
具体步骤:
1.重命名证书
安卓系统的安全证书在 /system/etc/security/cacerts/目录下,进入adb shell,打开目录就能看到这些证书文件,文件名是Hash值加数字后缀。后缀名的数字是为了防止文件名冲突的,好比若是两个证书算出的Hash值是同样的话,那么一个证书的后缀名数字能够设置成0,而另外一个证书的后缀名数字能够设置成1

用 “openssl x509 -subject_hash_old -in 证书名加后缀”计算出hash值,并将后缀设为0

修改后的文件为<hash>.0
2.将证书传到系统证书目录下
首先将文件<hash>.0 push到/sdcard/Download目录下(cmd 要进入文件目录下操做)
adb push <hash>.0 /sdcard/Download
而后复制到/system/etc/security/cacerts/目录下
adb shell
su
cp /sdcard/Download/<hash>.0 /system/etc/security/cacerts/
而后修改权限
chmod 644 /system/etc/security/cacerts/<hash>.0
若是出现
//<hash>.0:Read-only file system这个警告,这是由于system文件为只读,须要将其挂载为可读写。
通常的解决方法是
mount -o rw,remount /system
修改system读写权限,而后再进行复制操做
若是修改了以后仍是提示Read-only file system,还有方法
adb root
adb disable-verity
adb reboot #手机会重启,不用关闭cmd窗口,手机可能须要拔掉数据写从新链接
adb root
adb shell
mount -o rw,remount /system #再次进行修改
而后就能够进行复制操做了。(我是遇到了这种状况,这个方法可行)
复制完以后输入reboot重启
3.测试
重启以后,小米手机打开设置-更多设置-系统安全-信任的凭据中能够看到安装的证书


而后经过设置charles代理就能够查看到https的数据了。
总结:
在抓取手机app数据的时候遇到了不少问题,查看了不少的博客资料,在此向他们提出感谢
我抓取的是所在公司开发的app数据,爬虫仅仅做为测试而已。手机经常使用app的数据通常都是通过了加密,一些涉及我的隐私的数据爬取是违法的,所见即所得,不然即违法。
但愿个人这篇文章能帮到你们,有任何意见还请不吝赐教。