前两天我发一篇帖子 较低价格的 eSIM.me 平替 中提到可以用 60/70 元的价格购买到 eSIM.me 低价平替。但是,平替版本并没有 App 支持,需要用 PC/SC 读卡器管理或用 OpenEUICC 来管理 eSIM Profiles 。
其中 PC/SC 需要额外的硬件支持,使用上也不方便。OpenEUICC 需要 root 后才能使用,而且部分国产手机阉割相关 API ,导致不能正常使用。那么有没有办法自己实现一份 esim.me 应用呢,下面我将会根据现有源码提供实现思路(为啥是思路,因为我不会写 Android )。
通过阅读 实现 eSIM 卡 我们可以知道 Android 提供了 EuiccManager
一系列 API 来实现管理 eSIM Profiles ,但是此 API 需要系统权限才能调用,也就是自行实现 LPA App 在没有 root 权限的情况下几乎不可能了,而且很多国产 OS 是阉割了相关 API 的。经过阅读 LPADesktop的源码和查阅相关资料我们可以得知,管理 eSIM Profiles 是通过往卡片发送 APDU
命令实现切换、下载逻辑。在 Android 9 以后的设备有一个 Open Mobile API 可以实现直接和 UICC(eUICC) 通讯、发送 APDU 命令来实现不通过 Android API 管理 eSIM Profiles.
得益于开源项目的发展,和 eUICC 通讯已经有现成的库可以用 LPAd_SM-DPPlus_Connector,在开发自己的 Android 应用时我们只需要自己 OMAPI Channel 自行实现 ApduChannelImpl
即可完成和 eUICC 通讯,后续自行实现管理界面即可。
解包了 eSIM.me 的 APP , 他们也是用的 OMAPI 实现,所以才无需 root 权限和 API 阉割
1
xiaobinim 2023-07-09 15:25:29 +08:00
支持研究
|
3
ssz66666 2023-07-16 16:08:48 +08:00
https://www.esper.io/blog/android-dessert-bites-24-esim-me-1248143
> OpenEUICC implements Android’s system APIs for eSIM management, namely EuiccManager and EuiccService, and it requests the privileged permissions needed to interface with eUICCs via the TelephonyManager API (android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS and android.permission.MODIFY_PHONE_STATE) or OMAPI (android.permission.SECURE_ELEMENT_PRIVILEGED_OPERATION) without needing to be allow listed in the ARF. 这个文章里说的挺明白的,OpenEUICC 需要是系统应用,是因为安卓有对 OMAPI 做访问权限控制,就跟 EuiccManager 一样。要不然随便一个 App ,用户手抖给了权限就能改你 eSIM profile ,岂不是有很大安全隐患~ eSIM.me 的 app 可以不需要 root 权限是基于[UICC Carrier Privilege]( https://source.android.com/docs/core/connect/uicc),也就是在 eSIM.me 卡的 ARA-M 里加上了自家 app 的签名(详见[文章]( https://cheerio-the-bear.hatenablog.com/entry/2022/03/04/172109)),让 Android 系统允许自家 app 访问 eSIM.me 的卡。 用这种方式实现得专门定制一批卡,在卡的 ARA-M/ARF 里加上 OpenEUICC 或者其他 LPA app 的签名证书 hash 才行 |