解决Charles安装完证书抓不到包乱码问题

解决Charles安装完证书抓不到包乱码问题

环境:android12(红米、已root)、MacOS

问题

Charles按照教程安装完证书,配置完SSL代理后开始抓包。
请添加图片描述
http的包抓取成功,https抓到的包都是乱码没有解析的。提示:Client SSL handshake failed: An unknown issue occurred processing the certificate(certificate_unknown)。
在这里插入图片描述

经过查询发现,安卓7.0及以上系统对于证书的安全策略做了修改,用户证书只能用于代理浏览器的流量,而应用是不会信任这些证书。

解决方案

1、将用户证书导入系统证书。

2、把app项目设置默认信任所有证书(系统+用户)。

这里直接使用方案一。

大致步骤是通过 adb root 和 adb remount 将用户证书直接复制进 /system/etc/security/cacerts/ 路径。

adb root  #获取root权限
adb disable-verity #关闭检测功能
adb reboot #关闭检测之后需要重启机器
#重启机器成功之后:
adb root  #再次获取root权限
adb remount  #重启挂载system分区为可读写分区
adb shell
cp <cert>.0 /system/etc/security/cacerts/

或者

adb shell
su
mount -o remount, rw /system #挂载system分区为可读写分区
cp <cert> .0 /system/etc/security/cacerts/
具体实践
方法一

第一步 adb root 就出问题了。

adb root

在这里插入图片描述

尝试安装超级 adbd(adbd-insecure.apk)。

下载地址:https://forum.xda-developers.com/t/2014-11-10-root-adbd-insecure-v2-00.1687590/

安装完成后需要将Enable insecure adbd 和 Enable at boot 勾选上。

然而点击 Enable insecure adbd 选项框会报错。可能是安卓版本太高了的原因。

再尝试网上文章说的安装 magisk 模块 adb_root。

下载地址:https://github.com/evdenis/adb_root

在这里插入图片描述

根据步骤下载zip,adb push到手机后,在magisk上选择本地安装。安装成功后,重启手机。结果还是不行。

方法二

经过百度谷歌了很久后实在找不到方法了,放弃第一种方法,打算通过adb shell后再挂载分区。

挂载时报错:找不到 /system。

在这里插入图片描述

查询后发现原因是在Android8.0以上通过以上mount命令,你会发现找不到/system代表的节点和拥有的权限信息,这是因为Android8.0之后谷歌加入了A/B system的特性,system分区跟ramdisk分区打包在一起,因此系统起来之后也就不存在system分区了,而是直接把system镜像挂载到/根目录上。所以/proc/mounts文件中没有包含/system的权限信息。

需要使用

mount -o remount -o rw /

然而还是不行。

根据他的解释,当然上面方法不能挂载/system目录的话而且提示“’/dev/root’ is read-only”的话,那么是因为你的设备开启了avb,此时就只能通过下面的方式完全重新挂载整个系统:

adb root
adb disable-verity
adb remount

绕了一圈又回到了原点。

参考:https://blog.csdn.net/baidu_38661691/article/details/107481148

之后又尝试用 mt管理器和 fx管理器挂载,结果都没成功。

方法三

经过寻找在git上发现一种方法:通过Magisk模块,将文件放到/system目录下。

1、准备证书

​ Charles导出证书 Charles -> Help -> SSL Proxying -> save Charles root certificate

2、转换证书

为什么算了两个哈希值,好像是根据机型不同,需要用到的哈希算法不同。

# 获取文件名
openssl x509 -inform PEM -subject_hash_old -in charles-ssl-proxying-certificate.pem | head -1 #aaaaaaaa
openssl x509 -inform PEM -subject_hash -in charles-ssl-proxying-certificate.pem | head -1  #bbbbbbbb

# 分别使用上面的文件名,注意后缀
openssl x509 -inform PEM -text -in charles-ssl-proxying-certificate.pem > aaaaaaaa.0
openssl x509 -inform PEM -text -in charles-ssl-proxying-certificate.pem > bbbbbbbb.0

3、编辑输出的文件,把 -----BEGIN CERTIFICATE----- 到文·件结束这部分移动到文件首部

4、制作Magisk模块

模块文件结构为:

charles_ca
├── META-INF
│   └── com
│       └── google
│           └── android
│               ├── update-binary
│               └── updater-script
├── module.prop
└── system
    └── etc
        └── security
            └── cacerts
                ├── aaaaaaaa.0
                └── bbbbbbbb.0

下载项目,解压后把前面转换好的文件移动到 system/etc/security/cacerts 下面,替换 aaaaaaaa.0 和 bbbbbbbb.0。然后压缩成zip。

关于模块中的system目录,根据 https://topjohnwu.github.io/Magisk/guides.html#magisk-module-installer 上面的解释,/system路径下的文件可以添加到手机中相同路径下的文件夹内或者直接替换。

在这里插入图片描述

5、安装模块

adb push 将zip包推到手机里,magisk点击本地安装,成功后就可以抓包了。

注意

制作模块时遇到了一个坑,我把charles_ca文件夹直接压缩成zip。然后在magisk中安装的时候直接报错了。

在这里插入图片描述

然后我观察了一下其他模块的安装包,对比了自己的,发现压缩时应该直接把META-INF、module.prop、system三个文件压缩,不能外面加一个文件夹。

参考:https://github.com/DabanC/android_install_ca_certificate、https://www.jianshu.com/p/06ccefcdbcd2

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值