xiongzhu 10 bulan lalu
induk
melakukan
5f71ce2a0c
1 mengubah file dengan 30 tambahan dan 26 penghapusan
  1. 30 26
      app/src/main/java/com/example/modifiermodule/HookSystem.java

+ 30 - 26
app/src/main/java/com/example/modifiermodule/HookSystem.java

@@ -27,40 +27,44 @@ public class HookSystem extends BaseHook {
                     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();
         }
 
         try {
-            Class<?> WifiServiceImpl = XposedHelpers.findClass("com.android.server.wifi.WifiServiceImpl", lpparam.classLoader);
-            XposedHelpers.findAndHookMethod(WifiServiceImpl, "getFactoryMacAddresses", new XC_MethodHook() {
+            Class<?> SystemServiceManager = XposedHelpers.findClass("com.android.server.SystemServiceManager", lpparam.classLoader);
+            XposedHelpers.findAndHookMethod(SystemServiceManager, "loadClassFromLoader", String.class, ClassLoader.class, new XC_MethodHook() {
                 @Override
                 protected void afterHookedMethod(MethodHookParam param) throws Throwable {
-                    String[] macs = new String[]{getProperty(PROP_MAC, "")};
-                    log("spoof getFactoryMacAddresses: " + macs[0]);
-                    param.setResult(macs);
-                }
-            });
+                    if (param.hasThrowable()) return;
+                    Class<?> cls = (Class<?>) param.getResult();
+                    String name = cls.getName();
+                    log("system_server loadClassFromLoader: " + param.args[0] + " " + name);
 
-            XposedHelpers.findAndHookMethod(WifiServiceImpl, "getConnectionInfo", String.class, String.class, new XC_MethodHook() {
-                @Override
-                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
-                    String mac = getProperty(PROP_MAC, "");
-                    String bssid = getProperty(PROP_BSSID, "");
-                    log("spoof getConnectionInfo: " + mac + " " + bssid);
-                    param.setResult(mac);
-                    XposedHelpers.setObjectField(param.getResult(), "macAddress", mac);
-                    XposedHelpers.setObjectField(param.getResult(), "mBSSID", bssid);
+                    if (name.equals("com.android.server.wifi.WifiService")) {
+                        ClassLoader classLoader = (ClassLoader) param.args[1];
+                        Class<?> WifiServiceImpl = XposedHelpers.findClass("com.android.server.wifi.WifiServiceImpl", classLoader);
+                        XposedHelpers.findAndHookMethod(WifiServiceImpl, "getFactoryMacAddresses", new XC_MethodHook() {
+                            @Override
+                            protected void afterHookedMethod(MethodHookParam param) throws Throwable {
+                                String[] macs = new String[]{getProperty(PROP_MAC, "")};
+                                log("spoof getFactoryMacAddresses: " + macs[0]);
+                                param.setResult(macs);
+                            }
+                        });
+
+                        XposedHelpers.findAndHookMethod(WifiServiceImpl, "getConnectionInfo", String.class, String.class, new XC_MethodHook() {
+                            @Override
+                            protected void afterHookedMethod(MethodHookParam param) throws Throwable {
+                                String mac = getProperty(PROP_MAC, "");
+                                String bssid = getProperty(PROP_BSSID, "");
+                                log("spoof getConnectionInfo: " + mac + " " + bssid);
+                                param.setResult(mac);
+                                XposedHelpers.setObjectField(param.getResult(), "mMacAddress", mac);
+                                XposedHelpers.setObjectField(param.getResult(), "mBSSID", bssid);
+                            }
+                        });
+                    }
                 }
             });
         } catch (Exception e) {