HookSystem.java 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. package com.example.modifiermodule;
  2. import android.content.AttributionSource;
  3. import android.content.Context;
  4. import android.content.SharedPreferences;
  5. import android.net.ConnectivityManager;
  6. import android.net.NetworkInfo;
  7. import org.apache.commons.lang3.StringUtils;
  8. import java.io.File;
  9. import de.robv.android.xposed.XC_MethodHook;
  10. import de.robv.android.xposed.XposedHelpers;
  11. import de.robv.android.xposed.callbacks.XC_LoadPackage;
  12. public class HookSystem extends BaseHook {
  13. public HookSystem(ClassLoader classLoader) {
  14. super(classLoader);
  15. }
  16. public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
  17. try {
  18. setConfigFile(new File("/data/system/config.json"));
  19. } catch (Exception e) {
  20. e.printStackTrace();
  21. log("setConfigFile fail");
  22. }
  23. try {
  24. Class<?> DeviceIdentifiersPolicy = XposedHelpers.findClass("com.android.server.os.DeviceIdentifiersPolicyService$DeviceIdentifiersPolicy", lpparam.classLoader);
  25. XposedHelpers.findAndHookMethod(DeviceIdentifiersPolicy, "getSerial", new XC_MethodHook() {
  26. @Override
  27. protected void afterHookedMethod(MethodHookParam param) throws Throwable {
  28. String serial = getProperty(PROP_SERIAL, "");
  29. log(String.format("getSerial(): %s -> %s", param.getResult(), serial));
  30. param.setResult(serial);
  31. }
  32. });
  33. XposedHelpers.findAndHookMethod(DeviceIdentifiersPolicy, "getSerialForPackage", String.class, String.class, new XC_MethodHook() {
  34. @Override
  35. protected void afterHookedMethod(MethodHookParam param) throws Throwable {
  36. String serial = getProperty(PROP_SERIAL, "");
  37. log(String.format("getSerialForPackage(%s, %s): %s -> %s", param.args[0], param.args[1], param.getResult(), serial));
  38. param.setResult(serial);
  39. }
  40. });
  41. } catch (Exception e) {
  42. e.printStackTrace();
  43. }
  44. try {
  45. Class<?> SystemServiceManager = XposedHelpers.findClass("com.android.server.SystemServiceManager", lpparam.classLoader);
  46. XposedHelpers.findAndHookMethod(SystemServiceManager, "loadClassFromLoader", String.class, ClassLoader.class, new XC_MethodHook() {
  47. @Override
  48. protected void afterHookedMethod(MethodHookParam param) throws Throwable {
  49. if (param.hasThrowable()) return;
  50. Class<?> cls = (Class<?>) param.getResult();
  51. String name = cls.getName();
  52. log(String.format("loadClassFromLoader(%s, %s)", param.args[0], param.args[1]));
  53. if (name.equals("com.android.server.wifi.WifiService")) {
  54. ClassLoader classLoader = (ClassLoader) param.args[1];
  55. Class<?> WifiServiceImpl = XposedHelpers.findClass("com.android.server.wifi.WifiServiceImpl", classLoader);
  56. XposedHelpers.findAndHookMethod(WifiServiceImpl, "getFactoryMacAddresses", new XC_MethodHook() {
  57. @Override
  58. protected void afterHookedMethod(MethodHookParam param) throws Throwable {
  59. String[] old = (String[]) param.getResult();
  60. String[] macs = new String[]{getProperty(PROP_WIFI_MAC, "")};
  61. if (old == null) {
  62. log(String.format("getFactoryMacAddresses(): null -> %s", param.getResult(), macs[0]));
  63. } else {
  64. log(String.format("getFactoryMacAddresses(): %s -> %s", StringUtils.join(old, ","), macs[0]));
  65. }
  66. param.setResult(macs);
  67. }
  68. });
  69. XposedHelpers.findAndHookMethod(WifiServiceImpl, "getConnectionInfo", String.class, String.class, new XC_MethodHook() {
  70. @Override
  71. protected void afterHookedMethod(MethodHookParam param) throws Throwable {
  72. String mac = getProperty(PROP_WIFI_MAC, "");
  73. String bssid = getProperty(PROP_BSSID, "");
  74. log(String.format("getConnectionInfo(%s, %s)", param.args[0], param.args[1]));
  75. log(String.format(" mac: %s -> %s", XposedHelpers.getObjectField(param.getResult(), "mMacAddress"), mac));
  76. log(String.format(" bssid: %s -> %s", XposedHelpers.getObjectField(param.getResult(), "mBSSID"), bssid));
  77. XposedHelpers.setObjectField(param.getResult(), "mMacAddress", mac);
  78. XposedHelpers.setObjectField(param.getResult(), "mBSSID", bssid);
  79. }
  80. });
  81. } else if (name.equals("com.android.server.bluetooth.BluetoothService")) {
  82. ClassLoader classLoader = (ClassLoader) param.args[1];
  83. Class<?> BluetoothManagerService = XposedHelpers.findClass("com.android.server.bluetooth.BluetoothManagerService", classLoader);
  84. XposedHelpers.findAndHookMethod(BluetoothManagerService, "getAddress", new XC_MethodHook() {
  85. @Override
  86. protected void afterHookedMethod(MethodHookParam param) throws Throwable {
  87. AttributionSource attributionSource = (AttributionSource) param.args[0];
  88. String packageName = attributionSource.getPackageName();
  89. String mac = getProperty(PROP_BT_MAC, (String) param.getResult());
  90. log(String.format("getAddress(%s): %s -> %s", packageName, param.getResult(), mac));
  91. param.setResult(mac);
  92. }
  93. });
  94. } else if (name.equals("com.android.server.ConnectivityServiceInitializer")) {
  95. ClassLoader classLoader = (ClassLoader) param.args[1];
  96. Class<?> ConnectivityService = XposedHelpers.findClass("com.android.server.ConnectivityService", classLoader);
  97. XposedHelpers.findAndHookMethod(ConnectivityService, "getNetworkInfo", int.class, new XC_MethodHook() {
  98. @Override
  99. protected void afterHookedMethod(MethodHookParam param) throws Throwable {
  100. int networkType = (int) param.args[0];
  101. log(String.format("getNetworkInfo(%d)", networkType));
  102. if (networkType == ConnectivityManager.TYPE_ETHERNET && param.getResult() != null) {
  103. NetworkInfo networkInfo = (NetworkInfo) param.getResult();
  104. String mac = getProperty(PROP_ETH_MAC, networkInfo.getExtraInfo());
  105. log(String.format(" .extra: %s -> %s", networkInfo.getExtraInfo(), mac));
  106. XposedHelpers.setObjectField(networkInfo, "mExtraInfo", mac);
  107. }
  108. }
  109. });
  110. }
  111. }
  112. });
  113. } catch (Exception e) {
  114. e.printStackTrace();
  115. log("SystemProperties not found");
  116. }
  117. }
  118. }