drop support for really old Blacklist App

remove the support of really old `com.flarejune.xposedblacklist`.
use the module blacklist function within EdXposed Manager instead.
This commit is contained in:
Victor Tseng 2020-03-23 22:36:33 +08:00 committed by Jim Wu
parent 9695a983b8
commit 5446571664
7 changed files with 1 additions and 132 deletions

View File

@ -8,7 +8,6 @@ import android.content.res.CompatibilityInfo;
import android.content.res.XResources;
import com.elderdrivers.riru.edxp.config.ConfigManager;
import com.elderdrivers.riru.edxp.hooker.XposedBlackListHooker;
import com.elderdrivers.riru.edxp.util.Hookers;
import com.elderdrivers.riru.edxp.util.Utils;
@ -22,9 +21,6 @@ public class HandleBindApp extends XC_MethodHook {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
if (XposedBlackListHooker.shouldDisableHooks("")) {
return;
}
try {
Hookers.logD("ActivityThread#handleBindApplication() starts");
ActivityThread activityThread = (ActivityThread) param.thisObject;
@ -36,10 +32,6 @@ public class HandleBindApp extends XC_MethodHook {
Utils.logD("processName=" + ConfigManager.appProcessName +
", packageName=" + reportedPackageName + ", appDataDir=" + ConfigManager.appDataDir);
if (XposedBlackListHooker.shouldDisableHooks(reportedPackageName)) {
return;
}
ComponentName instrumentationName = (ComponentName) XposedHelpers.getObjectField(bindData, "instrumentationName");
if (instrumentationName != null) {
Hookers.logD("Instrumentation detected, disabling framework for");

View File

@ -5,7 +5,6 @@ import android.app.LoadedApk;
import android.content.res.XResources;
import android.util.Log;
import com.elderdrivers.riru.edxp.hooker.XposedBlackListHooker;
import com.elderdrivers.riru.edxp.util.Hookers;
import de.robv.android.xposed.XC_MethodHook;
@ -18,10 +17,6 @@ public class LoadedApkCstr extends XC_MethodHook {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
if (XposedBlackListHooker.shouldDisableHooks("")) {
return;
}
Hookers.logD("LoadedApk#<init> starts");
try {
@ -32,10 +27,6 @@ public class LoadedApkCstr extends XC_MethodHook {
XResources.setPackageNameForResDir(packageName, loadedApk.getResDir());
if (XposedBlackListHooker.shouldDisableHooks(packageName)) {
return;
}
if (packageName.equals("android")) {
Hookers.logD("LoadedApk#<init> is android, skip: " + mAppDir);
return;

View File

@ -3,7 +3,6 @@ package com.elderdrivers.riru.edxp._hooker.impl;
import android.app.LoadedApk;
import com.elderdrivers.riru.edxp.hooker.SliceProviderFix;
import com.elderdrivers.riru.edxp.hooker.XposedBlackListHooker;
import com.elderdrivers.riru.edxp.hooker.XposedInstallerHooker;
import com.elderdrivers.riru.edxp.util.Hookers;
@ -14,8 +13,6 @@ import de.robv.android.xposed.callbacks.XC_LoadPackage;
import static com.elderdrivers.riru.edxp.config.InstallerChooser.INSTALLER_PACKAGE_NAME;
import static com.elderdrivers.riru.edxp.hooker.SliceProviderFix.SYSTEMUI_PACKAGE_NAME;
import static com.elderdrivers.riru.edxp.hooker.XposedBlackListHooker.BLACK_LIST_PACKAGE_NAME;
public class LoadedApkGetCL extends XC_MethodHook {
@ -38,10 +35,6 @@ public class LoadedApkGetCL extends XC_MethodHook {
try {
if (XposedBlackListHooker.shouldDisableHooks("")) {
return;
}
Hookers.logD("LoadedApk#getClassLoader starts");
LoadedApk loadedApk = (LoadedApk) param.thisObject;
@ -70,9 +63,6 @@ public class LoadedApkGetCL extends XC_MethodHook {
if (this.packageName.equals(INSTALLER_PACKAGE_NAME)) {
XposedInstallerHooker.hookXposedInstaller(lpparam.classLoader);
}
if (this.packageName.equals(BLACK_LIST_PACKAGE_NAME)) {
XposedBlackListHooker.hook(lpparam.classLoader);
}
if (this.packageName.equals(SYSTEMUI_PACKAGE_NAME)) {
SliceProviderFix.hook();
}

View File

@ -1,7 +1,5 @@
package com.elderdrivers.riru.edxp.config;
import com.elderdrivers.riru.edxp.hooker.XposedBlackListHooker;
public class BaseEdxpConfig implements EdxpConfig {
@Override
@ -9,11 +7,6 @@ public class BaseEdxpConfig implements EdxpConfig {
return InstallerChooser.INSTALLER_DATA_BASE_DIR;
}
@Override
public String getBlackListModulePackageName() {
return XposedBlackListHooker.BLACK_LIST_PACKAGE_NAME;
}
@Override
public boolean isDynamicModulesMode() {
return ConfigManager.isDynamicModulesEnabled();
@ -23,6 +16,7 @@ public class BaseEdxpConfig implements EdxpConfig {
public boolean isResourcesHookEnabled() {
return ConfigManager.isResourcesHookEnabled();
}
@Override
public boolean isNoModuleLogEnabled() {
return ConfigManager.isNoModuleLogEnabled();

View File

@ -1,87 +0,0 @@
package com.elderdrivers.riru.edxp.hooker;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Context;
import android.content.ContextWrapper;
import android.os.Build;
import com.elderdrivers.riru.edxp.util.Utils;
import java.io.File;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XSharedPreferences;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;
import static com.elderdrivers.riru.edxp.config.InstallerChooser.INSTALLER_PACKAGE_NAME;
import static com.elderdrivers.riru.edxp.util.FileUtils.IS_USING_PROTECTED_STORAGE;
public class XposedBlackListHooker {
public static final String BLACK_LIST_PACKAGE_NAME = "com.flarejune.xposedblacklist";
private static final String BLACK_LIST_PREF_NAME = "list";
private static final String PREF_KEY_BLACK_LIST = "blackList";
public static final String PREF_FILE_PATH = (IS_USING_PROTECTED_STORAGE ? "/data/user_de/0/" : "/data/data")
+ BLACK_LIST_PACKAGE_NAME + "/shared_prefs/" + BLACK_LIST_PREF_NAME + ".xml";
private static final XSharedPreferences PREFERENCES = new XSharedPreferences(new File(PREF_FILE_PATH));
// always white list. empty string is to make sure blackList does not contain empty packageName
private static final List<String> WHITE_LIST = Arrays.asList(INSTALLER_PACKAGE_NAME, BLACK_LIST_PACKAGE_NAME, "");
static {
try {
PREFERENCES.makeWorldReadable();
} catch (Throwable throwable) {
Utils.logE("error making pref worldReadable", throwable);
}
}
public static boolean shouldDisableHooks(String packageName) {
return XposedBridge.disableHooks || getBlackList().contains(packageName);
}
public static Set<String> getBlackList() {
try {
PREFERENCES.reload();
Set<String> result = PREFERENCES.getStringSet(PREF_KEY_BLACK_LIST, new HashSet<String>());
if (result != null) result.removeAll(WHITE_LIST);
return result;
} catch (Throwable throwable) {
Utils.logE("error when reading black list", throwable);
return new HashSet<>();
}
}
public static void hook(ClassLoader classLoader) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
return;
}
try {
XposedHelpers.findAndHookMethod(ContextWrapper.class, "getSharedPreferences", String.class, int.class, new XC_MethodHook() {
@TargetApi(Build.VERSION_CODES.N)
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
try {
String prefName = (String) param.args[0];
if (!prefName.equals(BLACK_LIST_PREF_NAME)) {
return;
}
Activity activity = (Activity) param.thisObject;
Context context = activity.createDeviceProtectedStorageContext();
context.moveSharedPreferencesFrom(activity, prefName);
param.setResult(context.getSharedPreferences(prefName, (int) param.args[1]));
} catch (Throwable throwable) {
Utils.logE("error hooking Xposed BlackList", throwable);
}
}
});
} catch (Throwable throwable) {
Utils.logE("error hooking Xposed BlackList", throwable);
}
}
}

View File

@ -4,8 +4,6 @@ public interface EdxpConfig {
String getInstallerBaseDir();
String getBlackListModulePackageName();
boolean isDynamicModulesMode();
boolean isNoModuleLogEnabled();

View File

@ -10,7 +10,6 @@ import android.content.res.XResources;
import android.os.Build;
import android.os.IBinder;
import android.os.Process;
import android.text.TextUtils;
import android.util.ArraySet;
import android.util.Log;
@ -399,14 +398,6 @@ public final class XposedInit {
private static boolean loadModule(String apk, ClassLoader topClassLoader, boolean callInitZygote) {
Log.i(TAG, "Loading modules from " + apk);
// todo remove this legacy logic
String blackListModulePackageName = EdXpConfigGlobal.getConfig().getBlackListModulePackageName();
if (!TextUtils.isEmpty(apk) && !TextUtils.isEmpty(blackListModulePackageName)
&& apk.contains(blackListModulePackageName)) {
Log.i(TAG, "We are going to take over black list's job...");
return false;
}
if (!new File(apk).exists()) {
Log.e(TAG, " File does not exist");
return false;