【问题标题】:Emulate Mifare card with Android 4.4使用 Android 4.4 模拟 Mifare 卡
【发布时间】:2013-12-02 01:24:03
【问题描述】:

我研究过 Mifare 和其他卡仿真我在编程方面非常了解(不是 Android,而是 C/C++)。我有 proxmark,并且我为 proxmark 制作了多个仿真代码,所以我知道卡片是如何通信的。

我目前不明白,android 是否启用全卡模拟。 我已经研究了大约 3 天,得出的结论是没有一个固定的模式。有人说可能,有人说不可能。我查看了 android API 并且基于主机的卡模拟似乎能够做到这一点,但据我所知,这是 4.4 Kitkat 中的新事物,有没有人有这方面的经验?

为了简单起见,目前我正在研究 Mifare Ultralight 的基本最简单的仿真。这张卡是一场安全噩梦,没有加密,只有大约 10 个功能。所以我有兴趣用这张卡开始研究,因为它是最容易复制的。

那么有没有人有任何关于 android 卡模拟的知识。也许不使用股票操作系统。任何值得知道的事情都会非常感激。

谢谢。

【问题讨论】:

  • 我认为目前很难找到人,目前尚未为所有 nexus 设备推出 Android 4.4 更新。
  • 好的,如果我问的是理论上基于主机的卡模拟应该可以解决问题,对我来说似乎应该这样做,但我没有使用 android 的经验。我想知道的是可以模拟一个 UID 和内容吗?
  • 我也很难理解 nfc 在 Android 内部是如何工作的,尤其是替代 NDEF 记录。但是你读过the documentation吗?
  • 是的,我读到了,但我很伤心,我在 android 方面的经验很少。所以我可以将其视为理论。该文档指出,应假定 UID 是随机的。但是对于 Mifare UL 页面 0-3 存储 UID,那么 UID 是随机的,仅用于防冲突,还是页面 0-3 也是静态的?因为读取器通常不会从防冲突中提取 UID,而是直接读取,

标签: android nfc rfid mifare hce


【解决方案1】:

使用 Android 4.4 中基于主机的卡模拟 (HCE),您只能模拟 ISO/IEC 14443-4 协议。更具体地说,您只能根据 ISO/IEC 7816-4 模拟应用程序结构(因此需要通过 AID 选择卡模拟应用程序)。此外,API 并没有为您提供任何方法来指定卡模拟应该使用 A 类协议还是 B 类协议。

