Xposed开发记录

1.遇上方法被重复Hook,可以把hook方法放到Appilication的里面oncreate/onattch 里面。

方法重复hook的原因和多Dex有关,技巧来自 http://www.520monkey.com/archives/987

 XposedHelpers.findAndHookMethod(Application.class,"onCreate", new XC_MethodHook() {
            @Override
            protected void beforeHookedMethod(final MethodHookParam param) throws Throwable {
                super.beforeHookedMethod(param);
                //放在里面避免重复hook
                XposedHelpers.findAndHookMethod("android.app.Activity", loadPackageParam.classLoader, 
   "onCreate", Bundle.class, new XC_MethodHook() {
                    @Override
                    protected void afterHookedMethod(final MethodHookParam param) throws Throwable {
                        super.afterHookedMethod(param);
                        String class_name = param.thisObject.getClass().getSimpleName();
                        LogXUtils.e(class_name);
                    }
                });
            }
        });

2.接口hook

有时候想hook接口的方法数据,比如常见的Retofit的数据请求都是这样的:

public interface AppApiService {

    @Headers({"Content-Type: application/json", "Accept: application/json"})
    @POST()
    Call post(@Url String url, @Body String data);

    @Headers({"Content-Type: application/json", "Accept: application/json"})
    @GET()
    Call get(@Url String url);

    @GET()
    Call getWithHeader(@Url String url, @HeaderMap Map headers);
}

假使我们能hook接口的方法的返回数据,就能拦截到具体的数据。

但是,xposed不能直接hook 接口,只能找到对应的实现类去hook。找到implement该接口的类。

查看一下,该接口的实现类,通过create方法实现该类。hook z这个方法得到真正的实现类。

 retrofit.create(clazz);

调用方法的泛型参数传入Object.class即可

 XposedHelpers.findAndHookMethod("com.xingin.skynet.utils.a", loadPackageParam.classLoader, "onNext",Object.class, new XC_MethodHook() {
                        @Override
                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                            super.afterHookedMethod(param);
                            LogXUtils.e("hook com.xingin.skynet.utils.a");
                            Object o = param.args[0];
                            LogXUtils.e(GsonUtils.toJson(o));
                        }
                    });

你可能感兴趣的:(Xposed开发记录)