M1水卡破解教程

前置知识

1、如果一个读卡器周围有多张卡,读卡器的电磁场激活卡片后,卡片会把自己的 UID 回复给读卡器,读卡器根据 UID 选择卡片,然后读卡器与卡片进行认证,通过之后才进行正常的数据传输,避免信息的混肴和丢失

2、ISO/IEC 14443-3 是一项国际标准,主要涉及近场通讯(NFC)和射频识别(RFID)技术中用于接触式集成电路卡(IC卡)和读卡器之间通信的协议标准,在 14443-3 中读卡器(近距离耦合设备)简写为 PCD,卡片(近距离集成电路卡片)简写为 PICC

M1卡

这里的M1卡指的是A卡,也就是ISO/IEC 14443 Type A卡,本来是在学习这篇关于M1的AES认证机制的时候突然想到以前搞的ACR克隆M1卡的实验,但是那个比较基础,于是我就花了一些时间去研究了一下关于M1的的水卡的校验原理,发现还算比较简单的

实验

先贴上我的实验数据

1
2
3
4
5
6
7
8
9
10
11
9 扇区
0区块:0021470100000000000031383230396D
1区块:E40300000000000000000000140000FB
2区块:E40300000000000000000000140000FB
3区块:1D12E70D2EA17F0788DAFB01E6D9A1A5

10 扇区
0区块:94D4031ECE00000000FB1D000000006F
1区块:00000000000000000000000000000000
2区块:00000000000000000000000000000000
3区块:1D12E70D2EA17F0788DAFB01E6D9A1A5

上面的数据是我通过ACR122U的IC卡提取器提取出来的数据,经过对比9扇区1,2区块和10扇区的0区块是改变的区域

于是在通过对数据的分析,发现在9扇区的1,2区块的前两个字节是金额的数据,由于是小端序,于是我们可以知道这里面的数据金额为(0x3E4) = 996就是9.96,倒数第4个字节是固定不变的数据,于是可以忽略,

更加经验来讲最后一位一般都是校验位,校验的方式对于水卡来说,一般都是每个字节异或校验,或者加校验,或者或校验,或者与校验,具体情况得自己分析找规律,但无非就是异或,或,非,与,加

这里的实验数据是加校验

然后我们继续看10扇区的1区块,本身10扇区的1区块的数据变化是很复杂的,这也是上次没有实验出结果的原因,但是在看完一篇关于M1校验的文章后发现,M1校验可能跟时间也有关系,于是做了一个实验,保证两张卡的UID和金额等等不变,只有最后一次使用的时间不一样,发现数据的前5字节是变化的,也就是说,前5字节就是时间戳

这里的时间戳的作用,根据我了解的关于水卡的校验,应该是用于滚动码的,或者说是用于防止你复制水卡的,但是由于我们的水卡的设备是没有联网的,无法实现滚定码

于是不用管,最后经过不断地对比实验,发现FB1D的1D是定值,FB是上面的校验码,最后的6F也是校验码

结论

我们学校的水卡使用了加校验和时间戳,但是时间戳没用到,因为不联网

我挺喜欢一句话的,技术本身无罪,重要的是使用的人