所以关于各种 MIFARE 协议的仿真:

  • MIFARE Ultralight(及其衍生)协议在 ISO/IEC 14443-3 之上运行。使用 Android HCE 无法模拟使用此类低层协议的卡。
  • MIFARE Classic 协议部分在 ISO/IEC 14443-3 之上运行(具有一些不同的框架)。因此,也无法使用 Android HCE 模拟 MIFARE Classic。
  • MIFARE DESFire 协议在 ISO/IEC 14443-4 之上运行。 DESFire 协议有三种变体:

    1. 本机协议:由于此协议不使用符合 ISO/IEC 7816-4 的 APDU,因此无法使用 Android HCE 模拟它。
    2. 封装的本地协议:此协议使用符合 ISO/IEC 7816-4 的 APDU,但是,当开始以封装的本地命令模式与卡通信时,读取器通常不会使用 DESFire AID 发出 SELECT 命令. (注意:较新的读卡器实施更有可能发出与 Android HCE 兼容的 SELECT 命令,因为这也是恩智浦一些具有 DESFire 协议仿真的较新智能卡产品所必需的。)
    3. ISO 协议:此协议基于 ISO/IEC 7816-4,使用 AID 选择应用程序。因此,可以使用 Android HCE 模拟此协议。

    某些阅读器可能需要较低协议层中的某些参数值(例如特定的 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 中可用的 HCE 功能的说明从 9.1 版到 10.2 版:这将模拟任何基于 ISO/IEC 14443-4 的协议,而不需要根据 ISO/IEC 的应用程序结构7816-4。您甚至可以选择是否要模拟 Type A 或 Type B 协议。所以应该有可能(尽管我没有测试过)模拟三个 DESFire 协议中的任何一个。但是,即使使用 CyanogenMod 的 HCE 功能,也无法模拟 MIFARE Ultralight 或 Classic 协议。此外,它也不可能影响 UID、ATQA、SAK 或 ATS 等低级协议参数。

【讨论】:

  • 您知道是否也支持 MIFARE DESFire EV1 或 DESFIRE SAM?
  • 关于 DESFire 的答案也适用于 DESFire EV1。我没有关于 DESFire SAM 的信息,但在我看来模拟 SAM 没有多大意义,因为使用 SAM 的全部意义在于专用硬件模块的安全性。
  • 您能否发布有关 CyanogenMod 中 HCE 功能的来源?
  • 嗨,好答案!那么我们可以使用 Android 代码中的默认/标准 HCE 在智能手机上模拟 Mifare Ultralight 卡吗?
  • @MarcoSanfilippo 你读过答案了吗?特别是这两句话:“MIFARE Ultralight(及其衍生)协议在 ISO/IEC 14443-3 之上运行。无法使用 Android HCE 使用这种低层协议来模拟卡。”跨度>
【解决方案2】:

一年前我花了数周时间研究这个主题,我根据当前的实现得出的结论是: MIFARE Classic 的仿真是可能的,但只能通过嵌入式安全元件,该元件嵌入恩智浦的 NFC 芯片(内置的 PN65 芯片,例如三星 I9300)。

我已经能够使用 android_external_libnfc-nxp 库中的隐藏函数完全模拟 Mifare Classic 卡。虽然我只能读取卡并且为了它有用,您需要访问安全元件,在大多数情况下,NXP 的小程序存在,这个小程序服务器作为管理模拟卡的前端。

继续此搜索的一个好方法是对 Google 的钱包应用程序进行逆向工程。

【讨论】:

【解决方案3】:

简短的回答是。不过要看安卓版本、手机NFC芯片等很多因素。

要知道您的设备是否支持它,只需下载一些应用程序,例如 Tapkey 的“NFC Check”,它会通知您是否支持 MiFare Classic 和 Mifare Ultralight。还有一个最新列表,但显然可能存在一些不匹配:https://www.shopnfc.com/en/content/7-nfc-compatibility

现在的问题是“如何”。我还没有找到一个应用程序使用新的 Android 的基于主机的卡模拟 (HCE) 来实现这个目的(见这里):How well does the Android NFC API support Mifare Desfire?

事实上,MiFare 最近建议您应该使用“安全元素”方法:https://www.mifare.net/support/forum/topic/emulate-mifare-classic-1k/

回到您关于 Ultralight 的问题,主要困难在于 Android API 定义了迄今为止在每次点击时发送随机 UID,正如以前的用户 nCypher 所建议的那样:https://developer.android.com/guide/topics/connectivity/nfc/hce

作为替代根访问(或自定义 cyanogen ROM)可能有助于修改 UID,例如在此示例中: http://osgt7405i.bkt.clouddn.com/help/en/index.html?t=1536931682474

但最新的 Android API 直接引用 Ultralight 对象:https://developer.android.com/reference/android/nfc/tech/MifareUltralight

我知道一些公司正在通过 SIM 存储来模仿这一点。为了将您的手机用作这些 MIFARE 类型的 RFID 卡,MiFare 已经制定了一种解决方案,企业可以在云中加载与运营商 SIM 关联的卡https://www.mifare4mobile.org/。有一份官方认证的 NFC 芯片列表,其中大部分 NPX 广泛包含在智能手机中。

但是他们的解决方案是 SDK API(即 TapLinx)。恩智浦没有像任何电话仿真软件或基于云的解决方案那样提供的纯软件产品。

更重要的是,MiFare 论坛谈到了这一点: https://www.mifare.net/support/forum/topic/creating-nfc-android-app-to-act-as-mifare-card-to-interact-with-mifare-readers/

【讨论】:

    【解决方案4】:

    MIFARE Ultralight 芯片 MF0ICU1(16 页 x 每个 4 字节)确实是一场噩梦,但无法在包括 PN53x 在内的任何 NXP 接口上进行仿真,因为它们将第一个 UID 字节 (UID0) 硬连线到 0x08 ,所以这意味着标签有一个随机的UID(根据NXP标准)。您需要 UID0 = 0x04 来模拟 MIFARE Ultralight。

    存在一个standalone MIFARE Ultralight emulator,它允许UID0 的任何值,具有可重置的OTP、锁定和块锁定位。有关详细信息,请参阅手册。

    【讨论】:

      猜你喜欢
      • 2013-07-09
      • 1970-01-01
      • 2022-01-08
      • 2021-10-12
      • 1970-01-01
      • 2014-06-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多