拷贝自原文链接,超级实用,十分感谢,防止失效。
场景:
用于抓取 7.0 以上任意应用的网络请求。
简单原理:
利用 Https 对证书的溯源校验。系统内会预置一些根证书,默认这些证书都是可信安全的。Root 后,按照既定的规则,将电脑 Charles 证书放到此目录下,这样,电脑中间代理后,读取到的中间代理证书也被认为是 CA 颁发的安全证书,并信任。
具体步骤:
0. 必须先 Root 手机
1. 下载证书
根据Charles的help浏览chls.pro/ssl下载证书,你可以在设备上下载后adb pull到电脑上,也可以直接用电脑浏览器下载。
2. 证书重命名
系统证书在目录/system/etc/security/cacerts/下,我们看到
每个证书的命名规则是<Certificate_Hash>.<Number>,文件名是一个Hash值,而后缀是一个数字。后缀名的数字是为了防止文件名冲突的,比如如果两个证书算出的Hash值是一样的话,那么一个证书的后缀名数字可以设置成0,而另一个证书的后缀名数字可以设置成1.
我们用下面的命令计算出证书文件的Hash值 openssl x509 -subject_hash_old -in <Certificate_File>
也有在线工具,可以直接上传获取即可
3. 上传证书
我们将重命名好的证书adb push
到/sdcard/Download
,然后将其复制到/system/etc/security/cacerts/
文件夹。
如果出现上面问题,那么我们就需要使用mount -o rw,remount /system
命令将system分区挂在为可读写。
也可以直接 cd 到 cacerts 目录使用 mount -o rw,remount /
只挂在 cacerts 目录(我挂载 system 就失败了)
还是失败请依次执行下面命令:
adb root
adb disable-verity
adb reboot
adb remount
adb shell
mount -o rw,remount /system
复制好后将文件权限更改为644,并重启设备
4. 验证结果
设置》安全》信任的凭证,我们可以看到
5. 最后抓包
正常设置代理即可,不会的话,可以参考Charles - Windows,Mac 和 Windows 方法大同小异。设置后,就可以拦截到所有接口了,并且都被解析为明文。