diff --git a/app/src/main/java/toolkit/coderstory/CorePatchForQ.java b/app/src/main/java/toolkit/coderstory/CorePatchForQ.java index 7532c1a..72b05fc 100644 --- a/app/src/main/java/toolkit/coderstory/CorePatchForQ.java +++ b/app/src/main/java/toolkit/coderstory/CorePatchForQ.java @@ -149,5 +149,14 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { "isVerificationEnabled", new ReturnConstant(prefs, "disableVerificationAgent", false) ); + + // Allow apk splits with different signatures to be installed together + hookAllMethods(signingDetails, "signaturesMatchExactly", new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) { + if (prefs.getBoolean("exactSigCheck", false)) + param.setResult(true); + } + }); } } diff --git a/app/src/main/java/toolkit/coderstory/CorePatchForR.java b/app/src/main/java/toolkit/coderstory/CorePatchForR.java index 6726c10..4dd238f 100644 --- a/app/src/main/java/toolkit/coderstory/CorePatchForR.java +++ b/app/src/main/java/toolkit/coderstory/CorePatchForR.java @@ -65,6 +65,7 @@ public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) XposedBridge.log("D/" + MainHook.TAG + " downgrade=" + prefs.getBoolean("downgrade", true)); XposedBridge.log("D/" + MainHook.TAG + " authcreak=" + prefs.getBoolean("authcreak", false)); XposedBridge.log("D/" + MainHook.TAG + " digestCreak=" + prefs.getBoolean("digestCreak", true)); + XposedBridge.log("D/" + MainHook.TAG + " exactSigCheck=" + prefs.getBoolean("exactSigCheck", false)); XposedBridge.log("D/" + MainHook.TAG + " UsePreSig=" + prefs.getBoolean("UsePreSig", false)); XposedBridge.log("D/" + MainHook.TAG + " bypassBlock=" + prefs.getBoolean("bypassBlock", true)); XposedBridge.log("D/" + MainHook.TAG + " sharedUser=" + prefs.getBoolean("sharedUser", false)); @@ -406,6 +407,15 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { hookAllMethods(getIsVerificationEnabledClass(loadPackageParam.classLoader), "isVerificationEnabled", new ReturnConstant(prefs, "disableVerificationAgent", false)); + // Allow apk splits with different signatures to be installed together + hookAllMethods(signingDetails, "signaturesMatchExactly", new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) { + if (prefs.getBoolean("exactSigCheck", false)) + param.setResult(true); + } + }); + if (BuildConfig.DEBUG) initializeDebugHook(loadPackageParam); } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ab31744..e36528a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -8,6 +8,8 @@ Allows install apps after modify file in apk (ignore invalid digest error). Disable compare signatures Allow re-install app with different signatures. + Disable exact signature match + Disables exact signature match between apks, allowing installs with each apk split having a different signature. Only enable when really needed! Use installed signatures Always use signatures from already installed apps when installing.\n This is extremely dangerous.\n Only enable when really needed! Settings diff --git a/app/src/main/res/xml/prefs.xml b/app/src/main/res/xml/prefs.xml index 1e2cf7e..78f6738 100644 --- a/app/src/main/res/xml/prefs.xml +++ b/app/src/main/res/xml/prefs.xml @@ -17,6 +17,11 @@ android:title="@string/digestCreak" android:summary="@string/digestCreak_summary" android:defaultValue="true" /> +