xiongzhu 11 miesięcy temu
rodzic
commit
f5e5ab5f47

+ 91 - 17
app/src/main/java/com/example/modifiermodule/BaseHook.java

@@ -1,49 +1,116 @@
 package com.example.modifiermodule;
 
 import android.annotation.SuppressLint;
+import android.app.Application;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
 import android.text.TextUtils;
+import android.util.Base64;
 import android.util.Log;
 
+import org.apache.commons.io.FileUtils;
+import org.json.JSONObject;
+
+import java.io.File;
 import java.lang.reflect.Method;
+import java.nio.charset.StandardCharsets;
 
 import de.robv.android.xposed.XposedBridge;
+import de.robv.android.xposed.XposedHelpers;
 
 public class BaseHook {
-    static final String PROP_MCC = "persist.spoof.mcc";
-    static final String PROP_MNC = "persist.spoof.mnc";
-    static final String PROP_ICCID = "persist.spoof.iccid";
-    static final String PROP_IMSI = "persist.spoof.imsi";
-    static final String PROP_IMEI = "persist.spoof.imei";
-    static final String PROP_NUMBER = "persist.spoof.number";
-    static final String PROP_COUNTRY = "persist.spoof.country";
-    static final String PROP_CARRIER_ID = "persist.spoof.carrier.id";
-    static final String PROP_CARRIER_NAME = "persist.spoof.carrier.name";
-    static final String PROP_UPI_POLICY = "persist.spoof.upi.policy";
+//    static final String PROP_MCC = "persist.spoof.mcc";
+//    static final String PROP_MNC = "persist.spoof.mnc";
+//    static final String PROP_ICCID = "persist.spoof.iccid";
+//    static final String PROP_IMSI = "persist.spoof.imsi";
+//    static final String PROP_IMEI = "persist.spoof.imei";
+//    static final String PROP_NUMBER = "persist.spoof.number";
+//    static final String PROP_COUNTRY = "persist.spoof.country";
+//    static final String PROP_CARRIER_ID = "persist.spoof.carrier.id";
+//    static final String PROP_CARRIER_NAME = "persist.spoof.carrier.name";
+//    static final String PROP_UPI_POLICY = "persist.spoof.upi.policy";
+
+    static final String PROP_MCC = "mcc";
+    static final String PROP_MNC = "mnc";
+    static final String PROP_ICCID = "iccid";
+    static final String PROP_IMSI = "imsi";
+    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_UPI_POLICY = "upi_policy";
 
     static final String TAG = "Modifier";
 
+    public BaseHook(ClassLoader classLoader) {
+        this.classLoader = classLoader;
+    }
+
     static void log(String message) {
         Log.i(TAG, message);
         XposedBridge.log(TAG + ": " + message);
     }
 
+    private ClassLoader classLoader;
+
+//    @SuppressLint("PrivateApi")
+//    public String getProperty(String key, String defaultValue) {
+//        String value = defaultValue;
+//        try {
+//            Class<?> c = Class.forName("android.os.SystemProperties");
+//            Method get = c.getMethod("get", String.class, String.class);
+//            value = (String) (get.invoke(c, key, defaultValue));
+//            if (TextUtils.isEmpty(value)) {
+//                value = defaultValue;
+//            }
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+//        return value;
+//    }
+//
+//    public int getIntProperty(String key, int defaultValue) {
+//        int value = defaultValue;
+//        try {
+//            String prop = getProperty(key, String.valueOf(defaultValue));
+//            if (TextUtils.isEmpty(prop)) {
+//                return defaultValue;
+//            }
+//            value = Integer.parseInt(prop);
+//        } catch (NumberFormatException e) {
+//            e.printStackTrace();
+//        }
+//        return value;
+//    }
+
     @SuppressLint("PrivateApi")
-    static String getProperty(String key, String defaultValue) {
+    public String getProperty(String key, String defaultValue) {
+        log("getProperty: " + key);
         String value = defaultValue;
         try {
-            Class<?> c = Class.forName("android.os.SystemProperties");
-            Method get = c.getMethod("get", String.class, String.class);
-            value = (String) (get.invoke(c, key, defaultValue));
-            if (TextUtils.isEmpty(value)) {
-                value = defaultValue;
+            Context context = getContext();
+            File configFile = new File(context.getExternalFilesDir("config"), "config.json");
+            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)));
+                    if (jsonObject.has(key)) {
+                        value = jsonObject.getString(key);
+                    }
+                }
             }
         } catch (Exception e) {
+            log("getProperty: " + e.getMessage());
             e.printStackTrace();
         }
         return value;
     }
 
