android - 使用 Android 4.4 模拟 Mifare 卡

标签 android nfc rfid mifare hce

我研究过 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)具有三种变体:

    1. native 协议(protocol):由于此协议(protocol)不使用符合 ISO/IEC 7816-4 的 APDU,因此无法使用 Android HCE 模拟它。
    2. wrapped native protocol:此协议(protocol)根据 ISO/IEC 7816-4 使用 APDU,但是,当开始与 wrapped 卡通信时,读者通常不会使用 DESFire AID 发出 SELECT 命令 native 命令模式。 (注意:较新的读卡器实现更有可能发出与 Android HCE 兼容的 SELECT 命令,因为恩智浦的某些具有 DESFire 协议(protocol)仿真的较新智能卡产品也需要这样做。)
    3. 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/

相关文章:

android - 为什么我使用 AsyncTask 时会出现 android.os.NetworkOnMainThreadException?

android - 创 build 备所有者 Android Lollipop 时校验和错误

python - 使用 Adafruit PN532 库写入 RFID 标签内存时字节数组被截断

带有 actionbaractivity 的 Android listactivity

android - 当我作为客户端连接时,为什么客户端列表为空?

Android Google SignIn 结果为空

ios - 是否可以从我的应用程序启动 Apple Pay NFC?

java - Android NFC 写入 NFCA 标签

php - 将ZKTECO TX268与Web App集成

rfid - 如何与 Wiegand RFID 读写器交互?