情况
giffgaff 官方 App 支持将实体卡转换为 eSIM,但默认流程是直接在当前设备上配置,并不会直接提供二维码。如果我们想拿到标准的 eSIM 二维码,就需要做一点额外的工作。
准备条件如下:
- 一台支持 eSIM 的手机,并安装了 giffgaff 官方 App。
- 抓包软件。iOS 环境下我使用的是 Stream。
- 一张已经激活了的 giffgaff 实体卡,插在另一台手机里,专门用来接收转换过程中的短信验证码。
分析与过程
首先需要配置抓包环境。安装 Stream 后,必须安装证书并信任证书,这样才可以正常解析 HTTPS 流量。建议先抓一些日常流量试试,看看能不能正常解析 HTTPS,确认一切正常后再正式开启抓包。
环境就绪后,打开 giffgaff 官方 App 启动实体卡转 eSIM 的流程。按提示一步步操作,一直到最后一步在「Install eSIM」界面停住。注意,这里千万不要真的点击 Install。
此时目的已经达到,直接关闭 giffgaff App,回到 Stream 软件,停止抓包即可。
解决
在 Stream 的抓包历史中,我们可以通过域名过滤,只看 publicapi.giffgaff.com 的请求。找到响应主体(Response Body)中包含 eSimDownloadToken 的那一条记录。
点击右上角分享图标,把结果导出来。最终获取到的 JSON 结果类似这样:
[
{
"data" : {
"eSimDownloadToken" : {
"lpaString" : "LPA:1$cel.prod.ondemandconnectivity.com$***",
"id" : "downloadToken",
"__typename" : "ESimDownloadToken",
"host" : "cel.prod.ondemandconnectivity.com",
"matchingId" : "***"
}
}
}
]
在这段数据中,lpaString 对应的那一串以 LPA:1$ 开头的值就是我们想要的核心内容。
最后,随便找个字符串转二维码的工具,把这串值转换成二维码就可以了。这样就顺利绕过了 App 的限制,拿到了标准的 eSIM 二维码。