Skip to content

Latest commit

 

History

History
69 lines (44 loc) · 3.89 KB

core-patch-extend.md

File metadata and controls

69 lines (44 loc) · 3.89 KB

核心破解

核心破解(CorePatch)是一个针对 PMS 进行修改的 Xposed 模块,它具有以下功能:

  1. 允许缺少签名、签名错误的包安装到系统中;
  2. 允许降级安装;
  3. 允许与系统中存在的包不同签名的新 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 ,重新定义其中自己的权限,对用户来说不应该是不安全的(既然用户都决定用核心破解了),因此这个还是有必要修复的。

SharedUser

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 的用户目录搬走,移动到新的版本还是很麻烦的,有可能遇到各种问题)。

如何解决?

未完待续