From:https://testerhome.com/topics/21956

OpenSSL :https://slproweb.com/products/Win32OpenSSL.html

谷歌在安卓7.0修改了安全策略,安卓系统 大于 7.0 时, 应用不在信任用户安装的证书文件。用户添加的 CA 证书不能再用于安全连接,对于 https 传输的数据就抓取不到了,会显示<unknown>。

解决方法

  • 降级 APP
  • 降级 系统版本
  • 将用户证书偷渡成系统证书,需要有 root 权限。将 charles 的 CA 证书安装进系统信任的证书目录下,这样在开启 charles 代理的时候,系统就会认为CA证书安全,从而可以获取 https 数据。

Fiddler 证书安装到安卓根目录

一台已 root 过的手机,开启开发者选项,然后连接电脑。

安卓系统证书跟 Fiddler 证书的格式不一样,需要转换。

1、安装 OPENSSL【https://slproweb.com/products/Win32OpenSSL.html】。linux 好像默认安装的有,如果使用 linux 系统,可以忽略这一步。

2、下载 fiddler 证书到电脑上

3、打开命令窗口,执行以下命令,查看证书哈希信息:

openssl x509 -inform DER -subject_hash_old -in FiddlerRoot.cer

安卓系统的安全证书在   /system/etc/security/cacerts/目录下,进入adb shell,打开目录就能看到这些证书文件。

文件名是 Hash值 加 数字后缀。后缀名的数字是为了防止文件名冲突的,比如如果两个证书算出的Hash值是一样的话,那么一个证书的后缀名数字可以设置成0,而另一个证书的后缀名数字可以设置成1

4、转换证书

openssl x509 -inform DER -in FiddlerRoot.cer -text > [哈希].0

5、用记事本编辑证书

        将 -----BEGIN CERTIFICATE----------END CERTIFICATE----- 的部分放到文件最前面

6、将证书放到手机的 /system/etc/security/cacerts/ 

执行 adb 命令连接手机,获取权限,把文件夹挂载为读写模式,把文件复制到证书根目录

adb root
adb remount
adb shell mount -o rw,remount /system
adb push e5742ab9.0 /system/etc/security/cacerts

重启手机,可以看到 Fiddler 的证书已经变成系统证书了,接下来就可以愉快的抓包了

Charles 证书安装到安卓根目录

一台已 root 过的手机,开启开发者选项,然后连接电脑。

下载证书到电脑上

  • 电脑端浏览器输入 chls.pro/ssl 即可下载,
  • 如果未下载也可以在 charles >> help >> SSL Proxying >>Save Charles Root Certificate 保存证书到本地文件夹

打开命令窗口执行以下命令,查看证书信息:openssl x509 -subject_hash_old -in charles-ssl-proxying-certificate.pem

重命名证书:mv charles-ssl-proxying-certificate.pem e5742ab9.0

执行 adb 命令连接手机,获取权限,把文件夹挂载为读写模式,把文件复制到证书根目录

adb root
adb remount
adb shell mount -o rw,remount /system
adb push e5742ab9.0 /system/etc/security/cacerts

以上就 OK 了。如果不放心可以 cd 到对应目录,检查文件是否存在,文件权限是否与其他证书一致。证书安装 OK,其他代理选项正常配置即可

如果出现 <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 重启

重启之后,打开设置 ---> 更多设置 ---> 系统安全 ---> 信任的凭据中可以看到安装的证书

然后通过设置 charles 代理就可以查看到 https 的数据了。 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