如何通过在android中挂钩来获取Context

Mis*_*Zhu 3 hook android android-context xposed

背景是:

  1. 我正在使用xposed框架来挂钩第三方应用程序.
  2. 当我挂钩方法XXX时,xposed给了我"ClassNotFound"错误.我检查并发现方法XXX在dex文件中,并在运行时由DexClassLoader加载.
  3. 要挂钩方法XXX,我需要更改xposed中的默认ClassLoader DexClassLoader.要获取DexClassLoader实例,我需要第三方应用程序的Context实例.
  4. 这里有一个问题:如何获取上下文实例?

我搜索了stackoverflow,发现有人说你可以在Activity或Receiver中挂钩方法来检索它们的上下文.但我检查了Activity.class,发现没有返回Context类型值的方法,只有一个方法有Context类型参数,onCreateView(String name, Context context, AttributeSet attrs).

有没有办法获得上下文?

Pro*_*ife 8

Xposed已经为您提供了当前的钩子应用程序类加载器.

public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable {
        if (!lpparam.packageName.equals("com.android.systemui"))
            return;

        findAndHookMethod("com.android.systemui.statusbar.policy.Clock", lpparam.classLoader, "updateClock", new XC_MethodHook() {
            @Override
            protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                // this will be called before the clock was updated by the original method
            }
            @Override
            protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                // this will be called after the clock was updated by the original method
            }
    });
    }
Run Code Online (Sandbox Code Playgroud)

如您所见,"lpparam.classLoader"是当前的应用类加载器.我想你可能只是输入错误的内容,你能发布代码吗?但你可以得到当前的钩子应用程序应用程序激烈的女巫可以上传到上下文.Context context = (Context) AndroidAppHelper.currentApplication();

来源:https ://github.com/rovo89/XposedBridge/blob/master/src/android/app/AndroidAppHelper.java#L131来源:https://github.com/rovo89/XposedBridge/wiki/Development-tutorial