From ed968eb7cc80e5067eac6b4d46c7a511dc8a149d Mon Sep 17 00:00:00 2001 From: solohsu Date: Fri, 14 Jun 2019 14:54:03 +0800 Subject: [PATCH] Exclude WebViewLoader, webview_zygote and isolated processes --- .../com/elderdrivers/riru/edxp/core/Main.java | 27 ++++++++-- .../riru/edxp/framework/ProcessHelper.java | 52 +++++++++++++++++++ .../riru/edxp/util/ClassLoaderUtils.java | 2 +- .../elderdrivers/riru/edxp/util/Utils.java | 2 +- edxp-core/build.gradle | 4 +- .../common/util_functions.sh | 2 +- .../riru/edxp/sandhook/dexmaker/DexLog.java | 2 +- .../riru/edxp/yahfa/dexmaker/DexLog.java | 2 +- xposed-bridge/src/main/AndroidManifest.xml | 3 +- 9 files changed, 82 insertions(+), 14 deletions(-) create mode 100644 edxp-common/src/main/java/com/elderdrivers/riru/edxp/framework/ProcessHelper.java diff --git a/edxp-common/src/main/java/com/elderdrivers/riru/edxp/core/Main.java b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/core/Main.java index bb5c0c35..36ced206 100644 --- a/edxp-common/src/main/java/com/elderdrivers/riru/edxp/core/Main.java +++ b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/core/Main.java @@ -4,8 +4,9 @@ import android.annotation.SuppressLint; import android.os.Process; import com.elderdrivers.riru.common.KeepAll; -import com.elderdrivers.riru.edxp.BuildConfig; +import com.elderdrivers.riru.edxp.common.BuildConfig; import com.elderdrivers.riru.edxp.config.ConfigManager; +import com.elderdrivers.riru.edxp.framework.ProcessHelper; import com.elderdrivers.riru.edxp.util.Utils; import java.security.AccessController; @@ -18,6 +19,7 @@ import java.util.concurrent.atomic.AtomicReference; @SuppressLint("DefaultLocale") public class Main implements KeepAll { + private static final boolean logEnabled = BuildConfig.DEBUG; private static String forkAndSpecializePramsStr = ""; private static String forkSystemServerPramsStr = ""; @@ -36,11 +38,14 @@ public class Main implements KeepAll { String niceName, int[] fdsToClose, int[] fdsToIgnore, boolean startChildZygote, String instructionSet, String appDataDir) { + if (isBlackListedProcess(uid)) { + return; + } final EdxpImpl edxp = getEdxpImpl(); if (edxp == null || !edxp.isInitialized()) { return; } - if (BuildConfig.DEBUG) { + if (logEnabled) { forkAndSpecializePramsStr = String.format( "Zygote#forkAndSpecialize(%d, %d, %s, %d, %s, %d, %s, %s, %s, %s, %s, %s, %s)", uid, gid, Arrays.toString(gids), debugFlags, Arrays.toString(rlimits), @@ -60,12 +65,17 @@ public class Main implements KeepAll { } public static void forkAndSpecializePost(int pid, String appDataDir, String niceName) { + if (isBlackListedProcess(Process.myUid())) { + return; + } final EdxpImpl edxp = getEdxpImpl(); if (edxp == null || !edxp.isInitialized()) { return; } if (pid == 0) { - Utils.logD(forkAndSpecializePramsStr + " = " + Process.myPid()); + if (logEnabled) { + Utils.logI(forkAndSpecializePramsStr + " = " + Process.myPid()); + } if (ConfigManager.isBlackWhiteListEnabled()) { edxp.getBlackWhiteListProxy().forkAndSpecializePost(pid, appDataDir, niceName); } else { @@ -83,7 +93,7 @@ public class Main implements KeepAll { if (edxp == null || !edxp.isInitialized()) { return; } - if (BuildConfig.DEBUG) { + if (logEnabled) { forkSystemServerPramsStr = String.format("Zygote#forkSystemServer(%d, %d, %s, %d, %s, %d, %d)", uid, gid, Arrays.toString(gids), debugFlags, Arrays.toString(rlimits), permittedCapabilities, effectiveCapabilities); @@ -103,7 +113,9 @@ public class Main implements KeepAll { return; } if (pid == 0) { - Utils.logD(forkSystemServerPramsStr + " = " + Process.myPid()); + if (logEnabled) { + Utils.logI(forkSystemServerPramsStr + " = " + Process.myPid()); + } if (ConfigManager.isBlackWhiteListEnabled()) { edxp.getBlackWhiteListProxy().forkSystemServerPost(pid); } else { @@ -145,4 +157,9 @@ public class Main implements KeepAll { }); } + private static boolean isBlackListedProcess(int uid) { + return ProcessHelper.isIsolated(uid) + || ProcessHelper.isRELROUpdater(uid) + || ProcessHelper.isWebViewZygote(uid); + } } diff --git a/edxp-common/src/main/java/com/elderdrivers/riru/edxp/framework/ProcessHelper.java b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/framework/ProcessHelper.java new file mode 100644 index 00000000..6018a1ea --- /dev/null +++ b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/framework/ProcessHelper.java @@ -0,0 +1,52 @@ +package com.elderdrivers.riru.edxp.framework; + +import de.robv.android.xposed.XposedHelpers; + +public class ProcessHelper { + + static { + // WEBVIEW_ZYGOTE_UID differ among versions + WEBVIEW_ZYGOTE_UID = XposedHelpers.getStaticIntField(android.os.Process.class, "WEBVIEW_ZYGOTE_UID"); + } + + /** + * Defines the UID/GID for the shared RELRO file updater process. + */ + public static final int SHARED_RELRO_UID = 1037; + + /** + * Defines the UID/GID for the WebView zygote process. + */ + public static final int WEBVIEW_ZYGOTE_UID; + + /** + * First uid used for fully isolated sandboxed processes (with no permissions of their own) + */ + public static final int FIRST_ISOLATED_UID = 99000; + /** + * Last uid used for fully isolated sandboxed processes (with no permissions of their own) + */ + public static final int LAST_ISOLATED_UID = 99999; + + /** + * Range of uids allocated for a user. + */ + public static final int PER_USER_RANGE = 100000; + + public static int getAppId(int uid) { + return uid % PER_USER_RANGE; + } + + public static boolean isRELROUpdater(int uid) { + return getAppId(uid) == SHARED_RELRO_UID; + } + + public static boolean isWebViewZygote(int uid) { + return getAppId(uid) == WEBVIEW_ZYGOTE_UID; + } + + public static boolean isIsolated(int uid) { + uid = getAppId(uid); + return uid >= FIRST_ISOLATED_UID && uid <= LAST_ISOLATED_UID; + } +} diff --git a/edxp-common/src/main/java/com/elderdrivers/riru/edxp/util/ClassLoaderUtils.java b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/util/ClassLoaderUtils.java index 93133585..09e429b3 100644 --- a/edxp-common/src/main/java/com/elderdrivers/riru/edxp/util/ClassLoaderUtils.java +++ b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/util/ClassLoaderUtils.java @@ -3,7 +3,7 @@ package com.elderdrivers.riru.edxp.util; import android.os.Build; import android.util.ArrayMap; -import com.elderdrivers.riru.edxp.BuildConfig; +import com.elderdrivers.riru.edxp.common.BuildConfig; import java.lang.reflect.Field; import java.util.ArrayList; diff --git a/edxp-common/src/main/java/com/elderdrivers/riru/edxp/util/Utils.java b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/util/Utils.java index 4f0e7b24..b7e6bd76 100644 --- a/edxp-common/src/main/java/com/elderdrivers/riru/edxp/util/Utils.java +++ b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/util/Utils.java @@ -2,7 +2,7 @@ package com.elderdrivers.riru.edxp.util; import android.util.Log; -import com.elderdrivers.riru.edxp.BuildConfig; +import com.elderdrivers.riru.edxp.common.BuildConfig; import de.robv.android.xposed.XposedHelpers; diff --git a/edxp-core/build.gradle b/edxp-core/build.gradle index 264363c6..48f6599d 100644 --- a/edxp-core/build.gradle +++ b/edxp-core/build.gradle @@ -3,10 +3,10 @@ import org.gradle.internal.os.OperatingSystem apply plugin: 'com.android.library' -version "v0.4.4.2_alpha" +version "v0.4.4.3_alpha" ext { - versionCode = "4420" + versionCode = "4430" module_name = "EdXposed" jar_dest_dir = "${projectDir}/template_override/system/framework/" is_windows = OperatingSystem.current().isWindows() diff --git a/edxp-core/template_override/common/util_functions.sh b/edxp-core/template_override/common/util_functions.sh index 9aaed487..be659c97 100644 --- a/edxp-core/template_override/common/util_functions.sh +++ b/edxp-core/template_override/common/util_functions.sh @@ -1,6 +1,6 @@ #!/system/bin/sh -EDXP_VERSION="0.4.4.2_alpha (4420)" +EDXP_VERSION="0.4.4.3_alpha (4430)" ANDROID_SDK=`getprop ro.build.version.sdk` BUILD_DESC=`getprop ro.build.description` PRODUCT=`getprop ro.build.product` diff --git a/edxp-sandhook/src/main/java/com/elderdrivers/riru/edxp/sandhook/dexmaker/DexLog.java b/edxp-sandhook/src/main/java/com/elderdrivers/riru/edxp/sandhook/dexmaker/DexLog.java index b2dd0f11..616e56d1 100644 --- a/edxp-sandhook/src/main/java/com/elderdrivers/riru/edxp/sandhook/dexmaker/DexLog.java +++ b/edxp-sandhook/src/main/java/com/elderdrivers/riru/edxp/sandhook/dexmaker/DexLog.java @@ -2,7 +2,7 @@ package com.elderdrivers.riru.edxp.sandhook.dexmaker; import android.util.Log; -import com.elderdrivers.riru.edxp.BuildConfig; +import com.elderdrivers.riru.edxp.sandhook.BuildConfig; public class DexLog { diff --git a/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/dexmaker/DexLog.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/dexmaker/DexLog.java index f7729737..3472f355 100644 --- a/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/dexmaker/DexLog.java +++ b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/dexmaker/DexLog.java @@ -2,7 +2,7 @@ package com.elderdrivers.riru.edxp.yahfa.dexmaker; import android.util.Log; -import com.elderdrivers.riru.edxp.BuildConfig; +import com.elderdrivers.riru.edxp.yahfa.BuildConfig; public class DexLog { diff --git a/xposed-bridge/src/main/AndroidManifest.xml b/xposed-bridge/src/main/AndroidManifest.xml index cd2f6ed7..7a62fb96 100644 --- a/xposed-bridge/src/main/AndroidManifest.xml +++ b/xposed-bridge/src/main/AndroidManifest.xml @@ -1,2 +1 @@ - +