Android phone 找不到使用 "android.se.omapi.Reader.isSecureElementPresent()" 的自定义 SIM 卡

Android phone can not find a custom SIM card using "android.se.omapi.Reader.isSecureElementPresent()"

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

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

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

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

当我尝试使用普通 SIM 卡时,我可以找到安全元件,当我打电话给 reader.isSecureElementPresent().

时,它 returns true

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

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

因此,phone无法识别native smartcard,但javacard

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

我看了Open Mobile API 3.3,但是对isSecureElementPresent()方法的解释不够

而且我认为 phone 找不到我的本地智能卡可能是因为它没有实现 GlobalPlatform Card Specification 因为 Open Mobile API 3.3 是由 GlobalPlatform 组织创建的。实际上 Java 卡支持 GlobalPlatform Card Specification。这就是我支持的原因。

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

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 and then the edXposed framework. The latter allows to intercept system calls, e.g. for logging purposes. I have written a sample project 来取消屏蔽无线电日志的响应 APDU。这可以用于此建议和下一个建议。

在较低级别上,查看交换的 APDU 应该也会有所帮助。这应该可以通过使用 logcat -b radio *:V

查看无线电日志来实现

最后一个非常有用的是 SIM 卡跟踪器,用于查看 phone 如何与您的 SE 交互,例如查看 APDU。如果某些命令返回错误,则说明您击中了候选对象。这应该可以让您完全控制比较已接受的 UICC 和您的解决方案。

我成功地使用了 SIMTrace 的先前版本,但在较旧的 phone 上。如果这不可用,请搜索替代品,或者您可能有可以将某些东西焊接在一起的工程师。