Check old version Manager (#886)

This commit is contained in:
vvb2060 2021-08-12 02:12:51 +08:00 committed by GitHub
parent 3cc368754b
commit ba701b0435
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 15 additions and 13 deletions

View File

@ -31,7 +31,8 @@ public class Constants {
Toast.makeText(App.getInstance(), R.string.app_destroyed, Toast.LENGTH_LONG).show(); Toast.makeText(App.getInstance(), R.string.app_destroyed, Toast.LENGTH_LONG).show();
} }
public static void setBinder(IBinder binder) { public static boolean setBinder(IBinder binder) {
LSPManagerServiceHolder.init(binder); LSPManagerServiceHolder.init(binder);
return LSPManagerServiceHolder.getService().asBinder().isBinderAlive();
} }
} }

View File

@ -100,9 +100,10 @@ public class LoadedApkGetCLHooker extends XC_MethodHook {
blocked = serviceClient.requestManagerBinder(packageName, path, binder); blocked = serviceClient.requestManagerBinder(packageName, path, binder);
} }
if (binder.size() != 0 && binder.get(0) != null) { if (binder.size() != 0 && binder.get(0) != null) {
InstallerVerifier.hookXposedInstaller(lpparam.classLoader, binder.get(0)); var ret = InstallerVerifier.sendBinderToManager(lpparam.classLoader, binder.get(0));
if (!ret) InstallerVerifier.hookBadManager(classLoader);
} else if (blocked) { } else if (blocked) {
InstallerVerifier.hookXposedInstaller(classLoader); InstallerVerifier.hookBadManager(classLoader);
} else { } else {
XC_LoadPackage.callAll(lpparam); XC_LoadPackage.callAll(lpparam);
} }

View File

@ -23,7 +23,6 @@ package org.lsposed.lspd.util;
import static org.lsposed.lspd.util.SignInfo.CERTIFICATE; import static org.lsposed.lspd.util.SignInfo.CERTIFICATE;
import android.content.Context; import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.IBinder; import android.os.IBinder;
@ -31,8 +30,6 @@ import android.widget.Toast;
import com.android.apksig.ApkVerifier; import com.android.apksig.ApkVerifier;
import org.lsposed.lspd.service.ServiceManager;
import java.io.File; import java.io.File;
import java.util.Arrays; import java.util.Arrays;
@ -56,7 +53,7 @@ public class InstallerVerifier {
} }
} }
public static void hookXposedInstaller(final ClassLoader classLoader) { public static void hookBadManager(final ClassLoader classLoader) {
try { try {
Class<?> ConstantsClass = XposedHelpers.findClass("org.lsposed.manager.Constants", classLoader); Class<?> ConstantsClass = XposedHelpers.findClass("org.lsposed.manager.Constants", classLoader);
XposedHelpers.findAndHookMethod(android.app.Activity.class, "onCreate", Bundle.class, new XC_MethodHook() { XposedHelpers.findAndHookMethod(android.app.Activity.class, "onCreate", Bundle.class, new XC_MethodHook() {
@ -72,18 +69,21 @@ public class InstallerVerifier {
} }
}); });
} catch (Throwable t) { } catch (Throwable t) {
Utils.logW("hookXposedInstaller: ", t); Utils.logW("hookBadManager: ", t);
} }
} }
public static void hookXposedInstaller(final ClassLoader classLoader, IBinder binder) { public static boolean sendBinderToManager(final ClassLoader classLoader, IBinder binder) {
Utils.logI("Found LSPosed Manager, hooking it"); Utils.logI("Found LSPosed Manager");
try { try {
var clazz = XposedHelpers.findClass("org.lsposed.manager.Constants", classLoader); var clazz = XposedHelpers.findClass("org.lsposed.manager.Constants", classLoader);
XposedHelpers.callStaticMethod(clazz, "setBinder", new Class[]{IBinder.class}, binder); var ret = (boolean) XposedHelpers.callStaticMethod(clazz, "setBinder",
Utils.logI("Hooked LSPosed Manager"); new Class[]{IBinder.class}, binder);
Utils.logI("Send binder to LSPosed Manager: " + ret);
return ret;
} catch (Throwable t) { } catch (Throwable t) {
Utils.logW("Could not hook LSPosed Manager", t); Utils.logW("Could not send binder to LSPosed Manager", t);
return false;
} }
} }
} }