From 4f5258758632d2c9cb4b1c001259b7e870146b52 Mon Sep 17 00:00:00 2001 From: topjohnwu Date: Sat, 26 Mar 2022 13:43:43 -0700 Subject: [PATCH] Support ADB shell if app shares its UID --- .../com/topjohnwu/magisk/core/su/SuRequestHandler.kt | 2 +- app/src/main/java/com/topjohnwu/magisk/ktx/XAndroid.kt | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/topjohnwu/magisk/core/su/SuRequestHandler.kt b/app/src/main/java/com/topjohnwu/magisk/core/su/SuRequestHandler.kt index af3dbe24b..f56390ce1 100644 --- a/app/src/main/java/com/topjohnwu/magisk/core/su/SuRequestHandler.kt +++ b/app/src/main/java/com/topjohnwu/magisk/core/su/SuRequestHandler.kt @@ -36,7 +36,7 @@ class SuRequestHandler( // Never allow com.topjohnwu.magisk (could be malware) if (pkgInfo.packageName == BuildConfig.APPLICATION_ID) { - Shell.cmd("(pm uninstall ${BuildConfig.APPLICATION_ID})& >/dev/null 2>&1").exec() + Shell.cmd("(pm uninstall ${BuildConfig.APPLICATION_ID} >/dev/null 2>&1)&").exec() return false } diff --git a/app/src/main/java/com/topjohnwu/magisk/ktx/XAndroid.kt b/app/src/main/java/com/topjohnwu/magisk/ktx/XAndroid.kt index cb20cc2a7..91cda056c 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ktx/XAndroid.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ktx/XAndroid.kt @@ -19,6 +19,7 @@ import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.LayerDrawable import android.net.Uri import android.os.Build.VERSION.SDK_INT +import android.os.Process import android.view.View import android.view.ViewGroup import android.view.ViewTreeObserver @@ -272,7 +273,13 @@ fun PackageManager.getPackageInfo(uid: Int, pid: Int): PackageInfo? { if (pid <= 0) return null // Try to find package name from PID - val proc = RootUtils.obj?.getAppProcess(pid) ?: return null + val proc = RootUtils.obj?.getAppProcess(pid) + ?: return if (uid == Process.SHELL_UID) { + // It is possible that some apps installed are sharing UID with shell. + // We will not be able to find a package from the active process list, + // because the client is forked from ADB shell, not any app process. + getPackageInfo("com.android.shell", flag) + } else null val pkg = proc.pkgList[0] getPackageInfo(pkg, flag) } else {