diff --git a/app/src/main/java/org/lsposed/corepatch/Config.kt b/app/src/main/java/org/lsposed/corepatch/Config.kt
index 370ba6b..5ed47a3 100644
--- a/app/src/main/java/org/lsposed/corepatch/Config.kt
+++ b/app/src/main/java/org/lsposed/corepatch/Config.kt
@@ -10,6 +10,7 @@ object Config {
const val ENHANCED_MODE = "enhanced_mode"
const val USE_PREVIOUS_SIGNATURES = "use_previous_signatures"
const val BYPASS_SHARED_USER = "bypass_shared_user"
+ const val DISABLE_VERIFICATION_AGENT = "disable_verification_agent"
private val allConfig = arrayOf(
BYPASS_DOWNGRADE,
@@ -50,6 +51,10 @@ object Config {
return prefs.getBoolean(BYPASS_SHARED_USER, false)
}
+ fun isDisableVerificationAgentEnabled(): Boolean {
+ return prefs.getBoolean(DISABLE_VERIFICATION_AGENT, false)
+ }
+
fun getConfig(key: String): Boolean {
return rwPrefs?.getBoolean(key, false) ?: false
}
diff --git a/app/src/main/java/org/lsposed/corepatch/MainActivity.kt b/app/src/main/java/org/lsposed/corepatch/MainActivity.kt
index 343855b..47ae17f 100644
--- a/app/src/main/java/org/lsposed/corepatch/MainActivity.kt
+++ b/app/src/main/java/org/lsposed/corepatch/MainActivity.kt
@@ -40,6 +40,9 @@ class MainActivity : Activity() {
val bypassSharedUser = SwitchData(
getString(R.string.bypass_shared_user), "", Config.BYPASS_SHARED_USER
)
+ val disableVerificationAgent = SwitchData(
+ getString(R.string.disable_verification_agent), "", Config.DISABLE_VERIFICATION_AGENT
+ )
val dataSet = arrayListOf(
bypassDowngrade,
@@ -47,7 +50,8 @@ class MainActivity : Activity() {
bypassDigest,
enhancedMode,
usePreviousSignatures,
- bypassSharedUser
+ bypassSharedUser,
+ disableVerificationAgent
)
val adapter = MultiTypeListAdapter(dataSet)
diff --git a/app/src/main/java/org/lsposed/corepatch/XposedMain.kt b/app/src/main/java/org/lsposed/corepatch/XposedMain.kt
index f2241e7..07ba06e 100644
--- a/app/src/main/java/org/lsposed/corepatch/XposedMain.kt
+++ b/app/src/main/java/org/lsposed/corepatch/XposedMain.kt
@@ -20,6 +20,8 @@ import org.lsposed.corepatch.hook.ScanPackageUtilsHook
import org.lsposed.corepatch.hook.SharedUserSettingHook
import org.lsposed.corepatch.hook.SigningDetailsHook
import org.lsposed.corepatch.hook.StrictJarVerifierHook
+import org.lsposed.corepatch.hook.VerificationParamsHook
+import org.lsposed.corepatch.hook.VerifyingSessionHook
class XposedMain(
base: XposedInterface, param: XposedModuleInterface.ModuleLoadedParam
@@ -50,6 +52,8 @@ class XposedMain(
SharedUserSettingHook,
SigningDetailsHook,
StrictJarVerifierHook,
+ VerificationParamsHook,
+ VerifyingSessionHook,
)
hooks.forEach { it.init() }
}
diff --git a/app/src/main/java/org/lsposed/corepatch/hook/PackageManagerServiceHook.kt b/app/src/main/java/org/lsposed/corepatch/hook/PackageManagerServiceHook.kt
index 62334d1..59c7553 100644
--- a/app/src/main/java/org/lsposed/corepatch/hook/PackageManagerServiceHook.kt
+++ b/app/src/main/java/org/lsposed/corepatch/hook/PackageManagerServiceHook.kt
@@ -47,6 +47,16 @@ object PackageManagerServiceHook : BaseHook() {
}
})
+ val isVerificationEnabledMethod =
+ packageManagerServiceClazz.declaredMethods.first { m -> m.name == "isVerificationEnabled" }
+ hookBefore(isVerificationEnabledMethod, object : BeforeCallback {
+ override fun before(callback: BeforeHookCallback) {
+ if (Config.isDisableVerificationAgentEnabled()) {
+ callback.returnAndSkip(false)
+ }
+ }
+ })
+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
val doesSignatureMatchForPermissionsMethod =
packageManagerServiceClazz.declaredMethods.first { m -> m.name == "doesSignatureMatchForPermissions" }
diff --git a/app/src/main/java/org/lsposed/corepatch/hook/VerificationParamsHook.kt b/app/src/main/java/org/lsposed/corepatch/hook/VerificationParamsHook.kt
new file mode 100644
index 0000000..6665128
--- /dev/null
+++ b/app/src/main/java/org/lsposed/corepatch/hook/VerificationParamsHook.kt
@@ -0,0 +1,31 @@
+package org.lsposed.corepatch.hook
+
+import android.annotation.SuppressLint
+import android.os.Build
+import io.github.libxposed.api.XposedInterface.BeforeHookCallback
+import org.lsposed.corepatch.Config
+import org.lsposed.corepatch.XposedHelper.BeforeCallback
+import org.lsposed.corepatch.XposedHelper.hookBefore
+import org.lsposed.corepatch.XposedHelper.hostClassLoader
+
+object VerificationParamsHook: BaseHook() {
+ override val name = "VerificationParamsHook"
+
+ @SuppressLint("PrivateApi")
+ override fun hook() {
+ if (Build.VERSION.SDK_INT != Build.VERSION_CODES.TIRAMISU) {
+ return
+ }
+
+ val verificationParamsClazz = hostClassLoader.loadClass("com.android.server.pm.VerificationParams")
+
+ val isVerificationEnabledMethod = verificationParamsClazz.declaredMethods.first { m -> m.name == "isVerificationEnabled" }
+ hookBefore(isVerificationEnabledMethod, object : BeforeCallback {
+ override fun before(callback: BeforeHookCallback) {
+ if (Config.isDisableVerificationAgentEnabled()) {
+ callback.returnAndSkip(false)
+ }
+ }
+ })
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/lsposed/corepatch/hook/VerifyingSessionHook.kt b/app/src/main/java/org/lsposed/corepatch/hook/VerifyingSessionHook.kt
new file mode 100644
index 0000000..077cb83
--- /dev/null
+++ b/app/src/main/java/org/lsposed/corepatch/hook/VerifyingSessionHook.kt
@@ -0,0 +1,34 @@
+package org.lsposed.corepatch.hook
+
+import android.annotation.SuppressLint
+import android.os.Build
+import io.github.libxposed.api.XposedInterface.BeforeHookCallback
+import org.lsposed.corepatch.Config
+import org.lsposed.corepatch.XposedHelper.BeforeCallback
+import org.lsposed.corepatch.XposedHelper.hookBefore
+import org.lsposed.corepatch.XposedHelper.hostClassLoader
+
+object VerifyingSessionHook : BaseHook() {
+ override val name = "VerifyingSessionHook"
+
+ @SuppressLint("PrivateApi")
+ override fun hook() {
+ if (Build.VERSION.SDK_INT > Build.VERSION_CODES.TIRAMISU) {
+ return
+ }
+
+ val verifyingSessionClazz =
+ hostClassLoader.loadClass("com.android.server.pm.VerifyingSession")
+
+ val isVerificationEnabledMethod =
+ verifyingSessionClazz.declaredMethods.first { m -> m.name == "isVerificationEnabled" }
+ hookBefore(isVerificationEnabledMethod, object : BeforeCallback {
+ override fun before(callback: BeforeHookCallback) {
+ if (Config.isDisableVerificationAgentEnabled()) {
+ callback.returnAndSkip(false)
+ }
+ }
+ })
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 7f265a1..44c0479 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -7,4 +7,5 @@
Enhanced mode
Use previous signatures
Bypass shared user verification
+ Disable Package Verification Agent
\ No newline at end of file