我研究过Mifare和其他卡片仿真我对编程非常了解(不是Android,而是C / C ++)。我有proxmark,我为proxmark制作了多个仿真代码,所以我知道这些卡是如何通信的。
我目前不明白,android是否支持全卡模拟。 我已经研究了这个约3天了,结论是没有一个恒定的模式。有人说这是可能的,有人说不是。我查看了android API,基于主机的卡仿真似乎能够做到这一点,但据我所知,这是4.4 Kitkat的新功能,有没有人有这方面的经验?
为了简单起见,目前我正在调查Mifare Ultralight最简单的基本模拟。这张卡是一个安全噩梦,没有加密,只有大约10个功能。所以我有兴趣用这张卡开始研究,因为它是最容易复制的。
所以有人对android上的卡片仿真有任何了解。也许不使用股票操作系统。任何值得了解的事情都会非常感激。
感谢。
答案 0 :(得分:51)
在Android 4.4中使用基于主机的卡仿真(HCE),您只能模拟ISO / IEC 14443-4协议。更具体地说,您只能根据ISO / IEC 7816-4模拟应用程序结构(因此需要通过AID选择卡仿真应用程序)。此外,API不会为您提供任何方法来指定是否应使用A类或B类协议进行卡仿真。
关于各种MIFARE协议的仿真:
MIFARE DESFire 协议在ISO / IEC 14443-4之上运行。 DESFire协议有三种变体:
的
某些读者可能需要较低协议层中的某些参数值(例如特定的UID级联级别,某个ATQA值,某个SAK值或某个ATS)。 Android HCE没有任何设置这些值的方法。有关在某些有根设备上修改这些值的可能方法,请参阅Editing Functionality of Host Card Emulation in Android;有关在自定义ROM中以编程方式更改这些值的策略,请参阅my answer to Host-based Card Emulation with Fixed Card ID。
CyanogenMod 中从版本9.1到版本10.2的HCE功能的注释:这将模拟任何基于ISO / IEC 14443-4的协议,而不需要符合ISO / IEC的应用程序结构7816。您甚至可以选择是否要模拟A类或B类协议。所以应该可以(虽然我没有测试)模拟三种DESFire协议中的任何一种。但是,即使使用CyanogenMod的HCE功能,也无法模拟MIFARE Ultralight或Classic协议。此外,它也不可能影响低级协议参数,如UID,ATQA,SAK或ATS。
答案 1 :(得分:17)
一年前我花了几周时间研究这个话题,基于当前实施的结论是: MIFARE Classic的仿真是可能的,但只有通过嵌入式安全元件,这个元素嵌入在恩智浦的NFC芯片(内置的三星I9300的PN65芯片)中。
我已经能够使用android_external_libnfc-nxp库中的隐藏函数完全模拟Mifare Classic卡。虽然我只能读取该卡并且它有用,但您需要访问安全元素,其中大多数情况下NXP的applet存在,此applet服务器作为管理模拟卡的前端。
继续此搜索的一个好方法是通过逆向工程Google的钱包应用程序。
答案 2 :(得分:4)
MIFARE Ultralight芯片MF0ICU1(每页16页x 4个字节)确实是一场噩梦,但无法在包括PN53x在内的任何NXP接口上进行仿真,因为它们硬连线了第一个UID
字节(UID0
)至0x08
,这意味着该标记具有随机UID
(根据恩智浦标准)。您需要UID0 = 0x04
来模拟MIFARE Ultralight。
存在standalone MIFARE Ultralight emulator,它允许UID0
的任何值,具有可重置的OTP,锁定和块锁定位。有关详细信息,请参阅手册。