java - Xposed - 如何 Hook 私有(private)静态方法

标签 java android hook xposed-framework

提出的问题:

我想修改android.os.Build中的一些静态字段,比如android.os.Build.BOARD、android.os.Build.DEVICE、android.os.Build.DISPLAY。

有3个私有(private)静态方法( private static String getString(字符串属性), private static String[] getStringList(String property, String separator) , private static long getLong(字符串属性) ) 在 Build.java 中。

然后我尝试在 android.os.Build 中 Hook 静态方法“getString(String s)”。

public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {

    XposedBridge.log(loadPackageParam.packageName + " -> load ");

    Class build = XposedHelpers.findClass(Build.class.getName(), loadPackageParam.classLoader);

    XposedHelpers.findAndHookMethod(build, "getString", String.class, new XC_MethodHook() {
        @Override
        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
            XposedBridge.log("before ->" + param.args[0]);
            super.beforeHookedMethod(param);
        }

        @Override
        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
            XposedBridge.log("after ->" + param.args[0]);
            super.afterHookedMethod(param);
        }
    });}

当我调用 android.os.Build.Model 时,我尝试在 before/after 方法中打印第一个输入参数。但是我错了,它没有被触发。

如何 Hook 这个私有(private)静态方法 在 android.os.Build.java 中

private static String getString(String property) {
    return SystemProperties.get(property, UNKNOWN);}

最佳答案

public void initZygote(StartupParam startupParam) throws Throwable {  

    Class clazz = XposedHelpers.findClass(android.os.Build.class.getName(), null);

    Method m = XposedHelpers.findMethodExact(clazz, "getString", String.class);

    m.setAccessible(true);

    XposedBridge.hookMethod(m, new XC_MethodHook() {
        @Override
        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
            log("call -> " + (String) param.args[0]);
            super.beforeHookedMethod(param);
        }
    });

    String id = (String) m.invoke(null, "ro.build.id");
    log("step 1 try invoke->" + id);
    log("step 2 Call Build.ID ->" + Build.ID);
}

step 1可以raise beforeHookedMethod,但是step 2不能。

关于java - Xposed - 如何 Hook 私有(private)静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28947591/

相关文章:

java - 如何将该项目导入到 Eclipse 中?

java - popup-AlertDialog 错误地出现在其他 fragment 中

c++ - SetWindowsHookEx - Dll 注入(inject)错过了前几次调用

多进程应用程序中的 SQLite 更新 Hook

java - 在 64 位 JVM 上运行的 Eclipse 32 位

java - App Engine 和 Cloud Storage 我生成的缩略图图像的文件大小比原始图像大

java - JRadioButtons 不工作

android - 如何从常量中找到 Google Play 服务版本?

java - 枚举 : Difference between using enum and class with static variables

c - 进程 Hook 问题