[parasitic] Also parasitic into default manager (#1154)

This commit is contained in:
LoveSy 2021-09-21 22:27:03 +08:00 committed by GitHub
parent fe05768189
commit 9afa34932e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 8 additions and 51 deletions

View File

@ -5,8 +5,6 @@ import org.lsposed.lspd.models.Module;
interface ILSPApplicationService {
IBinder requestModuleBinder(String name);
boolean requestManagerBinder(String packageName, String path, out List<IBinder> binder);
boolean isResourcesHookEnabled();
List<Module> getModulesList(String processName);

View File

@ -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<IBinder> binder);
@Override
abstract public boolean isResourcesHookEnabled();

View File

@ -69,15 +69,6 @@ public class LSPApplicationServiceClient extends ApplicationServiceClient {
return null;
}
@Override
public boolean requestManagerBinder(String packageName, String path, List<IBinder> binder) {
try {
return service.requestManagerBinder(packageName, path, binder);
} catch (RemoteException | NullPointerException ignored) {
}
return false;
}
@Override
public boolean isResourcesHookEnabled() {
try {

View File

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

View File

@ -91,24 +91,7 @@ public class LoadedApkGetCLHooker extends XC_MethodHook {
hookNewXSP(lpparam);
}
var binder = new ArrayList<IBinder>(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);

View File

@ -106,29 +106,13 @@ public class LSPApplicationService extends ILSPApplicationService.Stub {
} else return null;
}
@Override
public boolean requestManagerBinder(String packageName, String path, List<IBinder> 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<IBinder> 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));

View File

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