[MifareClassic]利用PN532完成射频卡扇区解密与校验分析
写在前面:仅供安全测试用,请勿用作非法用途!!!
一、射频卡基础
MifareClassic的射频卡,一般内存大小有3种:
1K: 16个分区(sector),每个分区4个块(block),每个块(block) 16个byte数据
2K: 32个分区,每个分区4个块(block),每个块(block) 16个byte数据
4K:40个分区,每个分区4个块(block),每个块(block) 16个byte数据
对于所有基于MifareClassic的卡来说,每个区最后一个块叫Trailer,16个byte, 主要来存放读写该区的key,可以有A,B两个KEY,每个key长6byte,默认的key一般是FF 或 0,最后一个块的内存结构如下:
Block 0 Data 16bytes
Block 1 Data 16 bytes
Block 2 Data 16 bytes
Block 3 Trailer 16 bytes
M1卡分为16个扇区,每个扇区由4块(块0、块1、块2、块3)组成,(我们也将16个扇区的64个块按绝对地址编号为0~63,)存贮结构如下表所示
2K、4K卡布局规律与1K(M1)卡相同
第0扇区的块0(即绝对地址0块),它用于存放厂商代码,已经固化,不可更改(也存在可以修改0扇区的卡,一般以嗅探卡居多,常用来干坏事)。
每个扇区的块0、块1、块2为数据块,可用于存贮数据。
每个扇区的块3为控制块,包括了密码A、存取控制、密码B。具体结构如下:
每个扇区的密码和存取控制都是独立的,可以根据实际需要设定各自的密码及存取控制;
密码位每种密码分别占6字节,每个扇区都可以设置独立的密码。
存取控制为4个字节,扇区中的每个块(包括数据块和控制块)的存取条件是由密码和存取控制共同决定的。
工作原理:
读写器向M1卡发一组固定频率的电磁波,卡片内有一个LC串联谐振电路,其频率与讯写器发射的频率相同,在电磁波的激励下,LC谐振电路产生共振,从而使电容内有了电荷,在这个电容的另一端,接有一个单向导通的电子泵,将电容内的电荷送到另一个电容内储存,当所积累的电荷达到2V时,此电容可做为电源为其它电路提供工作电压,将卡内数据发射出去或接取读写器的数据。
密码的验证是在卡内部进行的,读写器只负责给卡提供电并和卡通讯,读写器发送加密的密码到卡,卡内部进行解密验证并发返回值,读写器根据卡的返回值来判断验证是否通过.
每个区中的控制位决定验证密码通过后能进行的操作.如果控制块中已将某区锁死,即使密码验证通过也读写不了卡中的数据。默认的控制位数据是无论那个密码验证通过,都可读写区中的数据,KeyA是永远不可读的,KeyB在默认控制块的情况下,可以读,条件是密码必须验证通过。
备注:
在校园卡中,一般来说KeyA是难以推算的加密密码,KeyB是类似FF FF FF FF FF FF之类的默认密码,使用KeyB可以读出卡片内容,同时使用KeyA和KeyB才能对卡片进行写入。
二、所需硬件
pn532读卡器(几十块钱)
电脑一台
校园卡一张
三、解密步骤
读卡器连接电脑,使用nfc上位机读卡片
软件可以自动嗅探密码,半加密卡的破解效率还是很高的,大概在半个小时
完成后会显示扇区的信息,每个扇区的最后一行的前六字节和后六字节存放该扇区的keyA和keyB,当同时知道这两个密钥时才能对扇区进行写入修改操作。
四、水卡数据分析
主要还是靠猜,提取同一张校园卡的两次不同金额数据,找到被修改的部分
这里发现29扇区第1、2行的前两字节和最后一个字节被修改,猜测前两字节存储金额,最后一字节是校验位(此时水卡剩余金额13.85元)
参照网上一些例子,发现前两字节倒置后/100就是水卡金额
五、校验位分析
这里发现0xE5=(本行前面各位数相加) mod 0x100
即校验位=各行每个十六进制数相加并和0x100取余数
金额修改测试--成功
六、一卡一密分析
多收集数据样本
本人比较菜,只看出前几位的规律
密钥的前4位基本上只是用卡号做加减运算
后面两位没找到什么规律,看起来跟卡号的一四位有关,似乎是彩虹表?
(或者其实每位都是彩虹表,但测试数据中前几位正好符合一些规律)