M1卡说明及使用proxmark3破解方法
其中每个data为一个“块”。这样我们可以计算一下:16b* 4(块)*16(扇区)=1024B 就是1K。
第0扇区的块0(即绝对地址0块),它用于存放厂商代码,已经固化,不可更改。
在全扇区加密时,通常用前三个“块”(0,1,2 块)存放数据,用最后一个”块“(3 块)存放密码。
其中密码分为A密码和B密码:前6个字节存放A密码,中间4字节为控制字段,后6字节存放B密码。
例如:
A0 A1 A2 A3 A4 A5 FF 07 80 69 B0 B1 B2 B3 B4 B5
注意这里每个扇区的密码都是独立的,也就是说可以为16个扇区设置16个不同的密码,当然也可以使用相同的密码,但是这样会大大降低破解的难度。例如上图中的该扇区A密码为空:000000000000,B密码为:FFFFFFFFFFFF。
对于控制位这里有点门路,我找了很多 上的文章,其中发现这篇讲解得最好:http://www.duoluodeyu.com/2013/835.html
但是注意其中的 字节7是C1Y,而不要把字节6、7、8一次当成了C1Y C2Y C2Y。注意到这一点对于理解就没什么难度了。
每个M1卡都有一个唯一的序列 ,我们称为“UID”,是32位的,也就是4个字节。
M1卡是典型的高频卡,工作频率为13.56MHz,一般调频(FM)收音机接收的广播频率在87MHz到108MHz之间。猜想:如果高频卡工作频率达到80MHz以上时在读卡或写卡时产生的频率应该能对该频段收音机产生电磁干扰。
通信速率:106KBPS,也就是说可以在10毫秒的时间内完成读写内容。
工作半径:100mm。大约在100mm以内的距离,可以使用读卡器对m1卡进行操作(一般写距离要小于读距离)。
在使用proxmark3对M1卡进行破解时 ,我们可以使用hf mf mifare命令去探测基于PRNG的漏洞出现的Key 。
例如:
然后使用hf mf nested 1 0 A FFFFFFFFFFFF 去探测各个扇区的密码,例如:
花费几分钟后,得到如下的key列表:
根据这个key列表,按道理使用hf mf dump就可以直接读取各扇区的数据了,但是这里遇到了点问题,hf mf dump使用默认的密码FFFFFFFFFFFF来读取各扇区数据,而这里只有0扇区密码正确,其他的均无法dump,所以我们需要使用其他办法。
[size=1em]hf mf rdsc 1 a 1866c42fe6a8
来读取第一扇区数据:
同样的用 hf mf rdsc 2 b 1866c42fe6a8
读取第二扇区数据,这里为什么用B密码是有原因的(因为控制位设置的问题 )。
依次读取16个扇区即可。(其实在这张卡中,只有前3个扇区有数据,后面的扇区数据块均为空)
这里我们就获取了全部想要的数据,在最开始接触m1卡的时候由于知识的不足,总感觉可以控制的位置是有限的。
这也就是不要已经拥有了整个世界还觉得不完美。
现在就可以去刷卡,然后把16个扇区的数据做一个对比了,看看哪一位变化了,如何变化了。
Mifare1智能洗澡卡破解分析
Mifare Classic card提供1k-4k的容量,我们经常见到的是Mifare Classic 1k(S50),也就是所谓的M1卡。M1卡有从0到15共16个扇区,并且每个扇区都有独立的密码,每个扇区配备了从0到3共4个段,每个段可以保存16字节的内容,反正从0开始数 就对了(和数组下标为0开始一样)。
每张M1卡都有一个全球唯一的UID ,这个UID 保存在卡的00扇区的00段,也称为厂商段,其中前4个字节是卡的UID,第5个字节是卡UID的校验位,剩下的是厂商数据。并且这个段在出厂之前就会被设置了写入保护,只能读取不能修改,当然也有例外,有种叫UID卡的特殊卡,UID是没有设置保护的,其实就是厂家不按规范生产的卡(我们在 上买的空白卡片一般都是这种可以修改UID 的卡)。
今天我们以破解一张洗澡卡为例:
用到的工具
读卡设备:ACCR122U一个
空白M1卡片两张
正常使用洗澡卡一张
上图:
卡内余额为26.91元,然后将ACR122u插在机器上,使用M1卡服务程序破解得出卡内的DUMP文件
使用M1卡服务器程序破解:
由于这种M1卡秘钥对为弱密码所以大约几十秒的时间就会破解成功,dump文件会生成在文件目录下:
打开这个软件点击选择文件-选择刚才生成的1KB文件-就会提示“是否保存为4K文件格式”—选择“是”-就是自带修复成功
因为这两个文件都是同一张卡片不同金额的dump文件,所以假定有金额的数据不同,有刷卡次数记录的数据不同,刷卡时间的记录不同,(假定会有这些不同之处,也许只有记录金额的变化),通过对比两张卡片,发现在00000176 和00000192处有不同的数据块
如图;
余额为26.91:
发现这两张卡内的不同之处在于:
通过十六进制转换测试:
Hex(80 0A)=32778
HEX(7F F5)=32757
测试发现并不是这么简单的直接转换,于是将 800A 进行翻转为 0A80
HEX(0A80)=2688 2688符合卡内余额为26.88的实际情况。
HEX(0A83)= 2691 2691符合卡内月为26.91的实际情况。
可以总结得出金额位的加密方法为 金额转换十六进制后进行翻转存储。
接下来分析 7F F5代表的含义
根据M1卡了解 金额位置后面会有校验位数据,通俗讲就是当前面金额数据变了之后,校验位会根据另外的算法去改变值。
一般最简单的算法都是二进制取余后转换为16进制再加上金额位的加密方法
计算方法如下:
校验位7F F5-翻转为F5 7F转换二进制为1111010101111111 二进制取余为0000101010000000 转换为十进制为:
Hex(0000101010000000)=2688
可以得出金额校验位的加密方式为将金额转换为二进制后取余,取余后的二进制转换为16进制,将16进制翻转后得到的结果就是金额校验位的信息
例如金额为26.88—2688–0000101010000000—1111010101111111–F5 7F–7F F5
计算出金额校验位应填7F F5
直接保存文件为600.dump,dump金额就修改成功了
3)将文件写入到空白卡片中
通过NFCGUI-PRO.exe软件进行dump文件写入:
如图:
4)测试:
通过十六进制转换测试:
Hex(80 0A)=32778
HEX(7F F5)=32757
测试发现并不是这么简单的直接转换,于是将 800A 进行翻转为 0A80
HEX(0A80)=2688 2688符合卡内余额为26.88的实际情况。
HEX(0A83)= 2691 2691符合卡内月为26.91的实际情况。
可以总结得出金额位的加密方法为 金额转换十六进制后进行翻转存储。
接下来分析 7F F5代表的含义
根据M1卡了解 金额位置后面会有校验位数据,通俗讲就是当前面金额数据变了之后,校验位会根据另外的算法去改变值。
一般最简单的算法都是二进制取余后转换为16进制再加上金额位的加密方法
计算方法如下:
校验位7F F5-翻转为F5 7F转换二进制为1111010101111111 二进制取余为0000101010000000 转换为十进制为:
Hex(0000101010000000)=2688
可以得出金额校验位的加密方式为将金额转换为二进制后取余,取余后的二进制转换为16进制,将16进制翻转后得到的结果就是金额校验位的信息
例如金额为26.88—2688–0000101010000000—1111010101111111–F5 7F–7F F5
计算出金额校验位应填7F F5
直接保存文件为600.dump,dump金额就修改成功了
3)将文件写入到空白卡片中
通过NFCGUI-PRO.exe软件进行dump文件写入:
如图:
4)测试:

到这里就是M1卡破解的基本步骤,仅作科普文章,请勿做违法事件!
解决方案:
1)将卡片全部更换成CPU卡,CPU卡可以模拟M1卡结构,完全代替M1卡,安全性也比逻辑加密的M1卡更安全。
2)采用一卡一密系统,一卡一密可以免去升级硬件的麻烦,最大程度保护IC卡系统。
3)采用滚动码系统,增加效验,加大破解成本
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!