|
@@ -83,113 +83,208 @@ public class XposedInit implements IXposedHookLoadPackage, IXposedHookZygoteInit
|
|
|
}, 5, TimeUnit.SECONDS);
|
|
}, 5, TimeUnit.SECONDS);
|
|
|
|
|
|
|
|
try {
|
|
try {
|
|
|
- Class<?> PhoneInterfaceManager = XposedHelpers.findClass("com.android.phone.PhoneInterfaceManager", lpparam.classLoader);
|
|
|
|
|
- XposedHelpers.findAndHookMethod(PhoneInterfaceManager, "getLine1NumberForDisplay", int.class, String.class, String.class, new XC_MethodHook() {
|
|
|
|
|
- @Override
|
|
|
|
|
- protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
|
|
|
|
|
- log("spoof PhoneInterfaceManager.getLine1NumberForDisplay");
|
|
|
|
|
- param.setResult(getVar("number", lpparam.packageName));
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- XposedHelpers.findAndHookMethod(PhoneInterfaceManager, "getNetworkCountryIsoForPhone", int.class, new XC_MethodHook() {
|
|
|
|
|
- @Override
|
|
|
|
|
- protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
|
|
|
|
|
- log("spoof PhoneInterfaceManager.getNetworkCountryIsoForPhone");
|
|
|
|
|
- param.setResult(getVar("country", lpparam.packageName));
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- XposedHelpers.findAndHookMethod(PhoneInterfaceManager, "getImeiForSlot", int.class, String.class, String.class, new XC_MethodHook() {
|
|
|
|
|
- @Override
|
|
|
|
|
- protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
|
|
|
|
|
- log("spoof PhoneInterfaceManager.getImeiForSlot");
|
|
|
|
|
- param.setResult(getVar("imei", lpparam.packageName));
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
- Class<?> SubscriptionController = XposedHelpers.findClass("com.android.internal.telephony.SubscriptionController", lpparam.classLoader);
|
|
|
|
|
- XposedHelpers.findAndHookMethod(SubscriptionController, "getPhoneNumberFromFirstAvailableSource", int.class, String.class, String.class, new XC_MethodHook() {
|
|
|
|
|
- @Override
|
|
|
|
|
- protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
|
|
|
|
|
- log("spoof SubscriptionController.getPhoneNumberFromFirstAvailableSource");
|
|
|
|
|
- param.setResult(getVar("number", lpparam.packageName));
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- Class<?> SystemProperties = XposedHelpers.findClass("android.os.SystemProperties", lpparam.classLoader);
|
|
|
|
|
- XposedHelpers.findAndHookMethod(SubscriptionController, "getActiveSubscriptionInfoList", String.class, new XC_MethodHook() {
|
|
|
|
|
- @Override
|
|
|
|
|
- protected void afterHookedMethod(MethodHookParam param) throws Throwable {
|
|
|
|
|
- log("spoof SubscriptionController.getActiveSubscriptionInfoList");
|
|
|
|
|
- List<SubscriptionInfo> list = (List<SubscriptionInfo>) param.getResult();
|
|
|
|
|
- for (SubscriptionInfo info : list) {
|
|
|
|
|
- XposedHelpers.setObjectField(info, "mMcc", getVar("mcc", lpparam.packageName));
|
|
|
|
|
- XposedHelpers.setObjectField(info, "mMnc", getVar("mnc", lpparam.packageName));
|
|
|
|
|
- XposedHelpers.setObjectField(info, "mCountryIso", getVar("country", lpparam.packageName));
|
|
|
|
|
- XposedHelpers.setObjectField(info, "mIccId", getVar("iccid", lpparam.packageName));
|
|
|
|
|
|
|
+ if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
|
|
|
|
|
+ Class<?> PhoneInterfaceManager = XposedHelpers.findClass("com.android.phone.PhoneInterfaceManager", lpparam.classLoader);
|
|
|
|
|
+ XposedHelpers.findAndHookMethod(PhoneInterfaceManager, "getLine1NumberForDisplay", int.class, String.class, String.class, new XC_MethodHook() {
|
|
|
|
|
+ @Override
|
|
|
|
|
+ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
|
|
|
|
|
+ log("spoof PhoneInterfaceManager.getLine1NumberForDisplay");
|
|
|
|
|
+ param.setResult(getVar("number", lpparam.packageName));
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ XposedHelpers.findAndHookMethod(PhoneInterfaceManager, "getNetworkCountryIsoForPhone", int.class, new XC_MethodHook() {
|
|
|
|
|
+ @Override
|
|
|
|
|
+ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
|
|
|
|
|
+ log("spoof PhoneInterfaceManager.getNetworkCountryIsoForPhone");
|
|
|
|
|
+ param.setResult(getVar("country", lpparam.packageName));
|
|
|
}
|
|
}
|
|
|
|
|
+ });
|
|
|
|
|
+ XposedHelpers.findAndHookMethod(PhoneInterfaceManager, "getImeiForSlot", int.class, String.class, String.class, new XC_MethodHook() {
|
|
|
|
|
+ @Override
|
|
|
|
|
+ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
|
|
|
|
|
+ log("spoof PhoneInterfaceManager.getImeiForSlot");
|
|
|
|
|
+ param.setResult(getVar("imei", lpparam.packageName));
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ XposedHelpers.findAndHookMethod(PhoneInterfaceManager, "getSimStateForSlotIndex", int.class, new XC_MethodHook() {
|
|
|
|
|
+ @Override
|
|
|
|
|
+ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
|
|
|
|
|
+ log("spoof PhoneInterfaceManager.getSimStateForSlotIndex");
|
|
|
|
|
+ param.setResult(5);
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
|
|
|
- XposedHelpers.callStaticMethod(SystemProperties, "set", "gsm.sim.operator.iso-country", getVar("country", lpparam.packageName));
|
|
|
|
|
- XposedHelpers.callStaticMethod(SystemProperties, "set", "gsm.sim.operator.numeric", getVar("mcc", lpparam.packageName) + getVar("mnc", lpparam.packageName));
|
|
|
|
|
- XposedHelpers.callStaticMethod(SystemProperties, "set", "gsm.operator.numeric", getVar("mcc", lpparam.packageName) + getVar("mnc", lpparam.packageName));
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- XposedHelpers.findAndHookMethod(SubscriptionController, "getActiveSubscriptionInfoList", String.class, String.class, new XC_MethodHook() {
|
|
|
|
|
- @Override
|
|
|
|
|
- protected void afterHookedMethod(MethodHookParam param) throws Throwable {
|
|
|
|
|
- log("spoof SubscriptionController.getActiveSubscriptionInfoList");
|
|
|
|
|
- List<SubscriptionInfo> list = (List<SubscriptionInfo>) param.getResult();
|
|
|
|
|
- for (SubscriptionInfo info : list) {
|
|
|
|
|
- XposedHelpers.setObjectField(info, "mMcc", getVar("mcc", lpparam.packageName));
|
|
|
|
|
- XposedHelpers.setObjectField(info, "mMnc", getVar("mnc", lpparam.packageName));
|
|
|
|
|
- XposedHelpers.setObjectField(info, "mCountryIso", getVar("country", lpparam.packageName));
|
|
|
|
|
- XposedHelpers.setObjectField(info, "mIccId", getVar("iccid", lpparam.packageName));
|
|
|
|
|
|
|
+ Class<?> SubscriptionController = XposedHelpers.findClass("com.android.internal.telephony.subscription.SubscriptionManagerService", lpparam.classLoader);
|
|
|
|
|
+ XposedHelpers.findAndHookMethod(SubscriptionController, "getPhoneNumberFromFirstAvailableSource", int.class, String.class, String.class, new XC_MethodHook() {
|
|
|
|
|
+ @Override
|
|
|
|
|
+ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
|
|
|
|
|
+ log("spoof SubscriptionController.getPhoneNumberFromFirstAvailableSource");
|
|
|
|
|
+ param.setResult(getVar("number", lpparam.packageName));
|
|
|
}
|
|
}
|
|
|
|
|
+ });
|
|
|
|
|
+ Class<?> SystemProperties = XposedHelpers.findClass("android.os.SystemProperties", lpparam.classLoader);
|
|
|
|
|
+ XposedHelpers.findAndHookMethod(SubscriptionController, "getActiveSubscriptionInfoList", String.class, String.class, boolean.class, new XC_MethodHook() {
|
|
|
|
|
+ @Override
|
|
|
|
|
+ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
|
|
|
|
|
+ log("spoof SubscriptionController.getActiveSubscriptionInfoList");
|
|
|
|
|
+ List<SubscriptionInfo> list = (List<SubscriptionInfo>) param.getResult();
|
|
|
|
|
+ for (SubscriptionInfo info : list) {
|
|
|
|
|
+ XposedHelpers.setObjectField(info, "mMcc", getVar("mcc", lpparam.packageName));
|
|
|
|
|
+ XposedHelpers.setObjectField(info, "mMnc", getVar("mnc", lpparam.packageName));
|
|
|
|
|
+ XposedHelpers.setObjectField(info, "mCountryIso", getVar("country", lpparam.packageName));
|
|
|
|
|
+ XposedHelpers.setObjectField(info, "mIccId", getVar("iccid", lpparam.packageName));
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- XposedHelpers.callStaticMethod(SystemProperties, "set", "gsm.sim.operator.iso-country", getVar("country", lpparam.packageName));
|
|
|
|
|
- XposedHelpers.callStaticMethod(SystemProperties, "set", "gsm.sim.operator.numeric", getVar("mcc", lpparam.packageName) + getVar("mnc", lpparam.packageName));
|
|
|
|
|
- XposedHelpers.callStaticMethod(SystemProperties, "set", "gsm.operator.numeric", getVar("mcc", lpparam.packageName) + getVar("mnc", lpparam.packageName));
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- XposedHelpers.findAndHookMethod(SubscriptionController, "getSimStateForSlotIndex", int.class, new XC_MethodHook() {
|
|
|
|
|
- @Override
|
|
|
|
|
- protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
|
|
|
|
|
- log("spoof SubscriptionController.getSimStateForSlotIndex");
|
|
|
|
|
- param.setResult(5);
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
- Class<?> PhoneSubInfoController = XposedHelpers.findClass("com.android.internal.telephony.PhoneSubInfoController", lpparam.classLoader);
|
|
|
|
|
- XposedHelpers.findAndHookMethod(PhoneSubInfoController, "getIccSerialNumberForSubscriber", int.class, String.class, String.class, new XC_MethodHook() {
|
|
|
|
|
- @Override
|
|
|
|
|
- protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
|
|
|
|
|
- log("spoof PhoneSubInfoController.getIccSerialNumberForSubscriber");
|
|
|
|
|
- param.setResult(getVar("iccid", lpparam.packageName));
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- XposedHelpers.findAndHookMethod(PhoneSubInfoController, "getSubscriberIdForSubscriber", int.class, String.class, String.class, new XC_MethodHook() {
|
|
|
|
|
- @Override
|
|
|
|
|
- protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
|
|
|
|
|
- log("spoof PhoneSubInfoController.getSubscriberIdForSubscriber");
|
|
|
|
|
- param.setResult(getVar("imsi", lpparam.packageName));
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ XposedHelpers.callStaticMethod(SystemProperties, "set", "gsm.sim.operator.iso-country", getVar("country", lpparam.packageName));
|
|
|
|
|
+ XposedHelpers.callStaticMethod(SystemProperties, "set", "gsm.sim.operator.numeric", getVar("mcc", lpparam.packageName) + getVar("mnc", lpparam.packageName));
|
|
|
|
|
+ XposedHelpers.callStaticMethod(SystemProperties, "set", "gsm.operator.numeric", getVar("mcc", lpparam.packageName) + getVar("mnc", lpparam.packageName));
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ Class<?> PhoneSubInfoController = XposedHelpers.findClass("com.android.internal.telephony.PhoneSubInfoController", lpparam.classLoader);
|
|
|
|
|
+ XposedHelpers.findAndHookMethod(PhoneSubInfoController, "getIccSerialNumberForSubscriber", int.class, String.class, String.class, new XC_MethodHook() {
|
|
|
|
|
+ @Override
|
|
|
|
|
+ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
|
|
|
|
|
+ log("spoof PhoneSubInfoController.getIccSerialNumberForSubscriber");
|
|
|
|
|
+ param.setResult(getVar("iccid", lpparam.packageName));
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ XposedHelpers.findAndHookMethod(PhoneSubInfoController, "getSubscriberIdForSubscriber", int.class, String.class, String.class, new XC_MethodHook() {
|
|
|
|
|
+ @Override
|
|
|
|
|
+ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
|
|
|
|
|
+ log("spoof PhoneSubInfoController.getSubscriberIdForSubscriber");
|
|
|
|
|
+ param.setResult(getVar("imsi", lpparam.packageName));
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
|
|
|
|
|
|
|
|
- XposedHelpers.findAndHookMethod(SystemProperties, "get", String.class, new XC_MethodHook() {
|
|
|
|
|
- @Override
|
|
|
|
|
- protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
|
|
|
|
|
- String key = (String) param.args[0];
|
|
|
|
|
- if ("gsm.sim.operator.iso-country".equals(key)) {
|
|
|
|
|
- log("spoof SystemProperties.get(" + key + ")");
|
|
|
|
|
|
|
+ XposedHelpers.findAndHookMethod(SystemProperties, "get", String.class, new XC_MethodHook() {
|
|
|
|
|
+ @Override
|
|
|
|
|
+ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
|
|
|
|
|
+ String key = (String) param.args[0];
|
|
|
|
|
+ if ("gsm.sim.operator.iso-country".equals(key)) {
|
|
|
|
|
+ log("spoof SystemProperties.get(" + key + ")");
|
|
|
|
|
+ param.setResult(getVar("country", lpparam.packageName));
|
|
|
|
|
+ } else if ("gsm.sim.operator.numeric".equals(key)) {
|
|
|
|
|
+ log("spoof SystemProperties.get(" + key + ")");
|
|
|
|
|
+ param.setResult(getVar("mcc", lpparam.packageName) + getVar("mnc", lpparam.packageName));
|
|
|
|
|
+ } else if ("gsm.operator.numeric".equals(key)) {
|
|
|
|
|
+ log("spoof SystemProperties.get(" + key + ")");
|
|
|
|
|
+ param.setResult(getVar("mcc", lpparam.packageName) + getVar("mnc", lpparam.packageName));
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ } else {
|
|
|
|
|
+ Class<?> PhoneInterfaceManager = XposedHelpers.findClass("com.android.phone.PhoneInterfaceManager", lpparam.classLoader);
|
|
|
|
|
+ XposedHelpers.findAndHookMethod(PhoneInterfaceManager, "getLine1NumberForDisplay", int.class, String.class, String.class, new XC_MethodHook() {
|
|
|
|
|
+ @Override
|
|
|
|
|
+ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
|
|
|
|
|
+ log("spoof PhoneInterfaceManager.getLine1NumberForDisplay");
|
|
|
|
|
+ param.setResult(getVar("number", lpparam.packageName));
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ XposedHelpers.findAndHookMethod(PhoneInterfaceManager, "getNetworkCountryIsoForPhone", int.class, new XC_MethodHook() {
|
|
|
|
|
+ @Override
|
|
|
|
|
+ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
|
|
|
|
|
+ log("spoof PhoneInterfaceManager.getNetworkCountryIsoForPhone");
|
|
|
param.setResult(getVar("country", lpparam.packageName));
|
|
param.setResult(getVar("country", lpparam.packageName));
|
|
|
- } else if ("gsm.sim.operator.numeric".equals(key)) {
|
|
|
|
|
- log("spoof SystemProperties.get(" + key + ")");
|
|
|
|
|
- param.setResult(getVar("mcc", lpparam.packageName) + getVar("mnc", lpparam.packageName));
|
|
|
|
|
- } else if ("gsm.operator.numeric".equals(key)) {
|
|
|
|
|
- log("spoof SystemProperties.get(" + key + ")");
|
|
|
|
|
- param.setResult(getVar("mcc", lpparam.packageName) + getVar("mnc", lpparam.packageName));
|
|
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ });
|
|
|
|
|
+ XposedHelpers.findAndHookMethod(PhoneInterfaceManager, "getImeiForSlot", int.class, String.class, String.class, new XC_MethodHook() {
|
|
|
|
|
+ @Override
|
|
|
|
|
+ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
|
|
|
|
|
+ log("spoof PhoneInterfaceManager.getImeiForSlot");
|
|
|
|
|
+ param.setResult(getVar("imei", lpparam.packageName));
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ Class<?> SubscriptionController = XposedHelpers.findClass("com.android.internal.telephony.SubscriptionController", lpparam.classLoader);
|
|
|
|
|
+ XposedHelpers.findAndHookMethod(SubscriptionController, "getPhoneNumberFromFirstAvailableSource", int.class, String.class, String.class, new XC_MethodHook() {
|
|
|
|
|
+ @Override
|
|
|
|
|
+ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
|
|
|
|
|
+ log("spoof SubscriptionController.getPhoneNumberFromFirstAvailableSource");
|
|
|
|
|
+ param.setResult(getVar("number", lpparam.packageName));
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ Class<?> SystemProperties = XposedHelpers.findClass("android.os.SystemProperties", lpparam.classLoader);
|
|
|
|
|
+ XposedHelpers.findAndHookMethod(SubscriptionController, "getActiveSubscriptionInfoList", String.class, new XC_MethodHook() {
|
|
|
|
|
+ @Override
|
|
|
|
|
+ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
|
|
|
|
|
+ log("spoof SubscriptionController.getActiveSubscriptionInfoList");
|
|
|
|
|
+ List<SubscriptionInfo> list = (List<SubscriptionInfo>) param.getResult();
|
|
|
|
|
+ for (SubscriptionInfo info : list) {
|
|
|
|
|
+ XposedHelpers.setObjectField(info, "mMcc", getVar("mcc", lpparam.packageName));
|
|
|
|
|
+ XposedHelpers.setObjectField(info, "mMnc", getVar("mnc", lpparam.packageName));
|
|
|
|
|
+ XposedHelpers.setObjectField(info, "mCountryIso", getVar("country", lpparam.packageName));
|
|
|
|
|
+ XposedHelpers.setObjectField(info, "mIccId", getVar("iccid", lpparam.packageName));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ XposedHelpers.callStaticMethod(SystemProperties, "set", "gsm.sim.operator.iso-country", getVar("country", lpparam.packageName));
|
|
|
|
|
+ XposedHelpers.callStaticMethod(SystemProperties, "set", "gsm.sim.operator.numeric", getVar("mcc", lpparam.packageName) + getVar("mnc", lpparam.packageName));
|
|
|
|
|
+ XposedHelpers.callStaticMethod(SystemProperties, "set", "gsm.operator.numeric", getVar("mcc", lpparam.packageName) + getVar("mnc", lpparam.packageName));
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ XposedHelpers.findAndHookMethod(SubscriptionController, "getActiveSubscriptionInfoList", String.class, String.class, new XC_MethodHook() {
|
|
|
|
|
+ @Override
|
|
|
|
|
+ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
|
|
|
|
|
+ log("spoof SubscriptionController.getActiveSubscriptionInfoList");
|
|
|
|
|
+ List<SubscriptionInfo> list = (List<SubscriptionInfo>) param.getResult();
|
|
|
|
|
+ for (SubscriptionInfo info : list) {
|
|
|
|
|
+ XposedHelpers.setObjectField(info, "mMcc", getVar("mcc", lpparam.packageName));
|
|
|
|
|
+ XposedHelpers.setObjectField(info, "mMnc", getVar("mnc", lpparam.packageName));
|
|
|
|
|
+ XposedHelpers.setObjectField(info, "mCountryIso", getVar("country", lpparam.packageName));
|
|
|
|
|
+ XposedHelpers.setObjectField(info, "mIccId", getVar("iccid", lpparam.packageName));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ XposedHelpers.callStaticMethod(SystemProperties, "set", "gsm.sim.operator.iso-country", getVar("country", lpparam.packageName));
|
|
|
|
|
+ XposedHelpers.callStaticMethod(SystemProperties, "set", "gsm.sim.operator.numeric", getVar("mcc", lpparam.packageName) + getVar("mnc", lpparam.packageName));
|
|
|
|
|
+ XposedHelpers.callStaticMethod(SystemProperties, "set", "gsm.operator.numeric", getVar("mcc", lpparam.packageName) + getVar("mnc", lpparam.packageName));
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ XposedHelpers.findAndHookMethod(SubscriptionController, "getSimStateForSlotIndex", int.class, new XC_MethodHook() {
|
|
|
|
|
+ @Override
|
|
|
|
|
+ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
|
|
|
|
|
+ log("spoof SubscriptionController.getSimStateForSlotIndex");
|
|
|
|
|
+ param.setResult(5);
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ Class<?> PhoneSubInfoController = XposedHelpers.findClass("com.android.internal.telephony.PhoneSubInfoController", lpparam.classLoader);
|
|
|
|
|
+ XposedHelpers.findAndHookMethod(PhoneSubInfoController, "getIccSerialNumberForSubscriber", int.class, String.class, String.class, new XC_MethodHook() {
|
|
|
|
|
+ @Override
|
|
|
|
|
+ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
|
|
|
|
|
+ log("spoof PhoneSubInfoController.getIccSerialNumberForSubscriber");
|
|
|
|
|
+ param.setResult(getVar("iccid", lpparam.packageName));
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ XposedHelpers.findAndHookMethod(PhoneSubInfoController, "getSubscriberIdForSubscriber", int.class, String.class, String.class, new XC_MethodHook() {
|
|
|
|
|
+ @Override
|
|
|
|
|
+ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
|
|
|
|
|
+ log("spoof PhoneSubInfoController.getSubscriberIdForSubscriber");
|
|
|
|
|
+ param.setResult(getVar("imsi", lpparam.packageName));
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ XposedHelpers.findAndHookMethod(SystemProperties, "get", String.class, new XC_MethodHook() {
|
|
|
|
|
+ @Override
|
|
|
|
|
+ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
|
|
|
|
|
+ String key = (String) param.args[0];
|
|
|
|
|
+ if ("gsm.sim.operator.iso-country".equals(key)) {
|
|
|
|
|
+ log("spoof SystemProperties.get(" + key + ")");
|
|
|
|
|
+ param.setResult(getVar("country", lpparam.packageName));
|
|
|
|
|
+ } else if ("gsm.sim.operator.numeric".equals(key)) {
|
|
|
|
|
+ log("spoof SystemProperties.get(" + key + ")");
|
|
|
|
|
+ param.setResult(getVar("mcc", lpparam.packageName) + getVar("mnc", lpparam.packageName));
|
|
|
|
|
+ } else if ("gsm.operator.numeric".equals(key)) {
|
|
|
|
|
+ log("spoof SystemProperties.get(" + key + ")");
|
|
|
|
|
+ param.setResult(getVar("mcc", lpparam.packageName) + getVar("mnc", lpparam.packageName));
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
|
}
|
|
}
|