aqz236 发表于 2024-3-19 20:58

xposed找不到类

妙享中心的投屏锁60帧,我准备去xposed改一下。
通过log已经分析出来是哪个关键类了
https://pic.ziyuan.wang/user/aqz236/2024/03/image_d919ac4ac8733.png

com.android.server.display.LogicalDisplayMapper,这个类在aosp里可以查到源码,但是在jadx出来的文件中找不到这个类,写代码的时候也报错找不到类。

我看网上说这种情况有两种解决方法:
1. 多dex的话用attach
2. 动态加载情况用ClassLoader

都试过了,还是不行。

我猜测有可能是在系统中这个类是动态加载的,但是类的全路径跟aosp不同,看看大伙有没有遇到类似的情况,怎么解决的。。。

小骚 发表于 2024-3-20 01:11

aqz236 发表于 2024-3-20 01:04
                                    // 测试反射
                           ...

使用Xposed框架的XposedHelpers.findClass试试

小骚 发表于 2024-3-20 00:30

aqz236 发表于 2024-3-20 00:26
对。另外我发现这个日志的产生是来自service.jar。 是我执行adb拿到的
adb.exe ...

你是怎么反射的,理论上来说只要存在就可以反射到,或者简单粗暴的hookloadClass遍历查找需要的方法

怜渠客 发表于 2024-3-19 21:54

这是系统类吧

小骚 发表于 2024-3-19 23:49

反射也获取不到?

aqz236 发表于 2024-3-19 21:57

怜渠客 发表于 2024-3-19 21:54
这是系统类吧

是的! 如何hook呢,求指教!!!

怜渠客 发表于 2024-3-19 22:24

不是系统类,我去看了系统代码里没有。还要具体分析这个类来自哪里。

aqz236 发表于 2024-3-20 00:26

本帖最后由 aqz236 于 2024-3-20 00:27 编辑

小骚 发表于 2024-3-19 23:49
反射也获取不到?
对。另外我发现这个日志的产生是来自service.jar。 是我执行adb拿到的
adb.exe pull /system/framework .

唉,要说是系统函数的话,我重启也不能成功hook。

aqz236 发表于 2024-3-20 01:04

小骚 发表于 2024-3-20 00:30
你是怎么反射的,理论上来说只要存在就可以反射到,或者简单粗暴的hookloadClass遍历查找需要的方法

                                    // 测试反射
                                    try {
                                        Class<?> targetClass = Class.forName("com.android.server.display.LogicalDisplayMapper", true, classLoader);
                                        Method targetMethod = null;
                                        // 寻找原方法
                                        for (Method method : targetClass.getDeclaredMethods()) {
                                          if (method.getName().equals("updateLogicalDisplaysLocked")) {
                                                targetMethod = method;
                                                break;
                                          }
                                        }
                                        if (targetMethod != null) {
                                          targetMethod.setAccessible(true);
                                          Log.d(TAG, "反射前");
                                          targetMethod.invoke(targetClass.newInstance());
                                          Log.d(TAG, "反射后");
                                        } else {
                                          // 如果没有找到目标方法,可以适当地处理,如记录日志或者抛出异常
                                          Log.d(TAG, "未找到");
                                        }
                                    } catch (Exception e) {
                                        // 对异常适当地处理,如记录日志或者抛出异常
                                        Log.e(TAG, "Error", e);
                                    }

报错:
java.lang.ClassNotFoundException: com.android.server.display.LogicalDisplayMapper


aqz236 发表于 2024-3-20 01:20

本帖最后由 aqz236 于 2024-3-20 01:22 编辑

小骚 发表于 2024-3-20 01:11
使用Xposed框架的XposedHelpers.findClass试试
package com.example.he;

import android.app.Application;
import android.content.Context;
import android.util.Log;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;

public class Hook implements IXposedHookLoadPackage {
    Context context;
    String TAG = "lubenwei";

    @Override
    public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable {
      if (!lpparam.packageName.equals("com.milink.service"))
            return;
      Log.d(TAG + "_find", "FindAppStart");
      // 多dex
      XposedHelpers.findAndHookMethod(Application.class, "attach", Context.class,
                new XC_MethodHook() {
                  @Override
                  protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                        context = (Context) param.args;
                        ClassLoader classLoader = context.getClassLoader();

                        XposedHelpers.findAndHookMethod("com.android.server.display.LogicalDisplayMapper", classLoader, "updateLogicalDisplaysLocked",
                              new XC_MethodHook() {
                                    @Override
                                    protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                                        Log.d(TAG + "[找到了]", "111");
                                    }
                              });
                  }
                });

      // 动态加载
      XposedHelpers.findAndHookMethod(ClassLoader.class, "loadClass", String.class, new XC_MethodHook() {
            @Override
            protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                Class clazz = (Class) param.getResult();
                ClassLoader classLoader2 = clazz.getClassLoader();
                Class<?> aClass = XposedHelpers.findClass("com.android.server.display.LogicalDisplayMapper", classLoader2);
                Log.d(TAG + "[找到了]", aClass.getName());
            }
      });

      // 测试反射
//      try {
//            Class<?> targetClass = Class.forName("com.android.server.display.LogicalDisplayMapper", true, lpparam.classLoader);
//            Method targetMethod = null;
//            for (Method method : targetClass.getDeclaredMethods()) {
//                if (method.getName().equals("updateLogicalDisplaysLocked")) {
//                  targetMethod = method;
//                  break;
//                }
//            }
//            if (targetMethod != null) {
//                targetMethod.setAccessible(true);
//                Log.d(TAG, "反射前");
//                targetMethod.invoke(targetClass.newInstance());
//                Log.d(TAG, "反射后");
//            } else {
//                Log.d(TAG, "未找到");
//            }
//      } catch (Exception e) {
//            Log.e(TAG, "Error", e);
//      }
    }
}


这是全部的代码,findClass也是不行的,现在的情况就是反编译出来的文件找不到我要hook的类,要hook的类在service.jar中可以看到,但是hook不到。。。
页: [1] 2
查看完整版本: xposed找不到类