From 7aa27b83869eafeac4d9ab27a07c73633c995049 Mon Sep 17 00:00:00 2001 From: LoveSy Date: Thu, 28 Apr 2022 11:56:59 +0800 Subject: [PATCH] Fix set trusted (#1899) --- .../java/org/lsposed/lspd/core/Startup.java | 1 + .../lspd/util/LspModuleClassLoader.java | 25 ++++++++++--------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/core/src/main/java/org/lsposed/lspd/core/Startup.java b/core/src/main/java/org/lsposed/lspd/core/Startup.java index eff2d88c..4ceb697e 100644 --- a/core/src/main/java/org/lsposed/lspd/core/Startup.java +++ b/core/src/main/java/org/lsposed/lspd/core/Startup.java @@ -53,6 +53,7 @@ public class Startup { var hooker = new OpenDexFileHooker(); XposedBridge.hookAllMethods(DexFile.class, "openDexFile", hooker); XposedBridge.hookAllMethods(DexFile.class, "openInMemoryDexFile", hooker); + XposedBridge.hookAllMethods(DexFile.class, "openInMemoryDexFiles", hooker); } XposedHelpers.findAndHookConstructor(LoadedApk.class, ActivityThread.class, ApplicationInfo.class, CompatibilityInfo.class, diff --git a/core/src/main/java/org/lsposed/lspd/util/LspModuleClassLoader.java b/core/src/main/java/org/lsposed/lspd/util/LspModuleClassLoader.java index c9a45d10..39dea2c6 100644 --- a/core/src/main/java/org/lsposed/lspd/util/LspModuleClassLoader.java +++ b/core/src/main/java/org/lsposed/lspd/util/LspModuleClassLoader.java @@ -26,7 +26,6 @@ import java.util.jar.JarFile; import java.util.zip.ZipEntry; import dalvik.system.DelegateLastClassLoader; -import dalvik.system.PathClassLoader; import de.robv.android.xposed.XposedBridge; import hidden.ByteBufferDexClassLoader; @@ -34,7 +33,7 @@ import hidden.ByteBufferDexClassLoader; public final class LspModuleClassLoader extends ByteBufferDexClassLoader { private static final String zipSeparator = "!/"; private final String apk; - private final List nativeLibraryDirs = new ArrayList<>(); + private final File[] nativeLibraryDirs; private static List splitPaths(String searchPath) { var result = new ArrayList(); @@ -49,6 +48,7 @@ public final class LspModuleClassLoader extends ByteBufferDexClassLoader { ClassLoader parent, String apk) { super(dexBuffers, parent); + nativeLibraryDirs = new File[0]; this.apk = apk; } @@ -58,13 +58,15 @@ public final class LspModuleClassLoader extends ByteBufferDexClassLoader { ClassLoader parent, String apk) { super(dexBuffers, librarySearchPath, parent); - initNativeLibraryDirs(librarySearchPath); + nativeLibraryDirs = initNativeLibraryDirs(librarySearchPath); this.apk = apk; } - private void initNativeLibraryDirs(String librarySearchPath) { - nativeLibraryDirs.addAll(splitPaths(librarySearchPath)); - nativeLibraryDirs.addAll(splitPaths(System.getProperty("java.library.path"))); + private File[] initNativeLibraryDirs(String librarySearchPath) { + var searchPaths = new ArrayList(); + searchPaths.addAll(splitPaths(librarySearchPath)); + searchPaths.addAll(splitPaths(System.getProperty("java.library.path"))); + return searchPaths.toArray(new File[0]); } @Override @@ -161,8 +163,7 @@ public final class LspModuleClassLoader extends ByteBufferDexClassLoader { @Override public Enumeration getResources(String name) throws IOException { - @SuppressWarnings("unchecked") - final var resources = (Enumeration[]) new Enumeration[]{ + @SuppressWarnings("unchecked") final var resources = (Enumeration[]) new Enumeration[]{ Object.class.getClassLoader().getResources(name), findResources(name), getParent() == null ? null : getParent().getResources(name)}; @@ -174,14 +175,14 @@ public final class LspModuleClassLoader extends ByteBufferDexClassLoader { public String toString() { return "LspModuleClassLoader[" + "module=" + apk + "," + - "nativeLibraryDirs=" + nativeLibraryDirs == null ? "null" : Arrays.toString(nativeLibraryDirs.toArray()) + "," + + "nativeLibraryDirs=" + Arrays.toString(nativeLibraryDirs) + "," + super.toString() + "]"; } public static ClassLoader loadApk(String apk, - List dexes, - String librarySearchPath, - ClassLoader parent) { + List dexes, + String librarySearchPath, + ClassLoader parent) { var dexBuffers = dexes.stream().parallel().map(dex -> { try { return dex.mapReadOnly();