Tuesday, March 29, 2016

Dagger2 And Xposed

So I'm trying to hook my specific application's class onCreate method, because that's when I initialize my DaggerComponent.

My application looks like this:

Code:

private ApplicationComponent component;

    @Override
    public void onCreate() {
        super.onCreate();

        component = DaggerApplicationComponent.builder()
                .applicationModule(new ApplicationModule(this))
                .build();
    }

    public ApplicationComponent getComponent() {
        return component;
    }

And in my Xposed loadPackage method, I'm trying to hook the component so I can inject it into the module like so:

Code:

String name = lpparam.packageName;
        if (name.equals(Common.PACKAGE_NAME)) {
            XposedHelpers.findAndHookMethod(Application.class, "attach", Context.class, new XC_MethodHook() {
                @Override
                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                    findAndHookMethod(
                            XposedHelpers.findClass(Common.APPLICATION, lpparam.classLoader),
                            "onCreate",
                            new XC_MethodHook() {

                                @Override
                                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                                    Application application = (Application) param.thisObject;
                                    Class clazz = param.method.getDeclaringClass();

                                    for (Field field: clazz.getDeclaredFields()) {
                                        String typeName = field.getType().getName();
                                        if (typeName.equals(ApplicationComponent.class.getName())) {
                                            Object object = XposedHelpers.getObjectField(param.thisObject, field.getName());

                                            Class<?> component = object.getClass();

                                            Method injector = component.getDeclaredMethod(
                                                    ApplicationComponent.INJECTOR, Loader.class);
                                            injector.invoke(Loader.this);

                                            Logg.log("GOT PAST THE BULL");
                                        }
                                    }
                                }
                            });
                }
            });
        }

However, this always leads to a ClassNotFoundException where my Loader (the xposed module) is not found on my apk.

Code:

03-29 15:13:05.186 8571-8571/software.umlgenerator I/Xposed: java.lang.NoClassDefFoundError: software/umlgenerator/xposed/loaders/Loader
                                                                at java.lang.Class.getDeclaredConstructorOrMethod(Native Method)
                                                                at java.lang.Class.getConstructorOrMethod(Class.java:468)
                                                                at java.lang.Class.getDeclaredMethod(Class.java:640)
                                                                at software.umlgenerator.xposed.loaders.Loader$1$1.afterHookedMethod(Loader.java:67)
                                                                at de.robv.android.xposed.XposedBridge.handleHookedMethod(XposedBridge.java:645)
                                                                at software.umlgenerator.UMLApplication.onCreate(Native Method)
                                                                at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007)
                                                                at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4328)
                                                                at de.robv.android.xposed.XposedBridge.invokeOriginalMethodNative(Native Method)
                                                                at de.robv.android.xposed.XposedBridge.handleHookedMethod(XposedBridge.java:631)
                                                                at android.app.ActivityThread.handleBindApplication(Native Method)
                                                                at android.app.ActivityThread.access$1500(ActivityThread.java:135)
                                                                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
                                                                at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                at android.os.Looper.loop(Looper.java:136)
                                                                at android.app.ActivityThread.main(ActivityThread.java:5001)
                                                                at java.lang.reflect.Method.invokeNative(Native Method)
                                                                at java.lang.reflect.Method.invoke(Method.java:515)
                                                                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
                                                                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
                                                                at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132)
                                                                at dalvik.system.NativeStart.main(Native Method)
                                                              Caused by: java.lang.ClassNotFoundException: Didn't find class "software.umlgenerator.xposed.loaders.Loader" on path: DexPathList[[zip file "/data/app/software.umlgenerator-1.apk"],nativeLibraryDirectories=[/data/app-lib/software.umlgenerator-1, /system/lib]]
                                                                at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
                                                                at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
                                                                at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
                                                                at java.lang.Class.getDeclaredConstructorOrMethod(Native Method)*
                                                                at java.lang.Class.getConstructorOrMethod(Class.java:468)*
                                                                at java.lang.Class.getDeclaredMethod(Class.java:640)*
                                                                at software.umlgenerator.xposed.loaders.Loader$1$1.afterHookedMethod(Loader.java:67)*
                                                                at de.robv.android.xposed.XposedBridge.handleHookedMethod(XposedBridge.java:645)*
                                                                at software.umlgenerator.UMLApplication.onCreate(Native Method)*
                                                                at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007)*
                                                                at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4328)*
                                                                at de.robv.android.xposed.XposedBridge.invokeOriginalMethodNative(Native Method)*
                                                                at de.robv.android.xposed.XposedBridge.handleHookedMethod(XposedBridge.java:631)*
                                                                at android.app.ActivityThread.handleBindApplication(Native Method)*
                                                                at android.app.ActivityThread.access$1500(ActivityThread.java:135)*
                                                                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)*
                                                                at android.os.Handler.dispatchMessage(Handler.java:102)*
                                                                at android.os.Looper.loop(Looper.java:136)*
                                                                at android.app.ActivityThread.main(ActivityThread.java:5001)*
                                                                at java.lang.reflect.Method.invokeNative(Native Method)*
                                                                at java.lang.reflect.Method.invoke(Method.java:515)*
                                                                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)*
                                                                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)*
                                                                at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132)*
                                                                at dalvik.system.NativeStart.main(Native Method)*

Any ideas?


from xda-developers http://ift.tt/1Th1AdQ
via IFTTT

No comments:

Post a Comment