Exclude WebViewLoader, webview_zygote and isolated processes

This commit is contained in:
solohsu 2019-06-14 14:54:03 +08:00
parent 7eaae6d898
commit ed968eb7cc
9 changed files with 82 additions and 14 deletions

View File

@ -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);
}
}

View File

@ -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;
}
}

View File

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

View File

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

View File

@ -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()

View File

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

View File

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

View File

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

View File

@ -1,2 +1 @@
<manifest package="com.elderdrivers.riru.edxp"
xmlns:android="http://schemas.android.com/apk/res/android"/>
<manifest package="com.elderdrivers.riru.edxp.bridge" />