|
| 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 | +} |
0 commit comments