Skip to content

Commit 4e877d7

Browse files
Implement GrantAllPermissions
1 parent dfb7a76 commit 4e877d7

File tree

7 files changed

+102
-0
lines changed

7 files changed

+102
-0
lines changed

GrantAllPermissions/Readme.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# GrantAllPermissions
2+
3+
Make Android grant all permissions requested by apps.
4+
5+
This module grants all permissions from system-side when applied to `android`
6+
and pretends all permissions are granted when applied to individual apps.

GrantAllPermissions/build.gradle.kts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
plugins {
2+
alias(libs.plugins.buildlogic.android.application)
3+
alias(libs.plugins.buildlogic.kotlin.android)
4+
}
5+
6+
android {
7+
namespace = "com.programminghoch10.GrantAllPermissions"
8+
9+
defaultConfig {
10+
minSdk = 21
11+
targetSdk = 35
12+
}
13+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<manifest
3+
xmlns:android="http://schemas.android.com/apk/res/android">
4+
5+
<application android:label="GrantAllPermissions">
6+
<meta-data
7+
android:name="xposedmodule"
8+
android:value="true"
9+
/>
10+
<meta-data
11+
android:name="xposeddescription"
12+
android:value="Grant all permissions requested by apps."
13+
/>
14+
<meta-data
15+
android:name="xposedminversion"
16+
android:value="53"
17+
/>
18+
<meta-data
19+
android:name="xposedscope"
20+
android:resource="@array/scope"
21+
/>
22+
</application>
23+
24+
</manifest>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
com.programminghoch10.GrantAllPermissions.Hook
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package com.programminghoch10.GrantAllPermissions
2+
3+
import android.content.pm.PackageManager
4+
import de.robv.android.xposed.IXposedHookLoadPackage
5+
import de.robv.android.xposed.XC_MethodReplacement
6+
import de.robv.android.xposed.XposedBridge
7+
import de.robv.android.xposed.XposedHelpers
8+
import de.robv.android.xposed.callbacks.XC_LoadPackage
9+
import de.robv.android.xposed.XC_MethodHook as MethodHook
10+
11+
class Hook : IXposedHookLoadPackage {
12+
13+
private val returnPermissionGrantedHook = XC_MethodReplacement.returnConstant(PackageManager.PERMISSION_GRANTED)
14+
15+
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
16+
when (lpparam.packageName) {
17+
"android" -> androidHook(lpparam)
18+
else -> appHook(lpparam)
19+
}
20+
}
21+
22+
private fun androidHook(lpparam: XC_LoadPackage.LoadPackageParam) {
23+
val ActivityManagerServiceClass = XposedHelpers.findClass("com.android.server.am.ActivityManagerService", lpparam.classLoader)
24+
XposedBridge.hookAllMethods(ActivityManagerServiceClass, "checkComponentPermission", returnPermissionGrantedHook)
25+
XposedBridge.hookAllMethods(ActivityManagerServiceClass, "checkPermissionForDevice", returnPermissionGrantedHook)
26+
XposedBridge.hookAllMethods(ActivityManagerServiceClass, "checkPermission", returnPermissionGrantedHook)
27+
val PermissionManagerServiceClass = XposedHelpers.findClass("com.android.server.pm.permission.PermissionManagerService", lpparam.classLoader)
28+
XposedBridge.hookAllMethods(PermissionManagerServiceClass, "checkPermission", returnPermissionGrantedHook)
29+
XposedBridge.hookAllMethods(PermissionManagerServiceClass, "checkUidPermission", returnPermissionGrantedHook)
30+
XposedHelpers.findAndHookMethod(
31+
PermissionManagerServiceClass,
32+
"getAllPermissionStates",
33+
String::class.java,
34+
String::class.java,
35+
Int::class.java,
36+
object : MethodHook() {
37+
override fun afterHookedMethod(param: MethodHookParam) {
38+
@Suppress("UNCHECKED_CAST") val result = param.result as Map<String, Object>
39+
result.forEach { (_, value) -> XposedHelpers.setBooleanField(value, "mGranted", true) }
40+
}
41+
})
42+
}
43+
44+
private fun appHook(lpparam: XC_LoadPackage.LoadPackageParam) {
45+
val PermissionManagerClass = XposedHelpers.findClass("android.permission.PermissionManager", lpparam.classLoader)
46+
XposedHelpers.findAndHookMethod(PermissionManagerClass, "checkPermission", returnPermissionGrantedHook)
47+
XposedHelpers.findAndHookMethod(PermissionManagerClass, "checkPermissionUncached", returnPermissionGrantedHook)
48+
val PermissionCheckerManagerClass = XposedHelpers.findClass("android.permission.PermissionChecker", lpparam.classLoader)
49+
XposedBridge.hookAllMethods(PermissionCheckerManagerClass, "checkPermission", returnPermissionGrantedHook)
50+
}
51+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<resources>
3+
<string-array name="scope">
4+
<item>android</item>
5+
</string-array>
6+
</resources>

settings.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ include(":ClassHunter")
5151
include(":CodecMod")
5252
include(":DontResetIfBootedAndConnected")
5353
include(":FreeNotifications")
54+
include(":GrantAllPermissions")
5455
include(":MotionEventMod")
5556
include(":MuteSlf4jWarnings")
5657
include(":OpenWifiOnTop")

0 commit comments

Comments
 (0)