Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Android 4.4模拟Mifare卡_Android_Nfc_Rfid_Mifare_Hce - Fatal编程技术网

使用Android 4.4模拟Mifare卡

使用Android 4.4模拟Mifare卡,android,nfc,rfid,mifare,hce,Android,Nfc,Rfid,Mifare,Hce,我研究过Mifare和其他卡模拟,我在编程方面有很好的知识(不是Android,而是C/C++)。我有proxmark,我为proxmark制作了多个仿真代码,所以我知道这些卡是如何通信的 我现在不明白,安卓是否支持全卡模拟。 我已经研究了大约3天了,结论是没有一个恒定的模式。有些人说这是可能的,有些人说不是。我浏览了android API,基于主机的卡模拟似乎能够做到这一点,但据我所知,这是4.4 Kitkat中的新事物,有人有过这方面的经验吗 为了简单起见,目前我正在研究Mifare Ult

我研究过Mifare和其他卡模拟,我在编程方面有很好的知识(不是Android,而是C/C++)。我有proxmark,我为proxmark制作了多个仿真代码,所以我知道这些卡是如何通信的

我现在不明白,安卓是否支持全卡模拟。 我已经研究了大约3天了,结论是没有一个恒定的模式。有些人说这是可能的,有些人说不是。我浏览了android API,基于主机的卡模拟似乎能够做到这一点,但据我所知,这是4.4 Kitkat中的新事物,有人有过这方面的经验吗

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

那么,有没有人对android上的卡片模拟有任何了解呢。也许不用股票操作系统。任何值得知道的事情都将不胜感激


谢谢。

使用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经典协议部分运行在ISO/IEC 14443-3之上(具有一些不同的帧)。因此,使用Android HCE模仿MIFARE Classic也是不可能的
  • MIFARE DESFire协议在ISO/IEC 14443-4的基础上运行。DESFire协议有三种变体:

  • 本机协议:根据ISO/IEC 7816-4,该协议不使用APDU,因此无法使用Android HCE对其进行仿真
  • 包装本机协议:根据ISO/IEC 7816-4,该协议使用APDU,但是,当开始以包装本机命令模式与卡通信时,读卡器通常不会使用DESFire辅助发出SELECT命令。(注意:较新的读卡器实现更可能发出与Android HCE兼容的SELECT命令,因为这也是NXP的一些较新智能卡产品使用DESFire协议仿真所必需的。)
  • ISO协议:该协议基于ISO/IEC 7816-4,并使用AID的应用程序选择。因此,可以使用Android HCE模拟该协议
  • 一些读卡器可能需要较低协议层中的某些参数值(例如特定UID级联级别、特定ATQA值、特定SAK值或特定ATS)。Android HCE没有任何方法来设置这些值。有关在某些根设备上修改这些值的可能方法以及在自定义ROM中以编程方式更改这些值的策略,请参阅


CyanogenMod版本9.1至版本10.2中提供的HCE功能说明:这将模拟任何基于ISO/IEC 14443-4的协议,而不需要符合ISO/IEC 7816-4的应用结构。您甚至可以选择是模拟A型协议还是B型协议。因此,应该可以(尽管我还没有测试)模拟三个DESFire协议中的任何一个。然而,即使使用CyanogenMod的HCE功能,也不可能模拟MIFARE超轻或经典协议。此外,它也不可能影响低级协议参数,如UID、ATQA、SAK或ATS。

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

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


继续这一搜索的一个好方法是对谷歌钱包应用程序进行反向工程。

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


存在允许UID0的任何值的,具有可重置OTP、lock和block锁定位的。有关更多信息,请参阅手册。

简短的回答是。然而,这取决于许多因素,如android版本、手机的NFC芯片等

要知道您的设备是否支持它,只需通过Tapkey下载一些应用程序,如“”,它就会通知您是否支持MiFare Classic和MiFare Ultralight。还有一个最新列表,但显然可能存在一些不匹配:

现在的问题是“如何”。我还没有找到一个应用程序可以使用新的Android基于主机的卡模拟()来实现这一目的(请参见此处):

事实上,MiFare最近建议您使用“安全元素”方法:

回到你们关于Ultralight的问题,主要的困难在于Android API定义为今天在每次点击时发送一个随机的UID,正如之前一位美国科学家所建议的