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不同,看看大伙有没有遇到类似的情况,怎么解决的。。。 aqz236 发表于 2024-3-20 01:04
// 测试反射
...
使用Xposed框架的XposedHelpers.findClass试试 aqz236 发表于 2024-3-20 00:26
对。另外我发现这个日志的产生是来自service.jar。 是我执行adb拿到的
adb.exe ...
你是怎么反射的,理论上来说只要存在就可以反射到,或者简单粗暴的hookloadClass遍历查找需要的方法 这是系统类吧 反射也获取不到? 怜渠客 发表于 2024-3-19 21:54
这是系统类吧
是的! 如何hook呢,求指教!!! 不是系统类,我去看了系统代码里没有。还要具体分析这个类来自哪里。 本帖最后由 aqz236 于 2024-3-20 00:27 编辑
小骚 发表于 2024-3-19 23:49
反射也获取不到?
对。另外我发现这个日志的产生是来自service.jar。 是我执行adb拿到的
adb.exe pull /system/framework .
唉,要说是系统函数的话,我重启也不能成功hook。 小骚 发表于 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: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