写在前面
本篇博客内容是来自前几周折腾复制M1卡的时候了解到的知识点,并不系统全面,遇到什么问题就去查这一部分的资料而已。
Mifare classic系列卡片简介
MIFARE Classic系列卡片是由恩智浦半导体公司(NXP)制造的非接触式智能卡,系列所有卡片的工作频率均为13.56 MHZ,符合ISO 14443规范,早在1994年就已经崭露头角,如今仍然广泛使用。MIFARE是恩智浦半导体公司拥有的一系列卡片的注册商标,这项技术是最早是1994年由米克朗集团(Mikron Group)开发,在1998年转售给飞利浦电子公司(2006年拆分成为恩智浦半导体公司)。
1994年Mifare classic 1k卡片诞生,在此之后虽然推出了各种卡片,但是Mifare classic 1k卡片的地位仍然不可撼动,本文主要讨论的是Mifare classic 1k卡片。
Mifare classic 1k卡片数据结构
Mifare classic 1k卡片简称为m1卡,卡片储存空间1 KB,由16个扇区组成(0-15扇区),每扇区包含4个块(0-3块),总共64块(0-63块),每块包含16字节。
其中第0扇区第0块被称为制造商块,储存了卡号和厂商信息,标准的M1卡0扇区0块已经固化无法写入。
除0扇区外所有扇区的0-2块为数据块,即3个数据块(0扇区只有1-2两个数据块,0块已固化),第3块为控制块(官方文档中称其为扇区尾块)用于存储密钥A(前六字节)、密钥B(后六字节)和存取控制位(中间四字节)。
1 | "0": "A9CB0E2E420804000291ED9CDA29081D", |
上面的是一张空白卡片的数据,其中省略号代表重复的部分。
访问条件
存取控制位决定了该扇区内数据块的访问条件,例如FF078069是m1卡默认的存取控制位组合,该组合代表了该扇区内数据块可以被密钥A与密钥B读写,控制块内除Key A不可读外其余都可以被密钥A读写。
也就是说每个扇区的块3控制着整个扇区的读写权限,A、B密钥分别有那些操作的权限由中间的存取控制位决定,具体的控制位详解可以看这篇博客:M1卡区块控制位理论详解-为敢技术
常见变种卡
- 普通M1卡:0扇区0块出厂锁死不可改,其它扇区可重复修改
- UID卡:又称一代魔术卡,0扇区0块可改,其它扇区可重复修改;但是无法使用一般的write命令修改,需通过特殊的指令才可以修改0块,因此该卡片无法通过MCT等常见手机NFC读写卡软件进行修改(估计需要专门的设备进行修改),另外刷卡机的防火墙也根据UID卡会响应后门指令这一点来判断卡片合法性
- CUID卡:又称二代魔术卡,0扇区0块可改,其它扇区可重复修改;不再响应后面指令,绕过针对后门指令的防火墙检测,同时可以使用write命令写入,支持MCT等常见手机NFC读写卡软件写入,但是由于它可以通过write命令无限次修改0块,刷卡机防火墙可以在每次刷卡时尝试修改0块来检测卡片合法性,这也就是有些复制卡刷过一次就失效的原因
- FUID卡:0扇区0块只能修改一次,修改后自动锁定,其它扇区可重复修改;也就意味着修改一次0扇区0块后这张卡可以当作一张标准的m1卡来使用,以此绕过防火墙的检测,但也因为只能修改一次0块,该卡不能多次使用
- UFUID卡:0扇区0块可改,可以手动锁死0扇区0块,其它扇区可重复修改;不锁定时可以多次修改0扇区0块,手动锁定后就是一张标准的m1卡,解决了FUID卡只能使用一次的缺点。
相对应的,卡片的价格基本上是按照这个排列顺序上涨的。
实操-某校园卡门禁功能复制
设备与软件
常见的小红板、PCR532、PM-pro基本都是把PN532等NFC芯片和配套模块打包集成,再加上写其它的拓展功能,软硬件捆绑销售。
但是需求决定设备与软件,本人所持校园卡并没有特殊加密等,所以没有必要上PCR532等设备,使用安卓手机+MIFARE Classic Tool(简称MCT)软件即可。
读取卡片
打开MCT软件选择读标签,勾选密钥文件并开始映射读取标签,我们可以得到以下数据:
1 | "0": "693B00B1E32804009010150100000000", |
读出来我们发现,这张校园卡其实是一张空卡,数据块全是空白的,那就意味着校园内的设备其实是通过读取0扇区0块即厂商块中的UID来验证身份的,设备读取到UID后联网查询数据库内该UID对应的持卡人信息;在这张卡的厂商块中,前八位是卡片UID,所以理论上我们只需要找一张卡模拟前八位UID即可完成校园卡门禁功能的复制,根据前面所介绍的卡片种类,决定使用CUID卡进行复制。
复制UID
MCT软件提供了一个快速复制卡片UID的功能,无需使用写标签功能,位置在:工具-克隆UID
进入页面后先刷一下校园卡,MCT会提取该卡片的UID,点击计算块0并克隆UID按钮后,MCT会计算填充UID后面剩余的厂商信息、SAK和ATQA等值(当然你也可以自己填充这些内容,点击显示选项即可自由修改)
然后将CUID卡刷一下,正常情况下MCT会提示完成写入,这时再刷一下卡片进行数据校验以验证是否完成写入操作。