From 9afa34932e3a0b09bdcdad261b6dd9555e9700bb Mon Sep 17 00:00:00 2001 From: LoveSy Date: Tue, 21 Sep 2021 22:27:03 +0800 Subject: [PATCH] [parasitic] Also parasitic into default manager (#1154) --- .../lspd/service/ILSPApplicationService.aidl | 2 -- .../lspd/config/ApplicationServiceClient.java | 3 --- .../config/LSPApplicationServiceClient.java | 9 --------- .../main/java/org/lsposed/lspd/core/Main.java | 3 ++- .../lspd/hooker/LoadedApkGetCLHooker.java | 19 +----------------- .../lspd/service/LSPApplicationService.java | 20 ++----------------- .../lspd/util/ParasiticManagerHooker.java | 3 +++ 7 files changed, 8 insertions(+), 51 deletions(-) diff --git a/core/src/main/aidl/org/lsposed/lspd/service/ILSPApplicationService.aidl b/core/src/main/aidl/org/lsposed/lspd/service/ILSPApplicationService.aidl index 404e6dc2..3366f97b 100644 --- a/core/src/main/aidl/org/lsposed/lspd/service/ILSPApplicationService.aidl +++ b/core/src/main/aidl/org/lsposed/lspd/service/ILSPApplicationService.aidl @@ -5,8 +5,6 @@ import org.lsposed.lspd.models.Module; interface ILSPApplicationService { IBinder requestModuleBinder(String name); - boolean requestManagerBinder(String packageName, String path, out List binder); - boolean isResourcesHookEnabled(); List getModulesList(String processName); diff --git a/core/src/main/java/org/lsposed/lspd/config/ApplicationServiceClient.java b/core/src/main/java/org/lsposed/lspd/config/ApplicationServiceClient.java index 08e4cae2..5c75ce93 100644 --- a/core/src/main/java/org/lsposed/lspd/config/ApplicationServiceClient.java +++ b/core/src/main/java/org/lsposed/lspd/config/ApplicationServiceClient.java @@ -15,9 +15,6 @@ abstract public class ApplicationServiceClient implements ILSPApplicationService @Override abstract public IBinder requestModuleBinder(String name); - @Override - abstract public boolean requestManagerBinder(String packageName, String path, List binder); - @Override abstract public boolean isResourcesHookEnabled(); diff --git a/core/src/main/java/org/lsposed/lspd/config/LSPApplicationServiceClient.java b/core/src/main/java/org/lsposed/lspd/config/LSPApplicationServiceClient.java index fdaae1e1..67975e8d 100644 --- a/core/src/main/java/org/lsposed/lspd/config/LSPApplicationServiceClient.java +++ b/core/src/main/java/org/lsposed/lspd/config/LSPApplicationServiceClient.java @@ -69,15 +69,6 @@ public class LSPApplicationServiceClient extends ApplicationServiceClient { return null; } - @Override - public boolean requestManagerBinder(String packageName, String path, List binder) { - try { - return service.requestManagerBinder(packageName, path, binder); - } catch (RemoteException | NullPointerException ignored) { - } - return false; - } - @Override public boolean isResourcesHookEnabled() { try { diff --git a/core/src/main/java/org/lsposed/lspd/core/Main.java b/core/src/main/java/org/lsposed/lspd/core/Main.java index 3a45f7ee..e02aeea6 100644 --- a/core/src/main/java/org/lsposed/lspd/core/Main.java +++ b/core/src/main/java/org/lsposed/lspd/core/Main.java @@ -81,7 +81,8 @@ public class Main { XposedBridge.initXResources(); XposedInit.startsSystemServer = isSystem; PrebuiltMethodsDeopter.deoptBootMethods(); // do it once for secondary zygote - if (niceName.equals(BuildConfig.MANAGER_INJECTED_PKG_NAME) && ParasiticManagerHooker.start()) { + if ((niceName.equals(BuildConfig.MANAGER_INJECTED_PKG_NAME) || niceName.equals(BuildConfig.DEFAULT_MANAGER_PACKAGE_NAME)) + && ParasiticManagerHooker.start()) { Utils.logI("Loaded manager, skipping next steps"); return; } diff --git a/core/src/main/java/org/lsposed/lspd/hooker/LoadedApkGetCLHooker.java b/core/src/main/java/org/lsposed/lspd/hooker/LoadedApkGetCLHooker.java index 430e497e..32bc996b 100644 --- a/core/src/main/java/org/lsposed/lspd/hooker/LoadedApkGetCLHooker.java +++ b/core/src/main/java/org/lsposed/lspd/hooker/LoadedApkGetCLHooker.java @@ -91,24 +91,7 @@ public class LoadedApkGetCLHooker extends XC_MethodHook { hookNewXSP(lpparam); } - var binder = new ArrayList(1); - var blocked = false; - var info = loadedApk.getApplicationInfo(); - if (info != null) { - var packageName = info.packageName; - var path = info.sourceDir; - blocked = serviceClient.requestManagerBinder(packageName, path, binder); - } - if (binder.size() != 0 && binder.get(0) != null) { - var ret = InstallerVerifier.sendBinderToManager(lpparam.classLoader, binder.get(0)); - if (!ret) InstallerVerifier.hookBadManager(classLoader); - Utils.logI("manager trusted, ret=" + ret); - } else if (blocked) { - InstallerVerifier.hookBadManager(classLoader); - Utils.logI("manager blocked, packageName=" + packageName); - } else { - XC_LoadPackage.callAll(lpparam); - } + XC_LoadPackage.callAll(lpparam); } catch (Throwable t) { Hookers.logE("error when hooking LoadedApk#getClassLoader", t); diff --git a/core/src/main/java/org/lsposed/lspd/service/LSPApplicationService.java b/core/src/main/java/org/lsposed/lspd/service/LSPApplicationService.java index 3b4f610e..fa76b367 100644 --- a/core/src/main/java/org/lsposed/lspd/service/LSPApplicationService.java +++ b/core/src/main/java/org/lsposed/lspd/service/LSPApplicationService.java @@ -106,29 +106,13 @@ public class LSPApplicationService extends ILSPApplicationService.Stub { } else return null; } - @Override - public boolean requestManagerBinder(String packageName, String path, List binder) throws RemoteException { - ensureRegistered(); - var pid = getCallingPid(); - var uid = getCallingUid(); - if (ConfigManager.getInstance().isManager(uid) && - ConfigManager.getInstance().isManager(packageName) && - InstallerVerifier.verifyInstallerSignature(path)) { - var heartbeat = handles.getOrDefault(pid, null); - if (heartbeat != null) { - binder.add(ServiceManager.getManagerService().obtainManagerBinder(heartbeat, pid, uid)); - } - return false; - } - return ConfigManager.getInstance().isManager(packageName); - } - @Override public ParcelFileDescriptor requestInjectedManagerBinder(List binder) throws RemoteException { ensureRegistered(); var pid = getCallingPid(); var uid = getCallingUid(); - if (ServiceManager.getManagerService().postStartManager(pid, uid)) { + if (ServiceManager.getManagerService().postStartManager(pid, uid) || + ConfigManager.getInstance().isManager(uid)) { var heartbeat = handles.get(pid); if (heartbeat != null) { binder.add(ServiceManager.getManagerService().obtainManagerBinder(heartbeat, pid, uid)); diff --git a/core/src/main/java/org/lsposed/lspd/util/ParasiticManagerHooker.java b/core/src/main/java/org/lsposed/lspd/util/ParasiticManagerHooker.java index 4468ec9f..a5dcb462 100644 --- a/core/src/main/java/org/lsposed/lspd/util/ParasiticManagerHooker.java +++ b/core/src/main/java/org/lsposed/lspd/util/ParasiticManagerHooker.java @@ -109,6 +109,8 @@ public class ParasiticManagerHooker { } }); + if (Process.myUid() != BuildConfig.MANAGER_INJECTED_UID) return; + XposedBridge.hookAllMethods(ActivityThread.class, "handleReceiver", new XC_MethodReplacement() { @Override protected Object replaceHookedMethod(MethodHookParam param) { @@ -194,6 +196,7 @@ public class ParasiticManagerHooker { private static void checkIntent(ILSPManagerService managerService, Intent intent) { if (managerService == null) return; + if (Process.myUid() != BuildConfig.MANAGER_INJECTED_UID) return; if (intent.getCategories() == null || !intent.getCategories().contains("org.lsposed.manager.LAUNCH_MANAGER")) { Hookers.logD("Launching the original app, restarting"); try {