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")