谷歌在安卓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 修改后的文件为4fb5a349.0 2.将证书传到系统证书目录下 首先将文件4fb5a349.0 push到/sdcard/Download目录下(cmd 要进入文件目录下操作) adb push 4fb5a349.0 /sdcard/Download 然后复制到/system/etc/security/cacerts/目录下 adb shell su cp /sdcard/Download/4fb5a349.0 /system/etc/security/cacerts/ 如果出现 //4fb5a349.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数据的时候遇到了很多问题,查看了很多的博客资料,在此向他们提出感谢 https://www.codercto.com/a/58894.html https://www.jianshu.com/p/f547b05a5335 https://www.jianshu.com/p/035f7d7a0f7e https://blog.csdn.net/Nicolas_king/article/details/81122416 我抓取的是所在公司开发的app数据,爬虫仅仅作为测试而已。手机常用app的数据一般都是经过了加密,一些涉及个人隐私的数据爬取是违法的,所见即所得,否则即违法。 希望我的这篇文章能帮到大家,有任何意见还请不吝赐教。