Add hide whitelist packages

System server (uid <= 1000) will auto pass

Still need to report more whitelist packages to make the features work

**Turn on hide feature at your own risk**
This commit is contained in:
Jim Wu 2020-04-06 00:56:54 +08:00 committed by NekoInverter
parent cf60e6a4ec
commit 2d63aa9951
No known key found for this signature in database
GPG Key ID: 280D6CCCF95715F9
3 changed files with 47 additions and 17 deletions

View File

@ -12,6 +12,7 @@ import java.io.File;
import java.io.FileReader; import java.io.FileReader;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import de.robv.android.xposed.IXposedHookLoadPackage; import de.robv.android.xposed.IXposedHookLoadPackage;
@ -32,6 +33,18 @@ public class Enhancement implements IXposedHookLoadPackage {
private static final String LEGACY_INSTALLER = "de.robv.android.xposed.installer"; private static final String LEGACY_INSTALLER = "de.robv.android.xposed.installer";
private static final List HIDE_WHITE_LIST = Arrays.asList( // TODO: more whitelist packages
APPLICATION_ID, // Whitelist or crash
"com.android.providers.downloads", // For download modules
"com.android.providers.downloads.ui",
"com.android.packageinstaller", // For uninstall EdXposed Manager
"com.google.android.packageinstaller",
"com.android.systemui", // For notifications
"com.android.permissioncontroller", // For permissions grant
"com.topjohnwu.magisk", // For superuser root grant
"eu.chainfire.supersu"
); // System server (uid <= 1000) will auto pass
private static List modulesList = null; private static List modulesList = null;
private static boolean getFlagState(int user, String flag) { private static boolean getFlagState(int user, String flag) {
@ -79,12 +92,16 @@ public class Enhancement implements IXposedHookLoadPackage {
protected void afterHookedMethod(MethodHookParam param) { protected void afterHookedMethod(MethodHookParam param) {
if (param.args != null && param.args[0] != null) { if (param.args != null && param.args[0] != null) {
final int userId = (int) param.args[1]; final int userId = (int) param.args[1];
final int packageUid = Binder.getCallingUid();
boolean isXposedModule = false; boolean isXposedModule = false;
final String[] packages = final String[] packages =
(String[]) XposedHelpers.callMethod(param.thisObject, "getPackagesForUid", Binder.getCallingUid()); (String[]) XposedHelpers.callMethod(param.thisObject, "getPackagesForUid", packageUid);
if (packages == null || packages.length == 0 || packageUid <= 1000) {
return;
}
for (String packageName : packages) { for (String packageName : packages) {
if (packageName.equals(APPLICATION_ID)) { if (HIDE_WHITE_LIST.contains(packageName)) {
return; return;
} }
if (getModulesList(userId).contains(packageName)) { if (getModulesList(userId).contains(packageName)) {
@ -107,7 +124,7 @@ public class Enhancement implements IXposedHookLoadPackage {
} else { } else {
if (getFlagState(userId, mHideEdXposedManagerFlag)) { if (getFlagState(userId, mHideEdXposedManagerFlag)) {
for (ApplicationInfo applicationInfo : applicationInfoList) { for (ApplicationInfo applicationInfo : applicationInfoList) {
if (applicationInfo.packageName.equals(APPLICATION_ID)) { if (applicationInfo.packageName.equals(APPLICATION_ID) || applicationInfo.packageName.equals(LEGACY_INSTALLER)) {
applicationInfoList.remove(applicationInfo); applicationInfoList.remove(applicationInfo);
break; break;
} }
@ -124,12 +141,16 @@ public class Enhancement implements IXposedHookLoadPackage {
protected void afterHookedMethod(MethodHookParam param) { protected void afterHookedMethod(MethodHookParam param) {
if (param.args != null && param.args[0] != null) { if (param.args != null && param.args[0] != null) {
final int userId = (int) param.args[1]; final int userId = (int) param.args[1];
final int packageUid = Binder.getCallingUid();
boolean isXposedModule = false; boolean isXposedModule = false;
final String[] packages = final String[] packages =
(String[]) XposedHelpers.callMethod(param.thisObject, "getPackagesForUid", Binder.getCallingUid()); (String[]) XposedHelpers.callMethod(param.thisObject, "getPackagesForUid", packageUid);
if (packages == null || packages.length == 0 || packageUid <= 1000) {
return;
}
for (String packageName : packages) { for (String packageName : packages) {
if (packageName.equals(APPLICATION_ID)) { if (HIDE_WHITE_LIST.contains(packageName)) {
return; return;
} }
if (getModulesList(userId).contains(packageName)) { if (getModulesList(userId).contains(packageName)) {
@ -152,7 +173,7 @@ public class Enhancement implements IXposedHookLoadPackage {
} else { } else {
if (getFlagState(userId, mHideEdXposedManagerFlag)) { if (getFlagState(userId, mHideEdXposedManagerFlag)) {
for (PackageInfo packageInfo : packageInfoList) { for (PackageInfo packageInfo : packageInfoList) {
if (packageInfo.packageName.equals(APPLICATION_ID)) { if (packageInfo.packageName.equals(APPLICATION_ID) || packageInfo.packageName.equals(LEGACY_INSTALLER)) {
packageInfoList.remove(packageInfo); packageInfoList.remove(packageInfo);
break; break;
} }
@ -169,12 +190,16 @@ public class Enhancement implements IXposedHookLoadPackage {
protected void beforeHookedMethod(MethodHookParam param) { protected void beforeHookedMethod(MethodHookParam param) {
if (param.args != null && param.args[0] != null) { if (param.args != null && param.args[0] != null) {
final int userId = (int) param.args[2]; final int userId = (int) param.args[2];
final int packageUid = Binder.getCallingUid();
boolean isXposedModule = false; boolean isXposedModule = false;
final String[] packages = final String[] packages =
(String[]) XposedHelpers.callMethod(param.thisObject, "getPackagesForUid", Binder.getCallingUid()); (String[]) XposedHelpers.callMethod(param.thisObject, "getPackagesForUid", packageUid);
if (packages == null || packages.length == 0 || packageUid <= 1000) {
return;
}
for (String packageName : packages) { for (String packageName : packages) {
if (packageName.equals(APPLICATION_ID)) { if (HIDE_WHITE_LIST.contains(packageName)) {
return; return;
} }
if (getModulesList(userId).contains(packageName)) { if (getModulesList(userId).contains(packageName)) {
@ -191,7 +216,7 @@ public class Enhancement implements IXposedHookLoadPackage {
} }
} else { } else {
if (getFlagState(userId, mHideEdXposedManagerFlag)) { if (getFlagState(userId, mHideEdXposedManagerFlag)) {
if (param.args[0].equals(APPLICATION_ID)) { if (param.args[0].equals(APPLICATION_ID) || param.args[0].equals(LEGACY_INSTALLER)) {
param.setResult(null); param.setResult(null);
} }
} }
@ -206,12 +231,16 @@ public class Enhancement implements IXposedHookLoadPackage {
protected void beforeHookedMethod(MethodHookParam param) { protected void beforeHookedMethod(MethodHookParam param) {
if (param.args != null && param.args[0] != null) { if (param.args != null && param.args[0] != null) {
final int userId = (int) param.args[2]; final int userId = (int) param.args[2];
final int packageUid = Binder.getCallingUid();
boolean isXposedModule = false; boolean isXposedModule = false;
final String[] packages = final String[] packages =
(String[]) XposedHelpers.callMethod(param.thisObject, "getPackagesForUid", Binder.getCallingUid()); (String[]) XposedHelpers.callMethod(param.thisObject, "getPackagesForUid", packageUid);
if (packages == null || packages.length == 0 || packageUid <= 1000) {
return;
}
for (String packageName : packages) { for (String packageName : packages) {
if (packageName.equals(APPLICATION_ID)) { if (HIDE_WHITE_LIST.contains(packageName)) {
return; return;
} }
if (getModulesList(userId).contains(packageName)) { if (getModulesList(userId).contains(packageName)) {
@ -228,7 +257,7 @@ public class Enhancement implements IXposedHookLoadPackage {
} }
} else { } else {
if (getFlagState(userId, mHideEdXposedManagerFlag)) { if (getFlagState(userId, mHideEdXposedManagerFlag)) {
if (param.args[0].equals(APPLICATION_ID)) { if (param.args[0].equals(APPLICATION_ID) || param.args[0].equals(LEGACY_INSTALLER)) {
param.setResult(null); param.setResult(null);
} }
} }

View File

@ -302,6 +302,7 @@
<string name="colorized_action_bar">着色应用栏</string> <string name="colorized_action_bar">着色应用栏</string>
<string name="settings_group_theme">主题</string> <string name="settings_group_theme">主题</string>
<string name="material_design_2">惨白设计</string> <string name="material_design_2">惨白设计</string>
<string name="version_x">版本 %d</string>
<string name="xposed_description">启用 EdXposed 的增强功能:\n - 判断 Xposed 是否正常工作\n - 移除针对 EdXposed 的后台限制\n - 假装安装了 Xposed Installer\n - 隐藏 EdXposed Manager</string> <string name="xposed_description">启用 EdXposed 的增强功能:\n - 判断 Xposed 是否正常工作\n - 移除针对 EdXposed 的后台限制\n - 假装安装了 Xposed Installer\n - 隐藏 EdXposed Manager</string>
<string name="status_enhancement">增强模式已激活</string> <string name="status_enhancement">增强模式已激活</string>
<string name="settings_group_enhancement">增强模式</string> <string name="settings_group_enhancement">增强模式</string>
@ -309,7 +310,7 @@
<string name="settings_summary_enhancement">未激活\n你可以在「模块」中启用增强模块</string> <string name="settings_summary_enhancement">未激活\n你可以在「模块」中启用增强模块</string>
<string name="settings_summary_enhancement_enabled">已激活</string> <string name="settings_summary_enhancement_enabled">已激活</string>
<string name="settings_title_pretend_xposed_installer">Xposed Installer 伪装</string> <string name="settings_title_pretend_xposed_installer">Xposed Installer 伪装</string>
<string name="settings_summary_pretend_xposed_installer">假装已安装 Xposed Installer 来使一些过时但有用的模块正常工作\n注开启此功能可能会被某些软件如 RootBeer检测到 EdXposed</string> <string name="settings_summary_pretend_xposed_installer">假装已安装 Xposed Installer 来使一些过时但有用的模块正常工作\n仅对「模块」中已启用模块生效\n注:开启此功能可能会被某些软件(如 RootBeer检测到 EdXposed</string>
<string name="settings_title_hide_edxposed_manager">隐藏 EdXposed Manager</string> <string name="settings_title_hide_edxposed_manager">隐藏 EdXposed Manager</string>
<string name="settings_summary_hide_edxposed_manager">防止软件检测到 EdXposed Manager\n注模块可能无法正常打开 Manager 界面</string> <string name="settings_summary_hide_edxposed_manager">防止软件检测到 EdXposed Manager\n注模块可能无法正常打开 EdXposed Manager 界面,系统中关于 EdXposed Manager 的一些功能可能无法正常使用</string>
</resources> </resources>

View File

@ -333,6 +333,7 @@
<string name="colorized_action_bar">Colorized action bar</string> <string name="colorized_action_bar">Colorized action bar</string>
<string name="settings_group_theme">Theme</string> <string name="settings_group_theme">Theme</string>
<string name="material_design_2">Material Design 2</string> <string name="material_design_2">Material Design 2</string>
<string name="version_x">Version %d</string>
<string name="xposed_description">Enable EdXposed enhancements:\nRemove background restrictions on EdXposed\nDetermine if Xposed is working properly\nPretend to have Xposed Installer installed\nHide EdXposed Manager</string> <string name="xposed_description">Enable EdXposed enhancements:\nRemove background restrictions on EdXposed\nDetermine if Xposed is working properly\nPretend to have Xposed Installer installed\nHide EdXposed Manager</string>
<string name="status_enhancement">Enhancement mode</string> <string name="status_enhancement">Enhancement mode</string>
<string name="settings_group_enhancement">Enhancement mode</string> <string name="settings_group_enhancement">Enhancement mode</string>
@ -340,8 +341,7 @@
<string name="settings_summary_enhancement">Disabled\nYou can enable enhancement mode in the module</string> <string name="settings_summary_enhancement">Disabled\nYou can enable enhancement mode in the module</string>
<string name="settings_summary_enhancement_enabled">Enabled</string> <string name="settings_summary_enhancement_enabled">Enabled</string>
<string name="settings_title_pretend_xposed_installer">Pretend to have Xposed Installer installed</string> <string name="settings_title_pretend_xposed_installer">Pretend to have Xposed Installer installed</string>
<string name="settings_summary_pretend_xposed_installer">Pretend that Xposed Installer is installed to make some outdated but useful modules work\nWARNING: Some software (eg. RootBeer) may detect that EdXposed when this function is turned on</string> <string name="settings_summary_pretend_xposed_installer">Pretend that Xposed Installer is installed to make some outdated but useful modules work\nOnly work for the enabled modules in \"Modules\"\nWARNING: Some software (eg. RootBeer) may detect that EdXposed when this function is turned on</string>
<string name="settings_title_hide_edxposed_manager">Hide EdXposed Manager</string> <string name="settings_title_hide_edxposed_manager">Hide EdXposed Manager</string>
<string name="settings_summary_hide_edxposed_manager">Prevent the software from detecting EdXposed Manager\nWARNING: Modules may not be able to start the Manager UI properly</string> <string name="settings_summary_hide_edxposed_manager">Prevent the software from detecting EdXposed Manager\nWARNING: Modules may not be able to start the EdXposed Manager UI properly, some fratures of EdXposed Manager in the system may not work properly</string>
<string name="version_x">Version %d</string>
</resources> </resources>