XposedHook icon indicating copy to clipboard operation
XposedHook copied to clipboard

android9上找不到类

Open Lemniscate317 opened this issue 5 years ago • 8 comments

··· 06-24 16:54:38.384 7344-7344/? E/EdXposed-Bridge: java.lang.ClassNotFoundException: com.l.zsxqhook.Hook at java.lang.Class.classForName(Native Method) at java.lang.Class.forName(Class.java:453) at com.l.zsxqhook.HookLoader.getApkClass(HookLoader.java:101) at com.l.zsxqhook.HookLoader.access$200(HookLoader.java:27) at com.l.zsxqhook.HookLoader$1.afterHookedMethod(HookLoader.java:71) at de.robv.android.xposed.XC_MethodHook.callAfterHookedMethod(XC_MethodHook.java:68) at EdHooker_.hook(Unknown Source:142) at android.app.Instrumentation.newApplication(Instrumentation.java:1122) at android.app.LoadedApk.makeApplication(LoadedApk.java:1065) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5920) at com.elderdrivers.riru.xposed.entry.hooker.HandleBindAppHooker.hook(HandleBindAppHooker.java:85) at android.app.ActivityThread.access$1200(ActivityThread.java:200) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1673) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:201) at android.app.ActivityThread.main(ActivityThread.java:6810) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873) Caused by: java.lang.ClassNotFoundException: com.l.zsxqhook.Hook at java.lang.VMClassLoader.findLoadedClass(Native Method) at java.lang.ClassLoader.findLoadedClass(ClassLoader.java:738) at java.lang.ClassLoader.loadClass(ClassLoader.java:363) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) at java.lang.Class.classForName(Native Method)  at java.lang.Class.forName(Class.java:453)  at com.l.zsxqhook.HookLoader.getApkClass(HookLoader.java:101)  at com.l.zsxqhook.HookLoader.access$200(HookLoader.java:27)  at com.l.zsxqhook.HookLoader$1.afterHookedMethod(HookLoader.java:71)  at de.robv.android.xposed.XC_MethodHook.callAfterHookedMethod(XC_MethodHook.java:68)  at EdHooker_.hook(Unknown Source:142)  at android.app.Instrumentation.newApplication(Instrumentation.java:1122)  at android.app.LoadedApk.makeApplication(LoadedApk.java:1065)  at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5920)  at com.elderdrivers.riru.xposed.entry.hooker.HandleBindAppHooker.hook(HandleBindAppHooker.java:85)  at android.app.ActivityThread.access$1200(ActivityThread.java:200)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1673)  at android.os.Handler.dispatchMessage(Handler.java:106)  at android.os.Looper.loop(Looper.java:201)  at android.app.ActivityThread.main(ActivityThread.java:6810)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)  Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lde/robv/android/xposed/IXposedHookLoadPackage; at java.lang.Class.classForName(Native Method)  at java.lang.Class.forName(Class.java:453)  at com.l.zsxqhook.HookLoader.getApkClass(HookLoader.java:101)  at com.l.zsxqhook.HookLoader.access$200(HookLoader.java:27)  at com.l.zsxqhook.HookLoader$1.afterHookedMethod(HookLoader.java:71)  at de.robv.android.xposed.XC_MethodHook.callAfterHookedMethod(XC_MethodHook.java:68)  at EdHooker_.hook(Unknown Source:142)  at android.app.Instrumentation.newApplication(Instrumentation.java:1122)  at android.app.LoadedApk.makeApplication(LoadedApk.java:1065)  at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5920)  at com.elderdrivers.riru.xposed.entry.hooker.HandleBindAppHooker.hook(HandleBindAppHooker.java:85)  at android.app.ActivityThread.access$1200(ActivityThread.java:200)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1673)  at android.os.Handler.dispatchMessage(Handler.java:106)  at android.os.Looper.loop(Looper.java:201)  at android.app.ActivityThread.main(ActivityThread.java:6810)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)  Caused by: java.lang.ClassNotFoundException: Didn't find class "de.robv.android.xposed.IXposedHookLoadPackage" on path: DexPathList[[zip file "/data/app/com.l.zsxqhook-eM_rq5Zft2oZZEB_0-7wtA==/base.apk"],nativeLibraryDirectories=[/system/lib]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134) at java.lang.ClassLoader.loadClass(ClassLoader.java:379) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) at java.lang.Class.classForName(Native Method)  at java.lang.Class.forName(Class.java:453)  at com.l.zsxqhook.HookLoader.getApkClass(HookLoader.java:101)  at com.l.zsxqhook.HookLoader.access$200(HookLoader.java:27)  at com.l.zsxqhook.HookLoader$1.afterHookedMethod(HookLoader.java:71)  at de.robv.android.xposed.XC_MethodHook.callAfterHookedMethod(XC_MethodHook.java:68)  at EdHooker_.hook(Unknown Source:142)  at android.app.Instrumentation.newApplication(Instrumentation.java:1122)  at android.app.LoadedApk.makeApplication(LoadedApk.java:1065)  at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5920)  at com.elderdrivers.riru.xposed.entry.hooker.HandleBindAppHooker.hook(HandleBindAppHooker.java:85)  at android.app.ActivityThread.access$1200(ActivityThread.java:200)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1673)  at android.os.Handler.dispatchMessage(Handler.java:106)  at android.os.Looper.loop(Looper.java:201)  at android.app.ActivityThread.main(ActivityThread.java:6810)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)  ···

