xiongzhu 10 månader sedan
förälder
incheckning
2aa884c3f3

+ 2 - 0
app/src/main/java/com/example/modifiermodule/BaseHook.java

@@ -43,6 +43,8 @@ public class BaseHook {
     static final String PROP_SERIAL = "serialNo";
     static final String PROP_BT_MAC = "btMac";
     static final String PROP_ETH_MAC = "ethMac";
+    static final String PROP_GMS_AID = "gmsAid";
+    static final String PROP_ROOT_AID = "rootAid";
     static final String PROP_ANDROID_ID = "androidId";
 
     static final String TAG = "ModifierModule";

+ 64 - 0
app/src/main/java/com/example/modifiermodule/HookSettings.java

@@ -0,0 +1,64 @@
+package com.example.modifiermodule;
+
+import org.apache.commons.lang3.StringUtils;
+
+import de.robv.android.xposed.XC_MethodHook;
+import de.robv.android.xposed.XposedHelpers;
+import de.robv.android.xposed.callbacks.XC_LoadPackage;
+
+public class HookSettings extends BaseHook {
+    public HookSettings(ClassLoader classLoader) {
+        super(classLoader);
+    }
+
+    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
+        try {
+            Class<?> SettingsProvider = XposedHelpers.findClass("com.android.providers.settings.SettingsProvider", lpparam.classLoader);
+            XposedHelpers.findAndHookMethod(SettingsProvider, "getSecureSetting", String.class, int.class, new XC_MethodHook() {
+                @Override
+                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
+                    String name = (String) param.args[0];
+                    int requestingUserId = (int) param.args[1];
+                    String value = (String) XposedHelpers.getObjectField(param.getResult(), "value");
+                    String packageName = (String) XposedHelpers.callMethod(param.getResult(), "getPackageName");
+                    log(String.format("getSecureSetting(%s, %s, %d): %s", packageName, name, requestingUserId, value));
+                    if (name.equals("android_id")) {
+                        String androidId = null;
+                        if (packageName != null && packageName.contains("com.google.android.gms")) {
+                            androidId = getProperty(PROP_GMS_AID, "");
+                        } else if ("android".equals(packageName)) {
+                            androidId = getProperty(PROP_ANDROID_ID, "");
+                        } else if ("root".equals(packageName)) {
+                            androidId = getProperty(PROP_ROOT_AID, "");
+                        }
+                        if (StringUtils.isNotBlank(androidId)) {
+                            XposedHelpers.setObjectField(param.getResult(), "value", androidId);
+                            log(String.format("  -> %s", androidId));
+                        }
+                    }
+                }
+            });
+            XposedHelpers.findAndHookMethod(SettingsProvider, "getSystemSetting", String.class, int.class, new XC_MethodHook() {
+                @Override
+                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
+                    String name = (String) param.args[0];
+                    int requestingUserId = (int) param.args[1];
+                    String value = (String) XposedHelpers.getObjectField(param.getResult(), "value");
+                    String packageName = (String) XposedHelpers.callMethod(param.getResult(), "getPackageName");
+                    log(String.format("getSystemSetting(%s, %s, %d): %s", packageName, name, requestingUserId, value));
+                }
+            });
+            XposedHelpers.findAndHookMethod(SettingsProvider, "getGlobalSetting", String.class, new XC_MethodHook() {
+                @Override
+                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
+                    String name = (String) param.args[0];
+                    String value = (String) XposedHelpers.getObjectField(param.getResult(), "value");
+                    String packageName = (String) XposedHelpers.callMethod(param.getResult(), "getPackageName");
+                    log(String.format("getGlobalSetting(%s, %s): %s", packageName, name, value));
+                }
+            });
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}

+ 1 - 2
app/src/main/java/com/example/modifiermodule/HookSystem.java

@@ -1,8 +1,6 @@
 package com.example.modifiermodule;
 
 import android.content.AttributionSource;
-import android.content.Context;
-import android.content.SharedPreferences;
 import android.net.ConnectivityManager;
 import android.net.NetworkInfo;
 import android.os.Build;
@@ -29,6 +27,7 @@ public class HookSystem extends BaseHook {
             e.printStackTrace();
             log("setConfigFile fail");
         }
+
         try {
             Class<?> DeviceIdentifiersPolicy = XposedHelpers.findClass("com.android.server.os.DeviceIdentifiersPolicyService$DeviceIdentifiersPolicy", lpparam.classLoader);
             XposedHelpers.findAndHookMethod(DeviceIdentifiersPolicy, "getSerial", new XC_MethodHook() {

+ 4 - 0
app/src/main/java/com/example/modifiermodule/XposedInit.java

@@ -68,6 +68,10 @@ public class XposedInit implements IXposedHookLoadPackage, IXposedHookZygoteInit
             new HookSystem(lpparam.classLoader).handleLoadPackage(lpparam);
         }
 
+        if ("com.android.providers.settings".equals(lpparam.packageName)) {
+            new HookSettings(lpparam.classLoader).handleLoadPackage(lpparam);
+        }
+
 //        if (lpparam.packageName.startsWith("com.google.android.gms")) {
 //            new HookGms(lpparam.classLoader).handleLoadPackage(lpparam);
 //        }