-    static int getIntProperty(String key, int defaultValue) {
+    public int getIntProperty(String key, int defaultValue) {
         int value = defaultValue;
         try {
             String prop = getProperty(key, String.valueOf(defaultValue));
@@ -56,4 +123,11 @@ public class BaseHook {
         }
         return value;
     }
+
+    public Context getContext() {
+        Class<?> ActivityThread = XposedHelpers.findClass("android.app.ActivityThread", classLoader);
+        Object currentActivityThread = XposedHelpers.callStaticMethod(ActivityThread, "currentActivityThread");
+        Application application = (Application) XposedHelpers.callMethod(currentActivityThread, "getApplication");
+        return application.getApplicationContext();
+    }
 }

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

@@ -9,7 +9,11 @@ import de.robv.android.xposed.XposedHelpers;
 import de.robv.android.xposed.callbacks.XC_LoadPackage;
 
 public class Hook13 extends BaseHook {
-    public static void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) {
+    public Hook13(ClassLoader classLoader) {
+        super(classLoader);
+    }
+
+    public   void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) {
         if (!lpparam.packageName.equals("com.android.phone")) {
             return;
         }

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

@@ -9,7 +9,11 @@ import de.robv.android.xposed.XposedHelpers;
 import de.robv.android.xposed.callbacks.XC_LoadPackage;
 
 public class Hook14 extends BaseHook {
-    public static void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
+    public Hook14(ClassLoader classLoader) {
+        super(classLoader);
+    }
+
+    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
         if (!lpparam.packageName.equals("com.android.phone")) {
             return;
         }

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

@@ -5,7 +5,12 @@ import de.robv.android.xposed.XposedHelpers;
 import de.robv.android.xposed.callbacks.XC_LoadPackage;
 
 public class HookMessage_043001RC00 extends BaseHook {
-    public static void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
+
+    public HookMessage_043001RC00(ClassLoader classLoader) {
+        super(classLoader);
+    }
+
+    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() {

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

@@ -5,7 +5,11 @@ import de.robv.android.xposed.XposedHelpers;
 import de.robv.android.xposed.callbacks.XC_LoadPackage;
 
 public class HookMessage_20241215_00_RC00 extends BaseHook {
-    public static void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
+    public HookMessage_20241215_00_RC00(ClassLoader classLoader) {
+        super(classLoader);
+    }
+
+    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
         try {
             Class<?> buiz = XposedHelpers.findClass("buiz", lpparam.classLoader);
             XposedHelpers.findAndHookMethod(buiz, "d", String.class, new XC_MethodHook() {

+ 13 - 6
app/src/main/java/com/example/modifiermodule/XposedInit.java

@@ -1,5 +1,7 @@
 package com.example.modifiermodule;
 
+import static com.example.modifiermodule.BaseHook.log;
+
 import android.annotation.SuppressLint;
 import android.app.Application;
 import android.content.BroadcastReceiver;
@@ -7,6 +9,8 @@ import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
 
+import org.apache.commons.io.FileUtils;
+
 import java.io.File;
 import java.util.Optional;
 import java.util.concurrent.ScheduledThreadPoolExecutor;
@@ -20,7 +24,7 @@ import de.robv.android.xposed.callbacks.XC_InitPackageResources;
 import de.robv.android.xposed.callbacks.XC_LoadPackage;
 
 @SuppressLint("DefaultLocale")
-public class XposedInit extends BaseHook implements IXposedHookLoadPackage, IXposedHookZygoteInit, IXposedHookInitPackageResources {
+public class XposedInit implements IXposedHookLoadPackage, IXposedHookZygoteInit, IXposedHookInitPackageResources {
     private final ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1);
 
     @Override
@@ -61,17 +65,20 @@ public class XposedInit extends BaseHook implements IXposedHookLoadPackage, IXpo
                         }, filter);
                         log("register broadcast receiver success");
                     }
+                    File configFile = new File(application.getExternalFilesDir("config"), "config.json");
+                    if (!configFile.exists()) {
+                        FileUtils.write(configFile, "{\"sender\":\"1234\",\"message\":\"test\"}", "UTF-8");
+                    }
                 } catch (Exception e) {
                     log("get phone context failed: " + e.getMessage());
                     e.printStackTrace();
                 }
 
             }, 5, TimeUnit.SECONDS);
-
             if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
-                Hook14.handleLoadPackage(lpparam);
+                new Hook14(lpparam.classLoader).handleLoadPackage(lpparam);
             } else {
-                Hook13.handleLoadPackage(lpparam);
+                new Hook13(lpparam.classLoader).handleLoadPackage(lpparam);
             }
         }
 
@@ -88,9 +95,9 @@ public class XposedInit extends BaseHook implements IXposedHookLoadPackage, IXpo
                 log("get message version error: " + e.getMessage());
             }
             if ("messages.android_20241215_00_RC00.phone.openbeta_dynamic".equals(versionName)) {
-                HookMessage_20241215_00_RC00.handleLoadPackage(lpparam);
+                new HookMessage_20241215_00_RC00(lpparam.classLoader).handleLoadPackage(lpparam);
             } else {
-                HookMessage_043001RC00.handleLoadPackage(lpparam);
+                new HookMessage_043001RC00(lpparam.classLoader).handleLoadPackage(lpparam);
             }
 
         }

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

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string-array name="xposed_scope">
-        <item>com.google.android.apps.messaging</item>
+<!--        <item>com.google.android.apps.messaging</item>-->
 <!--        <item>com.google.android.gms</item>-->
 <!--        <item>com.kee.SIMdeviceinfo</item>-->
         <item>com.android.phone</item>