3

Xposed question:

I want to modify some static field in android.os.Build, such as android.os.Build.BOARD, android.os.Build.DEVICE, android.os.Build.DISPLAY.

There are 3 private static methods ( private static String getString(String property), private static String[] getStringList(String property, String separator) , private static long getLong(String property) ) in Build.java.

Then I tried to hook the static method 'getString(String s)' in android.os.Build .

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);
        }
    });}

I try to print the first input argument in the before/after method, when I call android.os.Build.Model. But I'm wrong, it has not been triggered.

How can I hook this private static method in android.os.Build.java

private static String getString(String property) {
    return SystemProperties.get(property, UNKNOWN);}
Sebastiano
  • 12,289
  • 6
  • 47
  • 80
Ray
  • 71
  • 1
  • 6
  • did you try the [method](https://github.com/rovo89/XposedBridge/blob/master/src/de/robv/android/xposed/XposedHelpers.java) below `code`public static Method findMethodExact(Class> clazz, String methodName, Object... parameterTypes) { return findMethodExact(clazz, methodName, getParameterClasses(clazz.getClassLoader(), parameterTypes)); }`code` – Prasad Mar 23 '15 at 13:44
  • @ Maddy_at_Work, 3Q, I try the code below, but it's still not right. I'm new. – Ray Mar 24 '15 at 02:09

2 Answers2

0
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 can raise beforeHookedMethod, but step 2 can not.

Mattia Maestrini
  • 32,270
  • 15
  • 87
  • 94
Ray
  • 71
  • 1
  • 6
-1

I also did something like you want recently. Check this: https://github.com/pylerSM/XInstaller/blob/master/src/com/pyler/xinstaller/XInstaller.java#L1146

user2126425
  • 77
  • 1
  • 1
  • 3