xiongzhu hace 10 meses
padre
commit
8afc63c220

+ 18 - 7
app/src/main/java/com/example/modifiermodule/BaseHook.java

@@ -39,9 +39,13 @@ public class BaseHook {
     static final String PROP_IMEI = "imei";
     static final String PROP_NUMBER = "number";
     static final String PROP_COUNTRY = "country";
-    static final String PROP_CARRIER_ID = "carrier_id";
-    static final String PROP_CARRIER_NAME = "carrier_name";
+    static final String PROP_CARRIER_ID = "carrierId";
+    static final String PROP_CARRIER_NAME = "carrierName";
     static final String PROP_UPI_POLICY = "upi_policy";
+    static final String PROP_MAC = "mac";
+    static final String PROP_BSSID = "bssid";
+    static final String PROP_SERIAL = "serialNo";
+    static final String PROP_ANDROID_ID = "androidId";
 
     static final String TAG = "Modifier";
 
@@ -92,12 +96,19 @@ public class BaseHook {
         String value = defaultValue;
         try {
             Context context = getContext();
-            File configFile = new File(context.getExternalFilesDir("config"), "config.json");
+            String packageName = context.getPackageName();
+            File configFile;
+            if (packageName.equals("android")) {
+                configFile = new File("/data/system/config.json");
+            } else if (packageName.equals("com.android.phone")) {
+                configFile = new File(context.getExternalFilesDir("config"), "config.json");
+            } else {
+                return defaultValue;
+            }
             if (configFile.exists()) {
-
-                String jsonBase64 = FileUtils.readFileToString(configFile, StandardCharsets.UTF_8);
-                if (!TextUtils.isEmpty(jsonBase64)) {
-                    JSONObject jsonObject = new JSONObject(new String(Base64.decode(jsonBase64, Base64.DEFAULT)));
+                String json = FileUtils.readFileToString(configFile, StandardCharsets.UTF_8);
+                if (!TextUtils.isEmpty(json)) {
+                    JSONObject jsonObject = new JSONObject(json);
                     if (jsonObject.has(key)) {
                         value = jsonObject.getString(key);
                     }

+ 8 - 1
app/src/main/java/com/example/modifiermodule/Hook13.java

@@ -13,7 +13,7 @@ public class Hook13 extends BaseHook {
         super(classLoader);
     }
 
-    public   void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) {
+    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) {
         if (!lpparam.packageName.equals("com.android.phone")) {
             return;
         }
@@ -72,6 +72,13 @@ public class Hook13 extends BaseHook {
                     }
                 }
             });
+            XposedHelpers.findAndHookMethod(PhoneInterfaceManager, "getDeviceIdWithFeature", String.class, String.class, new XC_MethodHook() {
+                @Override
+                protected void beforeHookedMethod(MethodHookParam param) {
+                    log("spoof PhoneInterfaceManager.getDeviceIdWithFeature");
+                    param.setResult(getProperty(PROP_IMEI, ""));
+                }
+            });
         } catch (Exception e) {
             e.printStackTrace();
         }

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

@@ -10,7 +10,7 @@ public class HookMessage_043001RC00 extends BaseHook {
         super(classLoader);
     }
 
-    public   void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
+    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
         try {
             Class<?> bhyo = XposedHelpers.findClass("bhyo", lpparam.classLoader);
             XposedHelpers.findAndHookMethod(bhyo, "d", String.class, new XC_MethodHook() {

+ 44 - 0
app/src/main/java/com/example/modifiermodule/HookSystem.java

@@ -0,0 +1,44 @@
+package com.example.modifiermodule;
+
+import de.robv.android.xposed.XC_MethodHook;
+import de.robv.android.xposed.XposedHelpers;
+import de.robv.android.xposed.callbacks.XC_LoadPackage;
+
+public class HookSystem extends BaseHook {
+
+    public HookSystem(ClassLoader classLoader) {
+        super(classLoader);
+    }
+
+    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
+        try {
+            Class<?> DeviceIdentifiersPolicy = XposedHelpers.findClass("com.android.server.os.DeviceIdentifiersPolicyService$DeviceIdentifiersPolicy", lpparam.classLoader);
+            XposedHelpers.findAndHookMethod(DeviceIdentifiersPolicy, "getSerial", new XC_MethodHook() {
+                @Override
+                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
+                    log("spoof getSerial");
+                    param.setResult(getProperty(PROP_SERIAL, ""));
+                }
+            });
+            XposedHelpers.findAndHookMethod(DeviceIdentifiersPolicy, "getSerialForPackage", String.class, String.class, new XC_MethodHook() {
+                @Override
+                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
+                    log("spoof getSerialForPackage");
+                    param.setResult(getProperty(PROP_SERIAL, ""));
+                }
+            });
+
+            XposedHelpers.findAndHookMethod(ClassLoader.class, "loadClass", String.class, new XC_MethodHook() {
+                @Override
+                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
+                    if (param.hasThrowable()) return;
+                    Class<?> cls = (Class<?>) param.getResult();
+                    String name = cls.getName();
+                    log("system_server loadClass: " + name);
+                }
+            });
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}

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

@@ -102,6 +102,10 @@ public class XposedInit implements IXposedHookLoadPackage, IXposedHookZygoteInit
 
         }
 
+        if ("android".equals(lpparam.packageName)) {
+            new HookSystem(lpparam.classLoader).handleLoadPackage(lpparam);
+        }
+
 //        Class<?> SubscriptionManager = XposedHelpers.findClass("android.telephony.SubscriptionManager", lpparam.classLoader);
 //        XposedHelpers.findAndHookMethod(SubscriptionManager, "getPhoneNumber", int.class, new XC_MethodHook() {
 //            @Override

+ 1 - 0
app/src/main/res/values/arrays.xml

@@ -5,5 +5,6 @@
 <!--        <item>com.google.android.gms</item>-->
 <!--        <item>com.kee.SIMdeviceinfo</item>-->
         <item>com.android.phone</item>
+        <item>system</item>
     </string-array>
 </resources>