From ae39cbef56587792e28214f119af4d66f08e7f58 Mon Sep 17 00:00:00 2001 From: programminghoch10 <16062290+programminghoch10@users.noreply.github.com> Date: Mon, 18 Aug 2025 18:23:25 +0200 Subject: [PATCH] Implement GrantAllPermissions --- GrantAllPermissions/Readme.md | 6 +++ GrantAllPermissions/build.gradle.kts | 13 +++++ .../src/main/AndroidManifest.xml | 24 +++++++++ .../src/main/assets/xposed_init | 1 + .../GrantAllPermissions/Hook.kt | 51 +++++++++++++++++++ .../src/main/res/values/arrays.xml | 6 +++ modules.gradle.kts | 1 + 7 files changed, 102 insertions(+) create mode 100644 GrantAllPermissions/Readme.md create mode 100644 GrantAllPermissions/build.gradle.kts create mode 100644 GrantAllPermissions/src/main/AndroidManifest.xml create mode 100644 GrantAllPermissions/src/main/assets/xposed_init create mode 100644 GrantAllPermissions/src/main/java/com/programminghoch10/GrantAllPermissions/Hook.kt create mode 100644 GrantAllPermissions/src/main/res/values/arrays.xml diff --git a/GrantAllPermissions/Readme.md b/GrantAllPermissions/Readme.md new file mode 100644 index 0000000..bf38774 --- /dev/null +++ b/GrantAllPermissions/Readme.md @@ -0,0 +1,6 @@ +# GrantAllPermissions + +Make Android grant all permissions requested by apps. + +This module grants all permissions from system-side when applied to `android` +and pretends all permissions are granted when applied to individual apps. diff --git a/GrantAllPermissions/build.gradle.kts b/GrantAllPermissions/build.gradle.kts new file mode 100644 index 0000000..68a85e4 --- /dev/null +++ b/GrantAllPermissions/build.gradle.kts @@ -0,0 +1,13 @@ +plugins { + alias(libs.plugins.buildlogic.android.application) + alias(libs.plugins.buildlogic.kotlin.android) +} + +android { + namespace = "com.programminghoch10.GrantAllPermissions" + + defaultConfig { + minSdk = 21 + targetSdk = 35 + } +} diff --git a/GrantAllPermissions/src/main/AndroidManifest.xml b/GrantAllPermissions/src/main/AndroidManifest.xml new file mode 100644 index 0000000..a38338c --- /dev/null +++ b/GrantAllPermissions/src/main/AndroidManifest.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + diff --git a/GrantAllPermissions/src/main/assets/xposed_init b/GrantAllPermissions/src/main/assets/xposed_init new file mode 100644 index 0000000..68f5b1e --- /dev/null +++ b/GrantAllPermissions/src/main/assets/xposed_init @@ -0,0 +1 @@ +com.programminghoch10.GrantAllPermissions.Hook diff --git a/GrantAllPermissions/src/main/java/com/programminghoch10/GrantAllPermissions/Hook.kt b/GrantAllPermissions/src/main/java/com/programminghoch10/GrantAllPermissions/Hook.kt new file mode 100644 index 0000000..a354861 --- /dev/null +++ b/GrantAllPermissions/src/main/java/com/programminghoch10/GrantAllPermissions/Hook.kt @@ -0,0 +1,51 @@ +package com.programminghoch10.GrantAllPermissions + +import android.content.pm.PackageManager +import de.robv.android.xposed.IXposedHookLoadPackage +import de.robv.android.xposed.XC_MethodReplacement +import de.robv.android.xposed.XposedBridge +import de.robv.android.xposed.XposedHelpers +import de.robv.android.xposed.callbacks.XC_LoadPackage +import de.robv.android.xposed.XC_MethodHook as MethodHook + +class Hook : IXposedHookLoadPackage { + + private val returnPermissionGrantedHook = XC_MethodReplacement.returnConstant(PackageManager.PERMISSION_GRANTED) + + override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { + when (lpparam.packageName) { + "android" -> androidHook(lpparam) + else -> appHook(lpparam) + } + } + + private fun androidHook(lpparam: XC_LoadPackage.LoadPackageParam) { + val ActivityManagerServiceClass = XposedHelpers.findClass("com.android.server.am.ActivityManagerService", lpparam.classLoader) + XposedBridge.hookAllMethods(ActivityManagerServiceClass, "checkComponentPermission", returnPermissionGrantedHook) + XposedBridge.hookAllMethods(ActivityManagerServiceClass, "checkPermissionForDevice", returnPermissionGrantedHook) + XposedBridge.hookAllMethods(ActivityManagerServiceClass, "checkPermission", returnPermissionGrantedHook) + val PermissionManagerServiceClass = XposedHelpers.findClass("com.android.server.pm.permission.PermissionManagerService", lpparam.classLoader) + XposedBridge.hookAllMethods(PermissionManagerServiceClass, "checkPermission", returnPermissionGrantedHook) + XposedBridge.hookAllMethods(PermissionManagerServiceClass, "checkUidPermission", returnPermissionGrantedHook) + XposedHelpers.findAndHookMethod( + PermissionManagerServiceClass, + "getAllPermissionStates", + String::class.java, + String::class.java, + Int::class.java, + object : MethodHook() { + override fun afterHookedMethod(param: MethodHookParam) { + @Suppress("UNCHECKED_CAST") val result = param.result as Map + result.forEach { (_, value) -> XposedHelpers.setBooleanField(value, "mGranted", true) } + } + }) + } + + private fun appHook(lpparam: XC_LoadPackage.LoadPackageParam) { + val PermissionManagerClass = XposedHelpers.findClass("android.permission.PermissionManager", lpparam.classLoader) + XposedHelpers.findAndHookMethod(PermissionManagerClass, "checkPermission", returnPermissionGrantedHook) + XposedHelpers.findAndHookMethod(PermissionManagerClass, "checkPermissionUncached", returnPermissionGrantedHook) + val PermissionCheckerManagerClass = XposedHelpers.findClass("android.permission.PermissionChecker", lpparam.classLoader) + XposedBridge.hookAllMethods(PermissionCheckerManagerClass, "checkPermission", returnPermissionGrantedHook) + } +} diff --git a/GrantAllPermissions/src/main/res/values/arrays.xml b/GrantAllPermissions/src/main/res/values/arrays.xml new file mode 100644 index 0000000..db6e46a --- /dev/null +++ b/GrantAllPermissions/src/main/res/values/arrays.xml @@ -0,0 +1,6 @@ + + + + android + + diff --git a/modules.gradle.kts b/modules.gradle.kts index 352f7fa..e09be5c 100644 --- a/modules.gradle.kts +++ b/modules.gradle.kts @@ -9,6 +9,7 @@ include(":ClassHunter") include(":CodecMod") include(":DontResetIfBootedAndConnected") include(":FreeNotifications") +include(":GrantAllPermissions") include(":KeepSplitScreenRatio") include(":MotionEventMod") include(":MuteSlf4jWarnings")