|
3 | 3 | import android.content.pm.Signature; |
4 | 4 |
|
5 | 5 | import java.io.PrintWriter; |
| 6 | +import java.io.RandomAccessFile; |
6 | 7 | import java.lang.reflect.InvocationTargetException; |
| 8 | +import java.util.Arrays; |
7 | 9 |
|
8 | 10 | import de.robv.android.xposed.XC_MethodHook; |
9 | 11 | import de.robv.android.xposed.XposedBridge; |
@@ -90,6 +92,26 @@ protected void afterHookedMethod(MethodHookParam param) { |
90 | 92 | if (utils != null) { |
91 | 93 | deoptimizeMethod(utils, "canJoinSharedUserId"); |
92 | 94 | } |
| 95 | + |
| 96 | + var apkSigningBlockClass = findClass("android.util.apk.ApkSigningBlockUtils", loadPackageParam.classLoader); |
| 97 | + var signatureInfoClass = findClass("android.util.apk.SignatureInfo", loadPackageParam.classLoader); |
| 98 | + findAndHookMethod(apkSigningBlockClass, "parseVerityDigestAndVerifySourceLength", byte[].class, long.class, signatureInfoClass, new XC_MethodHook() { |
| 99 | + @Override |
| 100 | + protected void beforeHookedMethod(MethodHookParam param) { |
| 101 | + if (prefs.getBoolean("authcreak", false)) { |
| 102 | + param.setResult(Arrays.copyOfRange((byte[]) param.args[0], 0, 32)); |
| 103 | + } |
| 104 | + } |
| 105 | + }); |
| 106 | + |
| 107 | + findAndHookMethod(apkSigningBlockClass, "verifyIntegrityForVerityBasedAlgorithm", byte[].class, RandomAccessFile.class, signatureInfoClass, new XC_MethodHook() { |
| 108 | + @Override |
| 109 | + protected void beforeHookedMethod(MethodHookParam param) { |
| 110 | + if (prefs.getBoolean("authcreak", false)) { |
| 111 | + param.setResult(null); |
| 112 | + } |
| 113 | + } |
| 114 | + }); |
93 | 115 | } |
94 | 116 |
|
95 | 117 | Class<?> getParsedPackage(ClassLoader classLoader) { |
|
0 commit comments