提示我找不到真正执行的那个类,类名其实是对的。我怀疑是不是android9的api做了限制这个问题.还是说我哪里搞错了

Lemniscate317 avatar Jun 24 '19 09:06 Lemniscate317

  1. 你先确保Instant Run关闭了;
  2. 然后再试试普通情况下,android9的hook有没有问题;
  3. 最后,你可以参照HookLoader下的getApkClass方法,试试看使用反射的方式加载apk文件中的类,看是否能找到。(你目前日志中的apk文件路径为:/data/app/com.l.zsxqhook-eM_rq5Zft2oZZEB_0-7wtA==/base.apk)

shuihuadx avatar Jun 24 '19 16:06 shuihuadx

正常hook是没有问题的,如果xposed_init指向我真正执行的那个类。我想问的是反射的方式加载是怎么加载。我上面问题漏了跟你说,我找不到类是在Class.forName那个地方找不到的。所以我有点懵,你所说用反射的方式要怎么反,是将pathClassloader换成别的还是说怎样

Lemniscate317 avatar Jun 25 '19 03:06 Lemniscate317

不好意思,我表述不是很清楚; 我的意思是,你可以写一个普通的app,在这个app中去调用其它app中的方法(比如调用com.l.zsxqhook.Hook类中的方法),看能不能调用成功,来确认你的设备是不是特殊情况;因为我在Android9.0的模拟器上面是可以调用成功的(原谅我没有Android9.0的设备)

shuihuadx avatar Jun 25 '19 16:06 shuihuadx

你的意思是用pathclassloader去load另一个app的data目录下的apk文件,并去尝试调用Hook方法看看是否能反射成功对吧。我现在改用6.0是没问题的,难受

Lemniscate317 avatar Jul 03 '19 00:07 Lemniscate317

是的

shuihuadx avatar Jul 03 '19 15:07 shuihuadx

我在9.0上也遇到这个问题了,我的修改是: private Class<?> getApkClass(Context context, String modulePackageName, String handleHookClass) throws Throwable {

    File apkFile = findApkFile(context, modulePackageName);

    if (apkFile == null) {

        throw new RuntimeException("寻找模块apk失败");

    }

    //加载指定的hook逻辑处理类,并调用它的handleHook方法

    PathClassLoader pathClassLoader = new PathClassLoader(apkFile.getAbsolutePath(), ClassLoader.getSystemClassLoader());

    Class<?> cls = Class.forName(handleHookClass, true, pathClassLoader);

    return cls;

}

我把ClassLoader.getSystemClassLoader()修改为了XposedBridge.BOOTCLASSLOADER 因为我这边的报错是找不到IXposedHookLoadPackage这个类,应该是在我们打包的apk里对xposedbrige是依赖关系,所以找不到IXposedHookLoadPackage 但是我现在有一点不明白,为什么XposedBridge.BOOTCLASSLOADER != ClassLoader.getSystemClassLoader()

menshen avatar Aug 23 '19 06:08 menshen

Hey, I found this.
Java reflection was limited in android 9

chengxuncc avatar Oct 26 '19 08:10 chengxuncc

如果是android studio 里面找不到要怎么判断?

Lingchen218 avatar Mar 18 '24 01:03 Lingchen218