核心破解(CorePatch)是一个针对 PMS 进行修改的 Xposed 模块,它具有以下功能:
- 允许缺少签名、签名错误的包安装到系统中;
- 允许降级安装;
- 允许与系统中存在的包不同签名的新 apk 直接覆盖安装。(「禁用 APK 签名验证」)
但是它并不能解决所有的问题,至今核心破解还存在两大难题:
如果一个包声明了自定义权限,即使用了核心破解的禁用签名验证,仍然无法安装,并且有以下报错:
这个权限的保护等级不需要是「signature」的
Failure [INSTALL_FAILED_DUPLICATE_PERMISSION: Package fivecc.tools.signdemo attempting to redeclare permission fivecc.tools.MY_PERMISSION already owned by fivecc.tools.signdemo]
据说 3.8 是可用的,而 4.2 反而不可用。
是由于这个提交:
Don't hook checkCapability() for permission usecase · LSPosed/CorePatch@65a3ee5
hookAllMethods("android.content.pm.PackageParser", loadPackageParam.classLoader, "checkCapability", new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) {
// Don't handle PERMISSION (grant SIGNATURE permissions to pkgs with this cert)
// Or applications will have all privileged permissions
// https://cs.android.com/android/platform/superproject/+/master:frameworks/base/core/java/android/content/pm/PackageParser.java;l=5947?q=CertCapabilities
if ((Integer) param.args[1] != 4) {
param.setResult(true);
}
}
});
根据注释,是为了防止安装任意 apk 都被给予系统权限;但是这也导致了具有自定义权限的 app 在签名不同时无法通过核心破解覆盖安装。
现在包含了 androidx core 的 app 都会带一个 DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION 权限,因此核心破解对很多新 app 可能都失效了。
这个权限应该是为了向下移植 Android 13 的 registerReceiver 的 RECEIVER_(NOT_)EXPORTED
flags 。
功能和 API 概览 | Android 开发者 | Android Developers
实际上,安装一个不同签名的 app ,重新定义其中自己的权限,对用户来说不应该是不安全的(既然用户都决定用核心破解了),因此这个还是有必要修复的。
Failure [INSTALL_FAILED_SHARED_USER_INCOMPATIBLE: Package fivecc.tools.signdemo has a signing lineage that diverges from the lineage of the sharedUserId]
虽然 shared user 已经废弃,但是还是有一些旧的 app 需要这个 feature (知名的如 Termux)。这个问题导致 termux 难以在不同签名的版本之间迁移(毕竟要把整个 termux 的用户目录搬走,移动到新的版本还是很麻烦的,有可能遇到各种问题)。
未完待续