引言

在为移动魔百盒 CM201-1-YS 刷入 Android 9 后,发现原生设置被运营商的设置替换了,无法改动复杂的设置选项。

本文修改自为电视盒子注入原生设置的通用方法 - 『移动安全区』 - 吾爱破解 - LCG - LSG |安卓破解 | 病毒分析|www.52pojie.cn

定制设置

幸好我们有 root 权限,在盒子上装个 MT 管理器就能直接替换系统应用。于是我想去网上找个原生设置放进去,结果有的不能用,有的替换完干脆直接进不去系统了,又得重刷… 后来寻思我明明会逆向,为啥不自己动手,丰衣足食呢?

提取原生设置 APK

使用 MT 管理器提取 APK,查看 APK 内容。

注意到我们的雷电模拟器里就有个原生设置,系统恰好也是安卓 9,提取并检查这个设置的 APK 文件,发现里面没有 lib 库,因此推断 APK 是全平台通用的,只要能装上:

提取原生设置 APK

替换证书

这个设置和电视盒子里已有的设置包名冲突了,只能先进行替换,替换后重启,发现设置图标消失,原生设置和定制设置都没了,于是对比两个设置的签名描述,如下:

雷电模拟器设置: EMAILADDRESS=android@android.com, CN=Android, OU=Android, O=Android, L=Mountain View, ST=California, C=US

电视盒子设置: EMAILADDRESS=sumavision@sumavision.com, CN=Sumavision, OU=Sumavision, O=Sumavision, L=Shenzhen, ST=Guangdong, C=CN

可见电视盒子的系统级签名与模拟器的系统级签名不同,在 Android 中这些申请了特殊权限的应用需要系统级签名才能正常安装运行,其中一个特殊权限如下:

<permission-group
        android:label="@string/superuser"
        android:icon="@drawable/ic_action_permission"
        android:name="android.permission-group.SUPERUSER"
        android:priority="10000"
        android:description="@string/superuser_description_more" />

幸好,安卓对 /system/app 下的应用只判断签名是否存在,不判断是否有效,我们可以来一出借尸还魂。

首先将定制设置备份,然后在 MT 管理器两侧同时打开原生设置和定制设置,接下来将定制设置中除 META-INF 外的文件全部删除,然后将原生设置中除 META-INF 外的文件全部添加到定制设置中,全程不要进行签名(同时建议保留 v2 签名数据),这样我们就得到了披着系统级签名的原生设置:

替换后证书

移动到系统 App 目录

现在我们把这个设置再移到系统 App 目录下,例如 /system/app/Setting,并且设置权限为 644,所有者为 root,所有组也为 root。

重启发现原生设置出现了,功能基本正常,也可以查看应用信息并清缓存了:

原生设置

原生设置

定制设置共存

接下来要解决两个设置共存的问题,原生设置虽好,但调整屏幕分辨率比较困难,因此定制设置还是需要保留的,我们直接用 MT 的 apk 共存功能,修改定制设置的包名(因为原生设置会被第三方调用),同样不签名,然后一并放到系统 App 目录下,这里是 /system/app/Setting2,同样设置权限为 644,所有者和组为 root。

重启电视盒子,发现两个设置都出现了,目前使用起来一切正常。

原生设置与定制设置共存

留一个思考题:目前发现无法在原生设置中通过多次点击版本号启用开发者模式,屏幕无任何提示,问如何解决?

还有一件事

该固件的默认字体被魔改了,是一种综艺体,看着挺非主流的,顺手给它改回 Noto + 思源字体了。

装上了 Magisk,直接刷入字体包即可。

GitHub - Buernia/Noto-SHS-Magisk-module: 谷歌 Noto + 思源系列可变字体,支持多语言多字重。适配 MIUI 13。Variable Noto fonts Magisk module for MIUI 13 (Android 12).

参考文献