HookSystem.java 7.3 KB

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