可以通过编程更改SIM卡所在国家吗?

5

如何在没有 root 访问权限的情况下编程更改 Android 手机 SIM 卡的国家和网络?我正在使用以下代码检索信息:

TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

System.out.println(tm.getSimCountryIso()); // prints 'us', but I want it to be 'fr'
System.out.println(tm.getNetworkCountryIso()); // prints 'us, but I want it to be 'fr'

因为我的 SIM 卡来自美国,所以两个输出都是 us。我该如何通过编程使输出变为例如 fr(法国)?

基本上,我想欺骗我的智能手机,让它认为它的 SIM 卡所属的国家和网络是法国,例如。

像这样的东西就很完美,但它并不存在:

tm.setSimCountryIso('fr')

tm.setNetworkCountryIso('fr')


4
System.out.println("fr")?如果您想永久更改SIM卡的国家,那显然是不可能的。这与IT有关。 - Guy Incognito
2
第一步:解密SIM卡。https://security.stackexchange.com/questions/105013/security-of-data-stored-on-sim-cards - Elliott Frisch
@GuyIncognito 我想要tm.getSimCountryIso()成为我选择的任意一个国家。 - Panjeet
3
那显然是不可能的。 - Guy Incognito
@ElliottFrisch,能否给出一个完整的答案?我添加了350美元的悬赏。 - Panjeet
显示剩余3条评论
1个回答

10
你所要求的功能需要root权限才能实现。
如评论中所述,除非是特殊可写的SIM卡,否则无法更改SIM卡的ICCID
至于调用getSimCountryIsogetNetworkCountryIso()这两个系统API,没有root权限就无法干涉它们的操作。
Android内置了多层安全机制,包括基于用户权限的应用程序访问限制、默认启用SELinux、作为验证启动的一部分的完整性检查等。
如果您的设备已经root,可以创建一个Xposed框架模块来挂钩这些函数并覆盖其返回值。
如果您好奇,将ICCID信息转换为两个字母的国家名称的表在此处硬编码。如果该链接打不开,它从第316行开始。
因此,更改这将需要重新编译操作系统的核心JAR之一。
还要注意,根据您的真实目的,修改这两个函数的结果可能根本不起作用。
例如,如果您想从手机为不同的国家创建Google帐户,更改SIM卡也无济于事,因为无论您如何连接到互联网,Google仍会查看您的IP地址。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接