V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Roope
V2EX  ›  分享发现

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

  •  1
     
  •   Roope · 2023-07-08 16:15:27 +08:00 · 2496 次点击
    这是一个创建于 533 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前言

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

    3 条回复    2023-07-16 16:08:48 +08:00
    xiaobinim
        1
    xiaobinim  
       2023-07-09 15:25:29 +08:00
    支持研究
    Roope
        2
    Roope  
    OP
       2023-07-09 17:02:18 +08:00 via iPhone
    @xiaobinim 不研究了 等一个有缘的 Android 老哥实现来源吧。
    ssz66666
        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 才行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5001 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 01:21 · PVG 09:21 · LAX 17:21 · JFK 20:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.