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-4
与 T=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 安全元素访问规则)丢失,可能需要
如果这没有帮助,这里是进一步研究的来源链接:
不幸的是,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 上。如果这不可用,请搜索替代品,或者您可能有可以将某些东西焊接在一起的工程师。
我发布这个问题是因为找不到合适的地方提问。
我正在使用智能卡开发自定义安全元件。
我成功连接了 SEService
并使用 seservice.getReaders()
获得了一个 Reader
实例。
但是,当我调用 reader.isSecureElementPresent()
时,它 returns false
。
当我尝试使用普通 SIM 卡时,我可以找到安全元件,当我打电话给 reader.isSecureElementPresent()
.
true
所以我推断 phone 无法识别我的自定义 SIM 卡 native smartcard
。实际上,我的原生智能卡可以与普通卡 reader 正常工作,并且该卡支持 ISO/IEC 7816-4
与 T=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 安全元素访问规则)丢失,可能需要
如果这没有帮助,这里是进一步研究的来源链接:
不幸的是,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 上。如果这不可用,请搜索替代品,或者您可能有可以将某些东西焊接在一起的工程师。