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" />
+