java - Xposed模块,ClassNotFoundException动态加载类

标签 java android hook classloader xposed

目前我的 Xposed 模块中有这段代码:

public class Test implements IXposedHookLoadPackage, IXposedHookZygoteInit {

@Override
public void initZygote(StartupParam startupParam) throws Throwable {
    XposedBridge.log("ZYGOTE INIT");
}

@Override
public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {

    if(lpparam.packageName.equals("com.somerandomapp")) {

        XposedHelpers.findAndHookMethod(Application.class, "attach", Context.class, new XC_MethodHook() {
            @Override
            protected void afterHookedMethod(MethodHookParam param) throws Throwable {

                XposedHelpers.findAndHookMethod("java.lang.Class", lpparam.classLoader,
                        "forName", String.class, boolean.class, ClassLoader.class, new XC_MethodHook() {
                    @Override
                    protected void afterHookedMethod(MethodHookParam param1) throws Throwable {

                        if(((String)param1.args[0]).equals("com.alibaba.wireless.security.mainplugin.SecurityGuardMainPlugin")) {

                            Class clazz = XposedHelpers.findClass("SecurityGuardMainPlugin", (ClassLoader)param1.args[2]);
                            XposedHelpers.findAndHookMethod("com.alibaba.wireless.security.a.l.a", (ClassLoader)param1.args[2], "a", clazz, new XC_MethodHook() {
                                @Override
                                protected void afterHookedMethod(MethodHookParam param) throws Throwable {

                                    XposedHelpers.findAndHookMethod("com.alibaba.wireless.security.a.l.a", lpparam.classLoader, "getSecurityToken", new XC_MethodHook() {
                                        @Override
                                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                                            XposedBridge.log("Token: " + param.getResult());
                                        }
                                    });

                                }
                            });

                        }

                    }
                });

            }
        });

    }
}
}

我正在尝试在 SecurityGuardMainPlugin 被应用程序在运行时动态加载之后 Hook 方法 com.alibaba.wireless.security.a.l.a#a。然而,我得到了一个 ClassNotFoundException。这很奇怪,因为正如您在代码中看到的那样,在执行 Class#forName 方法后,我检查是否加载了 SecurityGuardMainPlugin 并且看起来是这样。

在最后两次 findAndHookMethod 调用中,我也尝试过使用 lpparam.classloader,但没有成功。

任何帮助将不胜感激!

最佳答案

由于您正在拦截 Class.forName假设它确实拦截了一些东西,你不需要找到类,你已经在你的 param1.getResult() 中有了它。只需在上面直接使用 XposedBridge.hookMethod(param1.getResult(), yourHook)

另请注意,从钩子(Hook)内部钩住方法通常是一种不好的做法。在注册新 Hook 之前,请确保成员是否尚未 Hook 。

关于java - Xposed模块,ClassNotFoundException动态加载类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49142586/

相关文章:

ruby-on-rails - git hook 中的 Ruby on Rails

Java:无法让 JButton 水平紧贴文本

java - 获取 EST 时区的 XMLGregorianCalendar 日期

Java 9 Splashscreen Splashscreen.getSplashScreen() 问题;

java - Android Java - 为什么不扩展 Activity -> 新 Activity

android - 在android中多次使用Runnable,它对内存有影响

class - 在 drupal 8 的标题区域中添加自定义类

cordova - Phonegap Hook - execvp 权限被拒绝

java - @JsonIgnore 和@Getter 注解

android - 无法将变量值分配给 extra.getString() 中的字符串;