From d70bfd98f8621770597e0bf89fe3c7ea80464a59 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 | 13 +++++ 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 +++ README.md | 1 + modules.gradle.kts | 1 + 8 files changed, 110 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..5176e1e --- /dev/null +++ b/GrantAllPermissions/Readme.md @@ -0,0 +1,13 @@ +# 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. + +Please note: +- This module should only be used for development and testing purposes + and should never be run on production devices. +- This module will grant the + [notification permission](https://developer.android.com/develop/ui/views/notifications/notification-permission) + and thus all apps will be able to send notifications. 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/README.md b/README.md index 1341bd3..e0f8ab8 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,7 @@ A collection of small Xposed Modules. | [Don'tResetIfBootedAndConnected](DontResetIfBootedAndConnected) | [@binarynoise](https://github.com/binarynoise) | | [GitHub](https://github.com/binarynoise/XposedModulets/releases?q=dontResetIfBootedAndConnected) | | [FreeNotifications](FreeNotifications) | [@binarynoise](https://github.com/binarynoise) | Enables customization for all Notification Channels again | [GitHub](https://github.com/binarynoise/XposedModulets/releases?q=freeNotifications) [IzzyOnDroid](https://apt.izzysoft.de/fdroid/index/apk/de.binarynoise.freeNotifications) | | [GalaxyWearable](GalaxyWearable) | [@programminghoch10](https://github.com/programminghoch10) | Enables running Samsung's GalaxyWearable app and compantions on modded Samsung devices. | [GitHub](https://github.com/binarynoise/XposedModulets/releases?q=GalaxyWearable) | +| [GrantAllPermissions](GrantAllPermissions) | [@programminghoch10](https://github.com/programminghoch10) | Grant all permissions | [GitHub](https://github.com/binarynoise/XposedModulets/releases?q=GrantAllPermissions) | [MotionEventMod](MotionEventMod) | [@programminghoch10](https://github.com/programminghoch10) | Disable touch input for some seconds after the stylus was in use | [GitHub](https://github.com/binarynoise/XposedModulets/releases?q=MotionEventMod) | | [MuteSlf4jWarnings](MuteSlf4jWarnings) | [@binarynoise](https://github.com/binarynoise) | Mutes all slf4j warnings | [GitHub](https://github.com/binarynoise/XposedModulets/releases?q=muteSlf4jWarnings) | | [OpenWifiOnTop](OpenWifiOnTop) | [@binarynoise](https://github.com/binarynoise) | Prioritizes open Wi-Fi networks in the Wi-Fi picker | [GitHub](https://github.com/binarynoise/XposedModulets/releases?q=OpenWifiOnTop) | diff --git a/modules.gradle.kts b/modules.gradle.kts index a3d053f..4724e73 100644 --- a/modules.gradle.kts +++ b/modules.gradle.kts @@ -11,6 +11,7 @@ include(":DontResetIfBootedAndConnected") include(":EnableCallRecording") include(":FreeNotifications") include(":GalaxyWearable") +include(":GrantAllPermissions") include(":KeepSplitScreenRatio") include(":MotionEventMod") include(":MuteSlf4jWarnings")