关于非接触IC卡的一些记录
2022年10月8日
今年上半年因为捣鼓门禁的原因,重新研究了一下非接触IC卡,记录一下。
概念和技术特征
一般使用的非接触IC卡全称叫 Mifare S50 1K卡,是否严谨并不重要,总之用这些名字能找到一些确切的资料。
工作频率:13.56MHz,也被称为高频卡。感应距离大概在1cm左右。
存储结构
Mifare S50 1K卡的存储空间总共有1K。分为16个扇区,分别编号为0-15扇区。
扇区内结构
每个扇区的结构如下:
块0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
块1: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
块2: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
块3: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
块0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
块1: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
块2: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
块3: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00
表示一个字节,使用16进制表示。
可以看到扇区分为4个块,每块有16个字节。
其中块0-2是数据块,块3是控制块。即块3不能用于存储数据。
扇区控制块
块3为扇区控制块,用于控制扇区的访问权限。块3的结构如下:
密码A:00 00 00 00 00 00
控制位:00 00 00 00
密码B:00 00 00 00 00 00
密码A:00 00 00 00 00 00
控制位:00 00 00 00
密码B:00 00 00 00 00 00
密码A和密码B的默认值为FF FF FF FF FF FF
。
控制位默认值为FF078069
,实际有效的只有前3位,第4位可以忽略。它的具体含义不展开,可参考https://blog.csdn.net/weixin_40600325/article/details/85250435。
总之,密码A和密码B是这个扇区的访问密码,而控制位用于控制扇区的访问权限,决定拥有密码A或密码B的用户是否可以对扇区进行操作(读取、加值、减值等)。在保持默认的控制位值不变的情况下,在拥有密钥A和密钥B时就能对扇区内的数据进行读写。
0扇区
0扇区比较特殊,它的块1-3和其它扇区都一致,但是第0块一般是厂商固化的,不允许修改。我们也可以把它叫作这张卡的“卡号”,每一张卡的第0块都是不一样的。
0扇区第0块有16个字节,但是在实际使用中,一般只有前几个字节是有用的,后面的字节即便不一致也不影响,所以有时候“卡号”仅指前几个字节。
加密卡与非加密卡
实际上加密卡与非加密卡的概念并不是很准确,因为卡片本身并不能加密数据,而只是通过密码来控制扇区的访问权限。一般我们把密码全部为默认值的卡叫做“非加密卡”,而密码不全为默认值的卡叫做“加密卡”。也就是说,加密卡中至少有一个扇区的一个密码是未知的。
如何获取扇区数据
如果需要分析或者复制一张卡片,首先需要获取卡片的数据。这里记录2种方法:
- 使用Android APP:Mifare Classic Tool,这个工具具备完整的读写功能,包括密码破解的功能也有,如果密码比较弱的话,可以很容易读取到所有扇区的数据
- 使用PM5之类的硬件,可淘宝或拼多多,一般会附带软件,具备完整的读写功能
当我们读取到完整的扇区数据后,可以将数据保存到文件中,这样后续分析或者再写入其它地方都比较方便。
门禁和复制门禁卡
门禁是非接触IC卡的一个典型应用场景,而视门禁系统的不同,它对于IC卡的使用方式也不完全相同。
- 有些门禁系统只验证IC卡的卡号,而不对其它扇区的数据做进一步的验证,这种一般使用“非加密卡”
- 有些门禁系统会验证IC卡的卡号,同时会验证某个扇区或某几个扇区的数据,这种一般使用“加密卡”
目前Android手机都标配了全功能NFC,即可以完整地读写非接触IC卡。因此,我们也可以通过手机来复制门禁卡。
使用手机复制门禁卡或者将门禁卡复制到其它卡片上的一般有下面一些解法。
手机复制非加密卡
针对“非加密卡”,一般国产手机厂商都内置了“复制门禁卡”的功能,它的原理很简单,就是直接复制门禁卡的0扇区第0块,也就是卡号,针对只验证卡号的门禁系统有效。有一些手机在碰到“加密卡”时,也会尝试复制卡号,此时就会出现门禁卡复制成功,但是刷卡没有反应的情况,因为门禁系统验证其它扇区数据时会失败。
在门禁系统中添加新卡
针对“非加密卡”,还有一种解决办法,就是使用手机已有的卡(门禁卡或者公交卡都可以)。这种方法需要联系小区、公司等门禁系统的管理员,让他们在门禁系统中添加新卡,然后将手机已有的卡(门禁卡或者公交卡)刷到门禁系统中,这样就可以使用手机已有的卡来刷门禁了。这也是网上流传的“iPhone复制门禁卡”的方法。
手机复制加密卡
针对“加密卡”,可以在手机上尝试破解密码,复制完整的0-15扇区数据,因为所有扇区数据都被完全复制了,因此门禁系统验证时都可以通过。目前已知小米、华为手机都可以通过这样的方式来复制加密卡(可能除了破解之外还有云端共享密码的手段),但是整个过程中,数据对用户而言是不可见的。
也可以只用手机自带功能复制卡号,然后使用另一台带有完整扇区数据的手机或者写卡器将其它扇区写入门禁卡,这样也可以实现复制加密卡。
复制门禁卡到手环
针对“非加密卡”,一般来说和复制到手机的方式差不多,只不过是手机上多了一个写入的操作,大部分国产手环搭配Android手机都可以完成这个过程。
针对“加密卡”,同样涉及到破解密码的问题,大部分手环只允许复制卡号。这也是网上很多人觉得手环不能复制加密卡门禁的原因。事实上,在复制卡号之后,手环就拥有了0扇区的数据,接下来只需要再通过手机或者写卡器将其它扇区的数据写入手环即可。
复制门禁卡到其它卡片
和复制加密卡到手环类似,首先需要获取原始卡片的扇区数据,然后使用手机或者写卡器写入空白卡片即可。
但值得注意的是,空白卡片分为好几种,有一些是0扇区不可写入的(正常的卡/UID卡),有一些是0扇区可以反复写入的(CUID卡)。如果需要复制门禁卡,则一定需要复制卡号,因此需要使用CUID卡。
顺便也提一下“ID卡”,ID卡只存储了卡号,而且卡号一般都刻在卡片上。ID卡的工作频率是125KHz,感应距离大概在10cm左右。如果需要复制ID卡,只需要将卡号告诉给淘宝卖家,他们会帮你复制好卡寄过来。
小结
非接触IC卡其实还挺复杂的,但是在门禁这个应用场景里,一般都不会太复杂,要么复制卡号即可,要么复制卡号+扇区数据即可。稍微麻烦一点的是,如果需要复制加密卡,那么就需要破解密码。