diff --git a/app/src/main/java/toolkit/coderstory/CorePatchForR.java b/app/src/main/java/toolkit/coderstory/CorePatchForR.java index da1ee70..d12c31c 100644 --- a/app/src/main/java/toolkit/coderstory/CorePatchForR.java +++ b/app/src/main/java/toolkit/coderstory/CorePatchForR.java @@ -140,27 +140,38 @@ public void afterHookedMethod(MethodHookParam methodHookParam) throws Throwable } if (throwable != null || parseErr != null) { Signature[] lastSigs = null; - if (prefs.getBoolean("UsePreSig", false)) { - PackageManager PM = AndroidAppHelper.currentApplication().getPackageManager(); - if (PM == null) { - XposedBridge.log("E: " + BuildConfig.APPLICATION_ID + " Cannot get the Package Manager... Are you using MiUI?"); - } else { - PackageInfo pI; - if (parseResult != null) { - pI = PM.getPackageArchiveInfo((String) methodHookParam.args[1], 0); + try { + if (prefs.getBoolean("UsePreSig", false)) { + PackageManager PM = AndroidAppHelper.currentApplication().getPackageManager(); + if (PM == null) { + XposedBridge.log("E: " + BuildConfig.APPLICATION_ID + " Cannot get the Package Manager... Are you using MiUI?"); } else { - pI = PM.getPackageArchiveInfo((String) methodHookParam.args[0], 0); + PackageInfo pI; + if (parseResult != null) { + pI = PM.getPackageArchiveInfo((String) methodHookParam.args[1], 0); + } else { + pI = PM.getPackageArchiveInfo((String) methodHookParam.args[0], 0); + } + PackageInfo InstpI = PM.getPackageInfo(pI.packageName, PackageManager.GET_SIGNATURES); + lastSigs = InstpI.signatures; } - PackageInfo InstpI = PM.getPackageInfo(pI.packageName, PackageManager.GET_SIGNATURES); - lastSigs = InstpI.signatures; } - } else { - if (prefs.getBoolean("digestCreak", true)) { - final Object origJarFile = constructorExact.newInstance(methodHookParam.args[0], true, false); + } catch (Throwable ignored) { + + } + try { + if (lastSigs == null && prefs.getBoolean("digestCreak", true)) { + final Object origJarFile = constructorExact.newInstance(methodHookParam.args[parseResult == null ? 0 : 1], true, false); final ZipEntry manifestEntry = (ZipEntry) XposedHelpers.callMethod(origJarFile, "findEntry", "AndroidManifest.xml"); - final Certificate[][] lastCerts = (Certificate[][]) XposedHelpers.callStaticMethod(ASV, "loadCertificates", origJarFile, manifestEntry); + final Certificate[][] lastCerts; + if (parseResult != null) { + lastCerts = (Certificate[][]) XposedHelpers.callMethod(XposedHelpers.callStaticMethod(ASV, "loadCertificates", methodHookParam.args[0], origJarFile, manifestEntry), "getResult"); + } else { + lastCerts = (Certificate[][]) XposedHelpers.callStaticMethod(ASV, "loadCertificates", origJarFile, manifestEntry); + } lastSigs = (Signature[]) XposedHelpers.callStaticMethod(ASV, "convertToSignatures", (Object) lastCerts); } + } catch (Throwable ignored) { } if (lastSigs != null) { signingDetailsArgs[0] = lastSigs; diff --git a/app/src/main/java/toolkit/coderstory/CorePatchForT.java b/app/src/main/java/toolkit/coderstory/CorePatchForT.java index c33b65a..9e31333 100644 --- a/app/src/main/java/toolkit/coderstory/CorePatchForT.java +++ b/app/src/main/java/toolkit/coderstory/CorePatchForT.java @@ -81,6 +81,25 @@ protected void afterHookedMethod(MethodHookParam param) { } }); } + findAndHookMethod("com.android.server.pm.ScanPackageUtils", loadPackageParam.classLoader, "assertMinSignatureSchemeIsValid", "com.android.server.pm.parsing.pkg.AndroidPackage", int.class, new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + if (prefs.getBoolean("authcreak", true)) { + param.setResult(null); + } + } + }); + Class strictJarVerifier = findClass("android.util.jar.StrictJarVerifier", loadPackageParam.classLoader); + if (strictJarVerifier != null) { + XposedBridge.hookAllConstructors(strictJarVerifier, new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) { + if (prefs.getBoolean("authcreak", true)) { + XposedHelpers.setBooleanField(param.thisObject, "signatureSchemeRollbackProtectionsEnforced", false); + } + } + }); + } } @Override