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 c652c6e2..51bcb037 100644 --- a/core/src/main/java/org/lsposed/lspd/core/Main.java +++ b/core/src/main/java/org/lsposed/lspd/core/Main.java @@ -36,7 +36,6 @@ import org.lsposed.lspd.deopt.PrebuiltMethodsDeopter; import org.lsposed.lspd.hooker.CrashDumpHooker; import org.lsposed.lspd.hooker.HandleBindAppHooker; import org.lsposed.lspd.hooker.LoadedApkCstrHooker; -import org.lsposed.lspd.hooker.StartBootstrapServicesHooker; import org.lsposed.lspd.hooker.SystemMainHooker; import org.lsposed.lspd.service.ServiceManager; import org.lsposed.lspd.util.ModuleLogger; 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 6ec34867..2e7af4d2 100644 --- a/core/src/main/java/org/lsposed/lspd/util/LspModuleClassLoader.java +++ b/core/src/main/java/org/lsposed/lspd/util/LspModuleClassLoader.java @@ -47,6 +47,11 @@ public final class LspModuleClassLoader extends ByteBufferDexClassLoader { String apk) { super(dexBuffers, parent); this.apk = apk; + try { + fixDexName(apk); + } catch (Throwable e) { + Utils.logE("fix name", e); + } } @RequiresApi(Build.VERSION_CODES.Q) @@ -57,6 +62,11 @@ public final class LspModuleClassLoader extends ByteBufferDexClassLoader { super(dexBuffers, librarySearchPath, parent); initNativeLibraryDirs(librarySearchPath); this.apk = apk; + try { + fixDexName(apk); + } catch (Throwable e) { + Utils.logE("fix name", e); + } } private void initNativeLibraryDirs(String librarySearchPath) { @@ -158,8 +168,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)}; diff --git a/hiddenapi-bridge/src/main/java/hidden/ByteBufferDexClassLoader.java b/hiddenapi-bridge/src/main/java/hidden/ByteBufferDexClassLoader.java index d61149a9..ea7239a8 100644 --- a/hiddenapi-bridge/src/main/java/hidden/ByteBufferDexClassLoader.java +++ b/hiddenapi-bridge/src/main/java/hidden/ByteBufferDexClassLoader.java @@ -1,10 +1,32 @@ package hidden; +import java.lang.reflect.Field; import java.nio.ByteBuffer; import dalvik.system.BaseDexClassLoader; public class ByteBufferDexClassLoader extends BaseDexClassLoader { + static Field pathListField = null; + static Field dexElementsField = null; + static Field dexFileField = null; + static Field nameField = null; + + static { + try { + pathListField = BaseDexClassLoader.class.getDeclaredField("pathList"); + pathListField.setAccessible(true); + dexElementsField = pathListField.getType().getDeclaredField("dexElements"); + dexElementsField.setAccessible(true); + var elementType = dexElementsField.getType().getComponentType(); + dexFileField = elementType.getDeclaredField("dexFile"); + dexFileField.setAccessible(true); + nameField = dexFileField.getType().getDeclaredField("mFileName"); + nameField.setAccessible(true); + } catch (Throwable ignored) { + + } + } + public ByteBufferDexClassLoader(ByteBuffer[] dexFiles, ClassLoader parent) { super(dexFiles, parent); } @@ -13,6 +35,10 @@ public class ByteBufferDexClassLoader extends BaseDexClassLoader { super(dexFiles, librarySearchPath, parent); } + public void fixDexName(String name) throws IllegalAccessException { + nameField.set(dexFileField.get(((Object[]) dexElementsField.get(pathListField.get(this)))[0]), name); + } + public String getLdLibraryPath() { return super.getLdLibraryPath(); } diff --git a/hiddenapi-stubs/src/main/java/dalvik/system/BaseDexClassLoader.java b/hiddenapi-stubs/src/main/java/dalvik/system/BaseDexClassLoader.java index 13379131..ee56efe4 100644 --- a/hiddenapi-stubs/src/main/java/dalvik/system/BaseDexClassLoader.java +++ b/hiddenapi-stubs/src/main/java/dalvik/system/BaseDexClassLoader.java @@ -9,6 +9,7 @@ import java.io.File; import java.nio.ByteBuffer; public class BaseDexClassLoader extends ClassLoader { + private Object pathList; public BaseDexClassLoader(String dexPath, File optimizedDirectory, String librarySearchPath, ClassLoader parent) { throw new RuntimeException("Stub!"); }