|
|
@@ -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();
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|