android - Android 手机无法使用“android.se.omapi.Reader.isSecureElementPresent()”找到自定义 SIM 卡
问题描述
我发布这个问题是因为我找不到合适的地方来问这个问题。
我正在使用智能卡开发自定义安全元素。
我成功SEService
连接并Reader
使用seservice.getReaders()
.
但是,当我打电话时reader.isSecureElementPresent()
,它会返回false
。
当我尝试使用普通 SIM 卡时,我可以找到安全元件,并true
在我调用时返回reader.isSecureElementPresent()
。
所以我推断手机无法识别我的自定义 SIM 卡native smartcard
。实际上,我的原生智能卡可以在普通读卡器上正常工作,并且该卡支持ISO/IEC 7816-4
与T=0 protocol
.
当我尝试使用 aJava Card
时,手机能够找到卡,并成功获取 ATR。
因此,手机无法识别native smartcard
但javacard
。
isSecureElementPresent()
在 Android 上通过方法找到安全元素是否有特定要求?
我查看了Open Mobile API 3.3,但对该方法没有足够的解释isSecureElementPresent()
。
我假设手机找不到我的原生智能卡,可能是因为GlobalPlatform Card Specification
Open Mobile API 3.3是由GlobalPlatform
组织创建的,所以它没有实现。实际上 Java Card 支持GlobalPlatform Card Specification
. 这就是为什么我这么认为的原因。
解决方案
这是一个有趣的问题,虽然我没有答案,但我可以指出一种方法来获取我已经使用过的一些信息。
2个猜测:
- 你的 SE 没有 SIM 卡文件系统,不被识别为 UICC
- 缺少运营商特权小程序(GP 安全元素访问规则),可能需要它
如果这没有帮助,这里是进一步研究的来源的链接:
不幸的是,AIDL 是内部的。在这种情况下,我所做的是使用Magisk,然后使用edXposed框架。后者允许拦截系统调用,例如用于记录目的。我编写了一个示例项目来揭露无线电日志的响应 APDU。这可用于此建议和下一个建议。
在较低级别上,查看交换的 APDU 也应该很有帮助。这应该可以通过查看无线电日志来实现logcat -b radio *:V
最后,SIM 卡跟踪器也非常有用,可以查看手机如何与您的 SE 交互,例如查看 APDU。如果某些命令返回错误,则表明您已经找到了一个候选人。这应该使您可以完全控制比较接受的 UICC 和您的解决方案。
我已经成功使用了以前版本的SIMTrace,但在旧手机上。如果这不可用,请寻找替代品,或者您有一位可以将某些东西焊接在一起的工程师。
推荐阅读
- rx-java2 - RxJava2 BehaviorSubject 上的多个侦听器结果不一致
- wordpress - 使用 htaccess 将 PDF 重定向到 php 文件—已删除但仍保留 W3 总缓存
- c++ - 将日期和时间字符串解析为数字以比较 C++
- testing - 测试整个气流 DAG 不是一项任务
- c++ - 不能在标题 B 中使用标题 A,但在标题 A 中使用标题 B 有效
- javascript - 在 Wordpress 后端保存 jQuery UI 可排序顺序
- android - 启动应用时自动播放音乐
- reactjs - 反应如何放一个
2 .map 之间? - sql - 需要在多个表上使用 join/subQuery 按数据分组
- azure - Azure DevOps accessing two Key Vaults with duplicate secret names