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 @@
-
+