如何自己实现 esim.me APP (思路)

2023-07-08 16:15:27 +08:00
 Roope

前言

前两天我发一篇帖子 较低价格的 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 阉割

2266 次点击
所在节点    分享发现
3 条回复
xiaobinim
2023-07-09 15:25:29 +08:00
支持研究
Roope
2023-07-09 17:02:18 +08:00
@xiaobinim 不研究了 等一个有缘的 Android 老哥实现来源吧。
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 才行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/955118

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX