Hook13.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. package com.example.modifiermodule;
  2. import android.telephony.SubscriptionInfo;
  3. import java.util.List;
  4. import de.robv.android.xposed.XC_MethodHook;
  5. import de.robv.android.xposed.XposedHelpers;
  6. import de.robv.android.xposed.callbacks.XC_LoadPackage;
  7. public class Hook13 extends BaseHook {
  8. public Hook13(ClassLoader classLoader) {
  9. super(classLoader);
  10. }
  11. public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) {
  12. if (!lpparam.packageName.equals("com.android.phone")) {
  13. return;
  14. }
  15. try {
  16. Class<?> PhoneInterfaceManager = XposedHelpers.findClass("com.android.phone.PhoneInterfaceManager", lpparam.classLoader);
  17. XposedHelpers.findAndHookMethod(PhoneInterfaceManager, "getLine1NumberForDisplay", int.class, String.class, String.class, new XC_MethodHook() {
  18. @Override
  19. protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
  20. log("spoof PhoneInterfaceManager.getLine1NumberForDisplay");
  21. param.setResult(getProperty(PROP_NUMBER, ""));
  22. }
  23. });
  24. XposedHelpers.findAndHookMethod(PhoneInterfaceManager, "getNetworkCountryIsoForPhone", int.class, new XC_MethodHook() {
  25. @Override
  26. protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
  27. log("spoof PhoneInterfaceManager.getNetworkCountryIsoForPhone");
  28. param.setResult(getProperty(PROP_COUNTRY, ""));
  29. }
  30. });
  31. XposedHelpers.findAndHookMethod(PhoneInterfaceManager, "getImeiForSlot", int.class, String.class, String.class, new XC_MethodHook() {
  32. @Override
  33. protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
  34. log("spoof PhoneInterfaceManager.getImeiForSlot");
  35. param.setResult(getProperty(PROP_IMEI, ""));
  36. }
  37. });
  38. XposedHelpers.findAndHookMethod(PhoneInterfaceManager, "getMeidForSlot", int.class, String.class, String.class, new XC_MethodHook() {
  39. @Override
  40. protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
  41. log("spoof PhoneInterfaceManager.getMeidForSlot");
  42. String imei = getProperty(PROP_IMEI, "");
  43. String meid = imei;
  44. if (imei.length() > 14) {
  45. meid = imei.substring(0, 14);
  46. }
  47. param.setResult(meid);
  48. }
  49. });
  50. XposedHelpers.findAndHookMethod(PhoneInterfaceManager, "getSubscriptionSpecificCarrierId", int.class, new XC_MethodHook() {
  51. @Override
  52. protected void beforeHookedMethod(MethodHookParam param) {
  53. int carrierId = getIntProperty(PROP_CARRIER_ID, -1);
  54. if (carrierId != -1) {
  55. log("spoof PhoneInterfaceManager.getSubscriptionSpecificCarrierId");
  56. param.setResult(carrierId);
  57. }
  58. }
  59. });
  60. XposedHelpers.findAndHookMethod(PhoneInterfaceManager, "getSubscriptionCarrierId", int.class, new XC_MethodHook() {
  61. @Override
  62. protected void beforeHookedMethod(MethodHookParam param) {
  63. log("spoof PhoneInterfaceManager.getSubscriptionCarrierId");
  64. int carrierId = getIntProperty(PROP_CARRIER_ID, -1);
  65. if (carrierId != -1) {
  66. param.setResult(carrierId);
  67. }
  68. }
  69. });
  70. XposedHelpers.findAndHookMethod(PhoneInterfaceManager, "getDeviceIdWithFeature", String.class, String.class, new XC_MethodHook() {
  71. @Override
  72. protected void beforeHookedMethod(MethodHookParam param) {
  73. log("spoof PhoneInterfaceManager.getDeviceIdWithFeature");
  74. param.setResult(getProperty(PROP_IMEI, ""));
  75. }
  76. });
  77. } catch (Exception e) {
  78. e.printStackTrace();
  79. }
  80. Class<?> SystemProperties = XposedHelpers.findClass("android.os.SystemProperties", lpparam.classLoader);
  81. try {
  82. Class<?> SubscriptionController = XposedHelpers.findClass("com.android.internal.telephony.SubscriptionController", lpparam.classLoader);
  83. XposedHelpers.findAndHookMethod(SubscriptionController, "getPhoneNumberFromFirstAvailableSource", int.class, String.class, String.class, new XC_MethodHook() {
  84. @Override
  85. protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
  86. log("spoof SubscriptionController.getPhoneNumberFromFirstAvailableSource");
  87. param.setResult(getProperty(PROP_NUMBER, ""));
  88. }
  89. });
  90. XposedHelpers.findAndHookMethod(SubscriptionController, "getActiveSubscriptionInfoList", String.class, new XC_MethodHook() {
  91. @Override
  92. protected void afterHookedMethod(MethodHookParam param) throws Throwable {
  93. log("spoof SubscriptionController.getActiveSubscriptionInfoList");
  94. List<SubscriptionInfo> list = (List<SubscriptionInfo>) param.getResult();
  95. for (SubscriptionInfo info : list) {
  96. XposedHelpers.setObjectField(info, "mMcc", getProperty(PROP_MCC, ""));
  97. XposedHelpers.setObjectField(info, "mMnc", getProperty(PROP_MNC, ""));
  98. XposedHelpers.setObjectField(info, "mCountryIso", getProperty(PROP_COUNTRY, ""));
  99. XposedHelpers.setObjectField(info, "mIccId", getProperty(PROP_ICCID, ""));
  100. int carrierId = getIntProperty(PROP_CARRIER_ID, -1);
  101. if (carrierId != -1) {
  102. XposedHelpers.setObjectField(info, "mCarrierId", carrierId);
  103. }
  104. }
  105. XposedHelpers.callStaticMethod(SystemProperties, "set", "gsm.sim.operator.iso-country", getProperty(PROP_COUNTRY, ""));
  106. XposedHelpers.callStaticMethod(SystemProperties, "set", "gsm.sim.operator.numeric", getProperty(PROP_MCC, "") + getProperty(PROP_MNC, ""));
  107. XposedHelpers.callStaticMethod(SystemProperties, "set", "gsm.operator.numeric", getProperty(PROP_MCC, "") + getProperty(PROP_MNC, ""));
  108. }
  109. });
  110. XposedHelpers.findAndHookMethod(SubscriptionController, "getActiveSubscriptionInfoList", String.class, String.class, new XC_MethodHook() {
  111. @Override
  112. protected void afterHookedMethod(MethodHookParam param) throws Throwable {
  113. log("spoof SubscriptionController.getActiveSubscriptionInfoList");
  114. List<SubscriptionInfo> list = (List<SubscriptionInfo>) param.getResult();
  115. for (SubscriptionInfo info : list) {
  116. XposedHelpers.setObjectField(info, "mMcc", getProperty(PROP_MCC, ""));
  117. XposedHelpers.setObjectField(info, "mMnc", getProperty(PROP_MNC, ""));
  118. XposedHelpers.setObjectField(info, "mCountryIso", getProperty(PROP_COUNTRY, ""));
  119. XposedHelpers.setObjectField(info, "mIccId", getProperty(PROP_ICCID, ""));
  120. int carrierId = getIntProperty(PROP_CARRIER_ID, -1);
  121. if (carrierId != -1) {
  122. XposedHelpers.setObjectField(info, "mCarrierId", carrierId);
  123. }
  124. }
  125. XposedHelpers.callStaticMethod(SystemProperties, "set", "gsm.sim.operator.iso-country", getProperty(PROP_COUNTRY, ""));
  126. XposedHelpers.callStaticMethod(SystemProperties, "set", "gsm.sim.operator.numeric", getProperty(PROP_MCC, "") + getProperty(PROP_MNC, ""));
  127. XposedHelpers.callStaticMethod(SystemProperties, "set", "gsm.operator.numeric", getProperty(PROP_MCC, "") + getProperty(PROP_MNC, ""));
  128. }
  129. });
  130. XposedHelpers.findAndHookMethod(SubscriptionController, "getSimStateForSlotIndex", int.class, new XC_MethodHook() {
  131. @Override
  132. protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
  133. log("spoof SubscriptionController.getSimStateForSlotIndex");
  134. param.setResult(5);
  135. }
  136. });
  137. } catch (Exception e) {
  138. e.printStackTrace();
  139. }
  140. try {
  141. Class<?> PhoneSubInfoController = XposedHelpers.findClass("com.android.internal.telephony.PhoneSubInfoController", lpparam.classLoader);
  142. log("PhoneSubInfoController: " + lpparam.packageName);
  143. XposedHelpers.findAndHookMethod(PhoneSubInfoController, "getIccSerialNumberForSubscriber", int.class, String.class, String.class, new XC_MethodHook() {
  144. @Override
  145. protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
  146. log("spoof PhoneSubInfoController.getIccSerialNumberForSubscriber");
  147. param.setResult(getProperty(PROP_ICCID, ""));
  148. }
  149. });
  150. XposedHelpers.findAndHookMethod(PhoneSubInfoController, "getSubscriberIdForSubscriber", int.class, String.class, String.class, new XC_MethodHook() {
  151. @Override
  152. protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
  153. log("spoof PhoneSubInfoController.getSubscriberIdForSubscriber");
  154. param.setResult(getProperty(PROP_IMSI, ""));
  155. }
  156. });
  157. } catch (Exception e) {
  158. e.printStackTrace();
  159. }
  160. XposedHelpers.findAndHookMethod(SystemProperties, "get", String.class, new XC_MethodHook() {
  161. @Override
  162. protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
  163. String key = (String) param.args[0];
  164. if ("gsm.sim.operator.iso-country".equals(key)) {
  165. log("spoof SystemProperties.get(" + key + ")");
  166. param.setResult(getProperty(PROP_COUNTRY, ""));
  167. } else if ("gsm.sim.operator.numeric".equals(key)) {
  168. log("spoof SystemProperties.get(" + key + ")");
  169. param.setResult(getProperty(PROP_MCC, "") + getProperty(PROP_MNC, ""));
  170. } else if ("gsm.operator.numeric".equals(key)) {
  171. log("spoof SystemProperties.get(" + key + ")");
  172. param.setResult(getProperty(PROP_MCC, "") + getProperty(PROP_MNC, ""));
  173. }
  174. }
  175. });
  176. try {
  177. Class<?> CarrierResolver = XposedHelpers.findClass("com.android.internal.telephony.CarrierResolver", lpparam.classLoader);
  178. XposedHelpers.findAndHookMethod(CarrierResolver, "getCarrierIdFromSimMccMnc", String.class, String.class, new XC_MethodHook() {
  179. @Override
  180. protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
  181. log("spoof CarrierResolver.getCarrierIdFromSimMccMnc");
  182. int carrierId = getIntProperty(PROP_CARRIER_ID, -1);
  183. if (carrierId != -1) {
  184. param.setResult(carrierId);
  185. }
  186. }
  187. });
  188. } catch (Exception e) {
  189. e.printStackTrace();
  190. }
  191. }
  192. }