我研究过 Mifare 和其他卡模拟我在编程方面非常了解(不是 Android,而是 C/C++)。我有 proxmark,我已经为 proxmark 制作了多个仿真代码,所以我知道卡是如何通信的。
我目前不明白,android是否启用了全卡模拟。 我已经对此进行了大约 3 天的研究,结论是没有一个不变的模式。有人说可以,有人说不可能。我查看了 android API,基于主机的卡模拟似乎可以解决问题,但据我所知,这是 4.4 Kitkat 中的新事物,有人对此有任何经验吗?
为简单起见,目前我正在研究 Mifare Ultralight 的最基本最简单的仿真。这张卡是一个安全噩梦,没有加密,只有大约 10 个功能。所以我有兴趣从这张卡开始研究,因为它是最容易复制的。
那么有没有人对android上的卡模拟有任何了解。也许不使用股票操作系统。任何值得了解的事情都将不胜感激。
谢谢。
最佳答案
使用 Android 4.4 中基于主机的卡模拟 (HCE),您只能模拟 ISO/IEC 14443-4 协议(protocol)。更具体地说,您只能根据 ISO/IEC 7816-4 模拟应用程序结构(因此需要通过 AID 选择卡模拟应用程序)。此外,API 不提供任何方法来指定卡模拟是应该使用 A 类协议(protocol)还是 B 类协议(protocol)来完成。
关于模拟各种 MIFARE 协议(protocol):
- MIFARE Ultralight(及其衍生)协议(protocol)在 ISO/IEC 14443-3 之上运行。无法使用 Android HCE 模拟使用此类低层协议(protocol)的卡片。
- MIFARE Classic 协议(protocol)部分在 ISO/IEC 14443-3 之上运行(具有一些不同的框架)。因此,也无法使用 Android HCE 模拟 MIFARE Classic。
MIFARE DESFire 协议(protocol)在 ISO/IEC 14443-4 之上运行。 DESFire 协议(protocol)具有三种变体:
- native 协议(protocol):由于此协议(protocol)不使用符合 ISO/IEC 7816-4 的 APDU,因此无法使用 Android HCE 模拟它。
- wrapped native protocol:此协议(protocol)根据 ISO/IEC 7816-4 使用 APDU,但是,当开始与 wrapped 卡通信时,读者通常不会使用 DESFire AID 发出 SELECT 命令 native 命令模式。 (注意:较新的读卡器实现更有可能发出与 Android HCE 兼容的 SELECT 命令,因为恩智浦的某些具有 DESFire 协议(protocol)仿真的较新智能卡产品也需要这样做。)
- ISO 协议(protocol):该协议(protocol)基于 ISO/IEC 7816-4,并使用 AID 进行应用程序选择。因此,可以使用 Android HCE 模拟此协议(protocol)。
一些读者可能需要较低协议(protocol)层的某些参数值(例如特定的 UID 级联级别、特定的 ATQA 值、特定的 SAK 值或特定的 ATS)。 Android HCE 没有任何方法来设置这些值。参见 Editing Functionality of Host Card Emulation in Android一种可能的方法来修改某些根设备上的这些值和 my answer to Host-based Card Emulation with Fixed Card ID以编程方式更改自定义 ROM 中的这些值的策略。
关于 CyanogenMod 从 9.1 版到 10.2 版的 HCE 功能的说明:这将模拟任何基于 ISO/IEC 14443-4 的协议(protocol),而不需要根据 ISO/IEC 的应用程序结构7816-4。您甚至可以选择是否要模拟 A 类或 B 类协议(protocol)。所以应该可以(虽然我还没有测试过)模拟三种 DESFire 协议(protocol)中的任何一种。然而,即使使用 CyanogenMod 的 HCE 功能,也无法模拟 MIFARE Ultralight 或 Classic 协议(protocol)。此外,也不可能影响 UID、ATQA、SAK 或 ATS 等低级协议(protocol)参数。
关于android - 使用 Android 4.4 模拟 Mifare 卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40130645/