Android 手机无法使用“android.se.omapi.Reader.isSecureElementPresent()”找到自定义 SIM 卡

Posted

技术标签:

【中文标题】Android 手机无法使用“android.se.omapi.Reader.isSecureElementPresent()”找到自定义 SIM 卡【英文标题】:Android phone can not find a custom SIM card using "android.se.omapi.Reader.isSecureElementPresent()" 【发布时间】:2020-06-25 01:55:01 【问题描述】:

我发布这个问题是因为我找不到合适的地方来提问。

我正在使用智能卡开发自定义安全元素。

我成功连接了SEService,并使用seservice.getReaders() 获得了Reader 实例。

但是,当我调用reader.isSecureElementPresent() 时,它返回false

当我尝试使用普通 SIM 卡时,我可以找到安全元素,当我调用 reader.isSecureElementPresent() 时它返回 true

所以我推断手机无法识别我的自定义 SIM 卡,即native smartcard。实际上,我的原生智能卡可以在普通读卡器上正常工作,并且该卡支持ISO/IEC 7816-4 接口和T=0 protocol

当我尝试使用Java Card 时,手机能够找到卡,并成功获取 ATR。

因此,手机无法识别native smartcard,而是识别javacard

对于在 android 上通过isSecureElementPresent() 方法找到安全元素是否有特定要求?

我浏览了Open Mobile API 3.3,但没有足够的关于isSecureElementPresent()方法的解释。

我认为手机找不到我的原生智能卡可能是因为它没有实现GlobalPlatform Card Specification,因为Open Mobile API 3.3 是由GlobalPlatform 组织创建的。实际上,Java Card 支持GlobalPlatform Card Specification。这就是我为什么这么认为的原因。

【问题讨论】:

【参考方案1】:

这是一个有趣的问题,虽然我没有答案,但我可以指出一种方法来获取我已经使用过的一些信息。

2 次猜测:

您的 SE 没有 SIM 卡文件系统,无法识别为 UICC 缺少运营商特权小程序(GP 安全元素访问规则),可能需要它

如果这没有帮助,这里是进一步研究的来源的链接:

http://aosp.opersys.com/xref/android-10.0.0_r39/xref/frameworks/base/core/java/android/se/omapi/Reader.java

http://aosp.opersys.com/xref/android-10.0.0_r39/xref/frameworks/base/core/java/android/se/omapi/ISecureElementReader.aidl

不幸的是,AIDL 是内部的。在这种情况下,我所做的是使用Magisk,然后使用edXposed 框架。后者允许拦截系统调用,例如用于记录目的。我写了一个sample project 来取消屏蔽无线电日志的响应 APDU。这可以用于此建议和下一个建议。

在较低级别,查看交换的 APDU 也应该很有帮助。这应该可以通过使用logcat -b radio *:V查看无线电日志来实现

最后,SIM 卡追踪器也非常有用,可以查看手机如何与您的 SE 交互,例如请参阅 APDU。如果某些命令返回错误,则表明您已经找到了一个候选人。这应该让您可以完全控制比较接受的 UICC 和您的解决方案。

我已经成功使用了以前版本的SIMTrace,但在旧手机上。如果这不可用,请寻找替代品,或者您有一位可以将某些东西焊接在一起的工程师。

【讨论】:

感谢您的回答。我不知道 edXposed 有 SIM 卡追踪器!我会尝试这种方法来读取 SE 和 Phone 之间的 APDU。 edXposed 不是 SIM 卡追踪器。它是一个系统调用拦截器。后面的部分将讨论示踪剂。 啊我弄错了。所以 SIMTrace 是一个硬件设备,我可以用它物理地敲击 APDU。那么有没有办法使用edXposed拦截APDU? 它可能也适用于 edXPosed。我在答案中添加了一个链接。

以上是关于Android 手机无法使用“android.se.omapi.Reader.isSecureElementPresent()”找到自定义 SIM 卡的主要内容,如果未能解决你的问题,请参考以下文章

解决按键精灵助手无法连接Android手机的问题

appcan平台中使用百度地图,在android手机上百度地图无法手势缩放

无法使用 Qt for Android 使手机播放声音或振动

无法在 Android 手机上获取位置

Fancybox:无法在 Android 手机上滚动

无法在 Android 手机中使用 cv2.VideoCapture(0) 打开相机