11package de.binarynoise.classHunter
22
3+ import java.net.URLClassLoader
34import java.security.SecureClassLoader
45import android.os.Build
56import android.util.Log
67import dalvik.system.BaseDexClassLoader
78import dalvik.system.DelegateLastClassLoader
9+ import dalvik.system.DexClassLoader
10+ import dalvik.system.InMemoryDexClassLoader
811import dalvik.system.PathClassLoader
912import de.binarynoise.ClassHunter.BuildConfig
1013import de.robv.android.xposed.IXposedHookLoadPackage
@@ -36,31 +39,31 @@ class Hook : IXposedHookLoadPackage, IXposedHookZygoteInit {
3639 collectParents(bootClassLoader, " bootClassLoader" , classLoaders)
3740
3841 Log .i(TAG , " currently known classloaders:" )
39- classLoaders.forEach {
40- Log .v(TAG , " ${it .toObjectString()} - $it " )
42+ classLoaders.forEach { classLoader ->
43+ Log .v(TAG , " ${classLoader .toObjectString()} - $classLoader " )
4144
4245 BuildConfig .targetClass.forEach { className ->
4346 try {
44- val cls = Class .forName(className, false , it )
45- Log .i(TAG , " - found class: ${cls.name} in package ${lpparam.packageName} by ${it .toObjectString()} " )
47+ val cls = Class .forName(className, false , classLoader )
48+ Log .i(TAG , " - found class: ${cls.name} in package ${lpparam.packageName} by ${cls .toObjectString()} " )
4649
4750 Log .i(TAG , " - constructors:" )
4851 cls.declaredConstructors.map { c -> " ${c.name} (${c.parameters.joinToString(" , " ) { p -> p.name + " " + p.type.name }} )" }
4952 .sorted()
5053 .forEach { c ->
51- Log .v(TAG , " - $it " )
54+ Log .v(TAG , " - $c " )
5255 }
5356
5457 Log .i(TAG , " - methods:" )
5558 cls.declaredMethods.map { m -> " ${m.returnType.name} ${m.name} (${m.parameters.joinToString(" , " ) { p -> p.name + " " + p.type.name }} )" }
5659 .sorted()
5760 .forEach { m ->
58- Log .v(TAG , " - $it " )
61+ Log .v(TAG , " - $m " )
5962 }
6063
6164 Log .i(TAG , " - fields:" )
6265 cls.declaredFields.map { f -> " ${f.type.name} ${f.name} " }.sorted().forEach { f ->
63- Log .v(TAG , " - $it " )
66+ Log .v(TAG , " - $f " )
6467 }
6568 } catch (_: Throwable ) {
6669 }
@@ -78,11 +81,11 @@ class Hook : IXposedHookLoadPackage, IXposedHookZygoteInit {
7881 val classLoaderClasses = mutableSetOf<Class <* >>(
7982 ClassLoader ::class .java,
8083 SecureClassLoader ::class .java,
81- // URLClassLoader::class.java,
84+ URLClassLoader ::class .java,
8285 BaseDexClassLoader ::class .java,
83- // PathClassLoader::class.java,
84- // InMemoryDexClassLoader::class.java,
85- // DexClassLoader::class.java,
86+ PathClassLoader ::class .java,
87+ InMemoryDexClassLoader ::class .java,
88+ DexClassLoader ::class .java,
8689 ClassLoader .getSystemClassLoader()::class .java, // BootClassLoader
8790 )
8891
@@ -107,8 +110,7 @@ class Hook : IXposedHookLoadPackage, IXposedHookZygoteInit {
107110 }
108111 }
109112 }
110- var loadNewClassloaderHook: MethodHook ? = null
111- loadNewClassloaderHook = object : MethodHook () {
113+ val loadNewClassloaderHook = object : MethodHook () {
112114 override fun afterHookedMethod (param : MethodHookParam ) {
113115 if (param.thisObject !is PathClassLoader ) {
114116 Log .v(TAG , " Created a new ClassLoader: ${param.thisObject.toObjectString()} ${param.thisObject} " )
@@ -119,9 +121,9 @@ class Hook : IXposedHookLoadPackage, IXposedHookZygoteInit {
119121 Log .i(TAG , " Found a new ClassLoader class: ${cls} , created by ${cls.classLoader} " )
120122 }
121123 try {
122-
123- XposedBridge .hookAllConstructors(it, loadNewClassloaderHook)
124- XposedBridge .hookAllMethods(it, " loadClass" , loadClassHook)
124+ // Will hang the device:
125+ // XposedBridge.hookAllConstructors(it, loadNewClassloaderHook)
126+ // XposedBridge.hookAllMethods(it, "loadClass", loadClassHook)
125127 } catch (_: Throwable ) {
126128 }
127129 }
@@ -133,6 +135,8 @@ class Hook : IXposedHookLoadPackage, IXposedHookZygoteInit {
133135 } catch (_: Throwable ) {
134136 }
135137 }
138+
139+ Log .i(TAG , " Zygote looking for ${targetClassesShortName.joinToString()} in ${classLoaderClasses.size} ClassLoader classes" )
136140 }
137141}
138142
0 commit comments