1

我目前在我的 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());
                                        }
                                    });

                                }
                            });

                        }

                    }
                });

            }
        });

    }
}
}

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

lpparam.classloader我在最后两个电话中也尝试过,但findAndHookMethod没有运气。

任何帮助将不胜感激!

4

1 回答 1

1

由于您正在拦截Class.forName并假设它确实在拦截某些内容,因此您不需要找到该类,您已经在param1.getResult(). 直接用XposedBridge.hookMethod(param1.getResult(), yourHook)就行了。

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

于 2018-03-09T12:17:22.413 回答