吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1005|回复: 11
收起左侧

[Android 求助] xposed找不到类

[复制链接]
aqz236 发表于 2024-3-19 20:58
妙享中心的投屏锁60帧,我准备去xposed改一下。
通过log已经分析出来是哪个关键类了


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

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

都试过了,还是不行。

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

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

小骚 发表于 2024-3-20 01:11
aqz236 发表于 2024-3-20 01:04
[mw_shl_code=java,true]                                    // 测试反射
                           ...

使用Xposed框架的XposedHelpers.findClass试试
小骚 发表于 2024-3-20 00:30
aqz236 发表于 2024-3-20 00:26
对。另外我发现这个日志的产生是来自service.jar。 是我执行adb拿到的
[mw_shl_code=shell,true]adb.exe ...

你是怎么反射的,理论上来说只要存在就可以反射到,或者简单粗暴的hook  loadClass  遍历查找需要的方法
怜渠客 发表于 2024-3-19 21:54
小骚 发表于 2024-3-19 23:49
反射也获取不到?
 楼主| aqz236 发表于 2024-3-19 21:57

是的! 如何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拿到的
[Shell] 纯文本查看 复制代码
adb.exe pull /system/framework .


唉,要说是系统函数的话,我重启也不能成功hook。
 楼主| aqz236 发表于 2024-3-20 01:04
小骚 发表于 2024-3-20 00:30
你是怎么反射的,理论上来说只要存在就可以反射到,或者简单粗暴的hook  loadClass  遍历查找需要的方法

[Java] 纯文本查看 复制代码
                                    // 测试反射
                                    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] 纯文本查看 复制代码
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试试

[Java] 纯文本查看 复制代码
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[0];
                        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不到。。。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-21 19:48

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表