tgoop.com/qianqianzhuang/31
Last Update:
今天为了抓包,下载了 zygisk-cacerts 模块 [1]。该模块在 /system/etc/security/cacerts 路径挂载证书,同时通过 zygisk 注入相应应用,设定 system.certs.enabled prop 为 true,从在 Android 14 上允许应用使用来自 system 而非 apex 路径的证书 [2]。但在启用模块后,发现 HttpCanary 还是无法识别系统证书。经过调查,发现这是 Magisk + Zygisk Next 环境特有的问题。
Magisk 在收集模块时,若自带 Zygisk 处于未启用状态,则会忽略所有 Zygisk 模块(注意是全部忽略,包括文件挂载和脚本)[3]。在只存在 Magisk 一种 root 实现的时代,这种做法当然没有问题。但 KernelSU 登场之后,由于并没有自带 Zygisk,因此会忠实地加载全部模块。换句话说,对于同一个 Zygisk 模块,在 KernelSU 上,即使没有安装 Zygisk Next,无法实现注入,文件系统挂载和脚本也会被执行;而在 Magisk 上,若没有开启自带的 Zygisk,这个模块将会被直接忽略。
之前的 Zygisk Next 对 Magisk 这种未公开的行为专门做了兼容,会手动执行模块的所有脚本,但没有处理文件挂载(因为几乎所有常见 Zygisk 模块都不需要挂载文件)。直到今天发布的 1.0 RC5 版本,才通过硬链接模块文件到 Zygisk Next 目录的方式,变相实现了文件挂载。不过说到底,这还是用 hack 代替 hack,我认为最好的处理方式,是暴露一个 Zygisk 是否开启的 API,然后让模块自行处理 Zygisk 兼容性问题。
[1] https://github.com/vvb2060/zygisk_cacerts
[2] https://cs.android.com/android/_/android/platform/frameworks/base/+/86dc3f7afbc06ec63a41c592403721f9c66f85f4
[3] https://github.com/topjohnwu/Magisk/pull/4862/commits/d074dacff0d005a0e46c0d09106f595958b42a7a
BY 钱庄
Share with your friend now:
tgoop.com/qianqianzhuang/31