以编程方式更改 SIM 卡国家?

Pan*_*eet 5 java android

如何在没有 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'
Run Code Online (Sandbox Code Playgroud)

由于我的 SIM 卡来自美国,因此两个输出均为us. 例如,如何以编程方式使输出为fr(法国)?

基本上,例如,我想欺骗我的智能手机,使其认为其 SIM 卡的国家和网络是法国

像这样的东西将是完美的,但它不存在:

tm.setSimCountryIso('fr')

tm.setNetworkCountryIso('fr')

Lev*_* M. 10

没有root,您所要求的内容是不可能的。

正如评论中已经指出的,除非它是一个特殊的可写 SIM,否则在物理上不可能更改SIM的ICCID

至于调用getSimCountryIsogetNetworkCountryIso()那些是系统 API。没有root,就没有办法干扰他们的操作。

Android 构建有多层安全性,包括基于用户权限限制应用程序访问、默认情况下强制启用SELinux、作为验证启动的一部分的真实性检查等等。

如果你在设备上有 root,你可以创建一个Xposed 框架模块,它可以挂钩这些函数并覆盖它们的返回值。

如果您好奇,用于将 ICCID 信息转换为两个字母的国家/地区名称的表格在此处进行了硬编码。如果该链接没有正确打开 - 它从第 316 行开始。

所以改变它需要重新编译操作系统的核心 JAR 之一。

另请注意,根据您的真实目的,更改这两个函数的结果可能根本不起作用。

例如,如果您想通过手机为其他国家/地区创建 Google 帐户,更改 SIM 卡将无济于事,因为无论您如何连接到互联网,Google 仍会查看您的 IP 地址。