M1 CARD SIMULATION
常用复制卡分类
M1卡:全称Mifare classic 1K,普通IC卡,0扇区不可修改,其他扇区可以反复擦写。通常我们使用的门禁卡、电梯卡都是M1卡。
M1卡是NXP(恩智浦半导体)公司研发的IC卡,执行标准是ISO/IEC14443 Type A,读写频率是13.56MHz。目前大多数手机厂商使用的NFC芯片都是NXP,另一部分则是BRCM(博通)方案,均执行同一标准,这是手机读写M1卡的技术基础。
UID卡:普通复制卡,可以反复擦写所有扇区,门禁有防火墙则失效。
CUID:升级复制卡,可以反复擦写所有扇区,可以穿透大部分防火墙。
FUID:高级复制卡,0扇区只能写入一次,写入后变为M1卡。
UFUID:超高级复制卡,0扇区只能写入一次,封卡后变为M1卡,不封卡变为UID卡。
复制卡均可在网上购买,有普通卡片、钥匙扣、滴胶卡等类型,CUID通常1.5元/张,越高级的卡越贵。
加密M1模拟思路
首先你要确定你的不是CPU卡(比如手机卡),只有是M1卡才可以;
其次你需要M1卡的读写设备(122U 532 PM3等),和至少一张UID卡;
1,使用设备读取你的卡并且解密,将解密的数据文件存储到本地;
2,复制一份解密的存储文件备份,然后把数据文件里面除了零扇区以外的所有的数据都改成0,所有的AB密码都改成F,保存;
3,把上述修改过的文件使用设备写入到UID卡中,就得到了一张非加密的卡(此时没有数据,不能用);
4,用手机去模拟这张卡,因为它现在是不加密的,所以你就可以模拟了;
5,模拟成功之后调节到刷卡界面,把手机NFC区域放到读写设备上,把你备份的解密文件写入;
M1卡数据结构
M1卡由16个扇区组成,每个扇区在有4个数据块组成,按照顺序将数据块进行编码,其地址编码为0~63。
每个扇区由四个区块组成,块0 ~ 块2是数据块,也就是存放数据用的,可以在每次消费充值的时候,记录相关的数据, 可以进行数值初始化、加、减、读操作。 。块3,也就是最后一个块是控制块,存放着密钥A,B和控制位。我们要破解的就是密钥A,B。但是对控制位的意思也要了解, 这里要注意,控制位的写入要慎重,特别是写入锁死功能,对于M1卡来说,控制位的写入锁死一旦写入,这个扇区就不可能再被修改!
控制位是以正反形式存储于控制字节中,确定了数字块的访问权限。例如,进行加值操作须验证Key B,进行减值操作须验证Key A。 控制位的含义直接看数字啥也看不出,所以靠逆向理论去破解控制位的含义。
M1卡的内部结构:
(1)Mifare1卡由16个扇区组成,每个扇区在有4个数据块组成,按照顺序将数据块进行编码,其地址编码为0~63
(2)在扇区1的第0数据块,存放张卡片制造厂家信息,这个扇区的信息已经固化,不能修改。
(3)每个扇区的4个数据块,功能不同。数据块0~2是用于存储数据。这3个数据块主要应用于数据存储和数据读操作。
这里存储的数据,可以进行数值初始化、加、减、读操作。
(4)块区3作为控制块存在,用于存放:密钥A、存储控制(这里要注意,控制位的写入要慎重,特别是写入锁死功能,对于M1卡来说,控制位的写入锁死一旦写入,这个扇区就不可能再被修改!!!!)和密钥B。
(5)每个扇区内数据块3中的密码和存储控制全部独立存在(也就是说M1卡可以验证多台设备实现多种功能),用户可以根据的需求进行设置。存储控制限定在4 B,32 bit 。对每个扇区中的每个数据中的每个数据的存取条件均是由密码和存储控制共同确定的,每个存储控制由三个控制位组成。
(6)控制位是以正反形式存储于控制字节中,确定了数字块的访问权限。例如,进行加值操作须验证KEY B,进行减值操作须验证KEY A。
控制位的数值理解起来比较困难,有一个软件叫:****M1+卡控制字节生成工具(https://download.csdn.net/download/c1664510416/11369060)。可以帮我们很好的理解控制位的含义。
知识拓展:
小细节:
IC卡数据0扇区0块的第6字节代表着芯片类型,普通的IC卡SAK类型为:08,CPU模拟卡为:28,纯CPU卡
为:20
M1工具:Mifare
MCT写卡
未加密或弱加密数据基本模拟方法
MCT写卡需要数据和密钥,可以只添加密钥,然后利用密钥直接读取卡片数据
1)编辑/增加密钥 :新建密钥文件TestKey,进入密钥编辑页面,将密钥数据从电脑上复制然后粘贴进来
2)读取原卡数据:将原卡放在手机NFC感应区域,在MCT中选择正确的密钥TestKey,所有扇区数据就能成功读取
如果选择不正确的密钥,则无法读取完整数据
3)保存数据至转储文件
4)数据写入新卡:准备一张空白UID卡,识别卡片后,选择密钥文件和转储文件,选择扇区,等待写入完成即可
以下是高级写入,覆盖0号扇,即完全模拟
重新读取卡片数据确认,在MCT里选择比较转储功能,发现卡中0扇区0块的数据与转储文件不同,这说明0扇区0块的数据没有成功写入
根据不同的认证策略灵活应变,如果接收器以设备号为认证方式,则需要开启0号扇覆盖:
需要在写转储时勾选 “高级:使能厂商块写入”选项,勾上这个选项后另外单独写一次0扇区
注:MCT方式只能写CUID卡,用MCT写卡没有Proxmark3稳定,有时会出现写坏锁死CUID卡的情况
IC卡模拟(手机、手环)
MIUI门卡
小米MIUI推出了门卡模拟的功能,不仅可以将卡数据写入到手机中,而且手环也可以,当然需要写特殊手段,但是为了安全考量,小米官方都不支持加密卡的模拟
笔者的小米MIX2板载NFC芯片是NXP 80T19
NXP 80T19芯片其模拟的卡类型属于NXP JCOP系列,Proxmark3的官方固件是不支持JCOP卡,后来笔者是刷了冰人固件才能正常识别MIX2模拟的门卡
NXP JCOP系列芯片卡是恩智浦NXP公司在高安全性的解决方案高性能产品。广泛应用如银行与金融,移动通信,公共交通,访客访问和网络接入等领域。支持接触式、非接触式、支持接触式与非接触式读写,内含有一个JCOP版本操作系统,并提供40 k-80K字节EEPROM存储器。NXP JCOP系列芯片卡出厂带传输密钥(Transport Key),需要经过初始化后,方可访问卡片内置的COS系统,因为此类芯片卡的安全系列非常高。
小米MIUI推出的门卡功能有两个模式:模拟实体门卡和添加虚拟门卡
模拟实体门卡
这个功能是将实体卡中的数据读取出来,然后通过手机模拟实体卡,将卡模拟到手机后,可以只带手机在刷卡机处刷卡,无需再另外带实体卡,轻便出行。可读取的门卡包括普通白卡、钥匙扣之类的IC卡
但是模拟的卡中不包括加密卡,如果卡被识别为加密卡,则会提示“加密卡不支持模拟”
非加密卡,可以成功模拟,模拟过程中需要证件和密码认证,这功能必须进行安全因素的考量
手机放在IC卡感应器
Proxmark3读出的模拟门卡信息,UID与实体IC卡的相同
添加虚拟门卡
虚拟门卡可以根据场景开卡,选择自定义空白卡,相当于由MIUI自动生成一张0扇区不可更改的IC卡,剩下的扇区数据可以随意写入。如果物业允许,在物业处开通虚拟门卡的权限即可,不过一般小区物业不会同意的
虚拟门卡开卡
Proxmark3读取到的虚拟门卡信息,UID由MIUI自动分配
模拟加密卡
现实中有个需求就是,想把手上的IC卡写到手机中,虚拟门卡是因其UID是由MIUI自动分配的,且生成后不可更改,虚拟门卡没条件开通门禁系统权限的条件下,只能选择模拟实体卡的功能了,但是模拟实体卡有个问题,前文中也提到过,现在使用的IC卡基本都是加密卡,模拟实体卡功能又不支持加密卡,那就没有办法了吗?
答案是肯定的,可以模拟加密卡,前方高能!!!真正的干货来了!!!
模拟加密卡的思路:获取加密卡数据 –> 只写UID信息到实体UID白卡中 –> 模拟UID白卡 –> 往模拟卡中写入加密数据
第一步:获取加密卡数据
用Proxmark3获取加密卡的密钥,然后读取所有加密数据,方法前文中有讲
第二步:只写UID信息到实体UID白卡中
Proxmark3上更换一张UID空白卡,然后写0扇区0块数据
发送指令:
1 | hf mf csetblk 0 7295B829760804000214F34CBDBE2F1D |
只写了0扇区0块的UID卡,因为未写加密数据,这张UID卡目前还是一张非加密卡
第三步:模拟UID白卡
手机上使用MIUI门卡的标准功能,模拟写了0扇区0块的UID卡
这一步相当于已将加密卡的0扇区写入到手机中
第四步:往模拟卡中写入加密数据
手机切换到卡模式,然后放在Proxmark3感应区域
用Proxmark3往手机的模拟门卡里写入加密数据,发送指令:
1 | hf mf restore 1 u 7295B829 |
. . .
1 ~ 63块数据成功写入
这一步写入了1 ~ 63块数据,但是0扇区0块数据无法写入,没关系因为0扇区0块数据已经在第三步中写入了
至此,所有扇区数据已写入到手机中,加密卡模拟成功完成
手机中可以设定刷卡方式设置,选择默认快捷卡片,只要靠近读卡器,手机自动唤醒切换到卡模式,并且首选默认快捷卡片
手环模拟
小米手环3 NFC版也可以通过相同方法模拟加密卡