序言:RFID在应用范围很广,最常见的就是NXP公司的Mifare系列。国内IC卡主要是M1(又名S50),M4(多为地铁卡)。却别仅为其中的EEPROM大小。
基础知识我就不介绍了,请自行查阅资料。之前接触过不少M1类卡跑key与其中加的密算法。最常用的工具是ACR122u与Proxmark3。本文目前只简介UID的模拟方法。
由于现在学校的新饭/水卡中只存放了UID,其中不存放数据,只需模拟UID即可用手机/UID卡模拟。(后来遇到了一些问题)
先介绍手机使用的场景,手机中的NFC分为博通和NXP两种芯片。芯片的不同不影响读UID的结果但影响读取卡的扇区。
第一步,读取UID
先读取UID
卡的id为:D2:69:76:5B
PS:这个Nexus的测试结果,而米3与此不同,先要改成下一步中的原配置项的默认数值方可进行如下操作。
第二部,修改UID(原理是切UICC)
到手机的 /etc/ 目录找一个文件名为libnfc-brcm-20791b05.conf,默认情况下,文件中NFA_DM_START_UP_CFG 的配置项是这样的值:
{45:CB:01:01:A5:01:01:CA:17:00:00:00:00:06:00:00:00:00:0F:00:00:00:00:E0:67:35:00:14:01:00:00:10:B5:03:01:02:FF:80:01:01:C9:03:03:0F:AB:5B:01:00:B2:04:E8:03:00:00:CF:02:02:08:B1:06:00:20:00:00:00:12:C2:02:00:C8}
2、通过修改这个值就可以改变id。把该文件下载到电脑上,先在最后面增加一个0×33作为标志位,接着接上要指定的id长度,在当前的情况下就是0×04,最后在后面接上要制定的id:“0xD2,0×69,0×76,0x5B”,接着改变最首的数字,加上我们总共增加的字符串长度,这里我们需要加上6,所以最后配置项变成:
{4B:CB:01:01:A5:01:01:CA:17:00:00:00:00:06:00:00:00:00:0F:00:00:00:00:E0:67:35:00:14:01:00:00:10:B5:03:01:02:FF:80:01:01:C9:03:03:0F:AB:5B:01:00:B2:04:E8:03:00:00:CF:02:02:08:B1:06:00:20:00:00:00:12:C2:02:00:C8:33:04:D2:69:76:5B}
3、采用adb的方式覆盖系统中原来的文件,然后重启
adb root adb remount adb push libnfc-brcm-20791b05.conf /etc/ adb reboot
重启之后我们发现,UID已经被改成了我们想要的。
http://www.freebuf.com/articles/wireless/8858.html
引用自Freebuf,操作简单我就不重复截图了。修改了一些文中的纰漏(比如必须亮屏使用)
PS:小米3使用时必须先把NFA_DM_START_UP_CFG的值改为第二步中的初始值再进行上述操作,小米加了自己的私货。
去试了一下
更新,加入NXP芯片的模拟方式
libnfc-nxp.conf NXP_CORE_CONF={20, 02, 2B, 0D, 18, 01, 01, 21, 01, 00, 28, 01, 00, 30, 01, 08, 31, 01, 03, 33, 04, 01, 02, 03, 04, 50, 01, 02, 54, 01, 06, 5B, 01, 00, 60, 01, 0E, 80, 01, 01, 81, 01, 01, 82, 01, 0E }
修改libnfc-nxp.conf中的NXP_CORE_CONF,从0x33(标志位),04(字节数)开始后面的4为UID即可
# System clock frequency selection configuration for PLL # CLK_FREQ_13MHZ - 0x01 # CLK_FREQ_19_2MHZ - 0x02 # CLK_FREQ_24MHZ - 0x03 # CLK_FREQ_26MHZ - 0x04 # CLK_FREQ_38_4MHZ - 0x05 # CLK_FREQ_52MHZ - 0x06 NXP_SYS_CLK_FREQ_SEL=0x02
众所周知M1类的协议是13.56MHZ,但默认配置文件中选择的频率是19.2MHZ(不做改动依然可被另一部手机读出UID,修改为0x01读不出,很奇怪),不知道是不是只是默认的PLL频率而非模拟卡的频率。目前手头无测试环境,待测。
吐槽:仅对模拟UID来说,我还是更喜欢博通方案。NXP模拟时必须亮屏这一点,我很不喜欢。
移动端的模拟我并未摸透,有两个问题想向大家请教
然后呢,确认之后就没了?
后面懒得写了……