RFID Test(一)

序言: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的值改为第二步中的初始值再进行上述操作,小米加了自己的私货。

去试了一下

img_20161002_115042 img_20161002_123118_hdr

结果洗澡与POS的所有操作都行(POS机和门禁一样只验证UID),食堂刷卡读不出。当时以为卡机还要额外校验厂商数据。
然后我便上了ACR122u与UID卡
tb2byslaf95v1bjy0fexxxyfpxa_2963866796
照片懒得拍了,淘宝找的图
img_20161003_201910_hht img_20161002_234101
附上两张拆解图,用的是PN5321芯片,这东西只能跑跑嵌套漏洞,对全加密的卡一筹莫展。而且acr122在pn532芯片前端还有其他逻辑器件,经常性的会产生通信错误,尤其是在使用mfcuk对付全加密卡的时候100%会报错。当然这里读写UID/数据是没有问题的。
2014-10-10_223119
网上找的图,操作一样。我懒得截了。
前四位字节是UID,跟一位校验,后面都是厂商数据
搞了张UID卡改了控制字节(最后一个扇区的控制字节不一致,不知为何)并全部dump进去,本以为结束了。没想到情况依旧。全数据都一致,真的好奇怪啊。
 
2016年10月3日20:56:31
突然发现这张卡ASK应答字节是28而非08,和之前见过的CPU卡模拟M1的ASK一致,这就非常有趣了。毕竟ID卡的复制本来就太容易,厂商也不是傻逼。
还有一种可能是国产兼容卡兼容但和14443A协议并不一致,掺杂了自己的私货。不过可能性不大。
这个问题有时间再研究,很久不碰RFID了,想不到我最后竟栽在一张不存数据的国产模拟卡上,逆水行舟,不进则退,古人诚不我欺。
(未完待续)
 2016年10月8日17:39:08
确认使用CPU卡,JOCP41模拟的M1。

更新,加入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模拟时必须亮屏这一点,我很不喜欢。

移动端的模拟我并未摸透,有两个问题想向大家请教

[Android 讨论] 第三方Root之后无法直接使用adb root/remount然后push系统文件

关于手机NFC切UICC模拟UID的杂谈

“RFID Test(一)”的2个回复

回复 乀垶 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注