使用Android 4.4模拟Mifare卡

use*_*174 33 android rfid nfc mifare hce

我研究过Mifare和其他卡片仿真,我对编程非常了解(不是Android,而是C/C++).我有proxmark,我已经为proxmark制作了多个仿真代码,所以我知道这些卡是如何通信的.

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

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

那么有没有人对android上的卡片仿真有任何了解.也许不使用股票操作系统.任何值得了解的事情都将非常感激.

谢谢.

Mic*_*and 53

使用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没有任何设置这些值的方法.请参阅在Android中编辑主机卡仿真的功能,以获取在某些有根设备上修改这些值的可能方法,以及我对具有固定卡ID的基于主机的卡仿真的回答,以便以编程方式更改自定义ROM中的这些值.

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

  • 你能在CyanogenMod上发布关于HCE功能的消息来源吗? (2认同)
  • @MarcoSanfilippo你读过答案吗?特别是这两句话:"*MIFARE Ultralight(和衍生物)协议在ISO/IEC 14443-3之上运行.使用Android HCE使用这种低层协议模拟卡是不可能的.*" (2认同)

小智 18

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

我已经能够使用android_external_libnfc-nxp库中的隐藏函数完全模拟Mifare Classic卡.虽然我只能读取该卡并且它有用,但您需要访问安全元素,其中大多数情况下NXP的applet存在,此applet服务器作为管理模拟卡的前端.

继续搜索的一个好方法是通过逆向工程Google的钱包应用程序.


JCM*_*JCM 5

简短的回答是YES。但是取决于许多因素,例如android版本,手机的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-读者/