39

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

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

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

那么有人对android上的卡模拟有任何了解吗?也许不使用股票操作系统。任何值得知道的事情都会非常感激。

谢谢。

4

4 回答 4

58

在 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. Wrapped native 协议:该协议使用符合 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了解在某些根设备上修改这些值的可能方法,以及我对 Host-based Card Emulation with Fixed Card ID 的回答,了解以编程方式更改自定义 ROM 中这些值的策略。

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

于 2013-11-19T09:57:22.413 回答
21

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

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

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

于 2014-01-09T12:33:05.340 回答
6

简短的回答是YES。但是取决于很多因素,如安卓版本、手机的NFC芯片等。

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

现在的问题是“如何”。我还没有找到使用新的 Android 的基于主机的卡模拟 ( HCE ) 来实现此目的的应用程序(请参阅此处):Android NFC API 对 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

作为替代根访问(或自定义氰 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 已经制定了一种解决方案,企业可以在云中加载卡https://www.mifare4mobile.org/关联到他们的运营商 SIM 卡。有一份官方认证的 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读者/

于 2018-09-14T12:25:25.137 回答
4

MIFARE Ultralight 芯片 MF0ICU1(16 页 x 每个 4 字节)确实是一场噩梦,但无法在包括 PN53x 在内的任何 NXP 接口上进行仿真,因为它们将第一个UID字节(恩智浦标准)。您需要模拟 MIFARE Ultralight。UID00x08UIDUID0 = 0x04

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

于 2014-11-04T17:29:15.770 回答