Malu blog

学校水卡破解

· · ·

前言

今天淘宝买的pn523 终于到了,话不多说,鼓捣起来。

先下载pn523的驱动,然后配套的软件也都有界面,方便很多

放上店家赠送的白卡读取看下是否正常,一切正常

背景知识

目前使用非接触式卡有ID (Identification Card) 和IC(Integrated Circuit Card)的区别。

ID卡明文记录信息,大部分是出厂就设置好的卡号。

ID卡目前差不多都绝迹了,因为特别容易复制。把卡号读取出来在写入新卡就行了。

目前最广泛接受的是 Mifare 卡。下文称M1 卡。

M1卡分为16个扇区,每个扇区对应4块(块0-块3),共64块,编号为0-63.第0扇区的第0块用于存放厂商代码,已经固化无法更改。其余区的第0-2块用于存放数据,块3为控制块用于存放密码A、存取控制、密码B,结构如下:

1
2
3
 A0 A1 A2 A3 A4 A5     FF 07 80 69      B0 B1 B2 B3 B4 B5

(密码A 6字节) (存储控制 4字节) (密码B 6字节)

并且每个扇区块3中的密码和存储控制全部都是独立的,独立控制本扇区的各种操作,每个扇区都能实现不同的功能,所以广泛用作一卡通。存储控制里面4字节的具体含义我也不是很清楚(不影响我们破解),所以就不说出来误导大家了。

卡中每个块包含16字节,所以M1卡的容量=16扇区4块16字节=1024字节=1k (M1卡的由来)。

鼓捣过程

先是拿宿舍楼的饮水卡尝试复制一下。直接读取UID卡信息,读取完后会储存为dump文件。

用写入功能写到一张空白卡里。这里我用到一张CUID卡,这张卡甚至可以写0扇区。

有些机器会验证0扇区的信息是不是自己厂家的卡,这时候CUID就起到作用了。

不过这种卡理论上是不应该流出的。不过目前淘宝还能买到,且玩且珍惜把。

如果要尝试修改扇区信息,得破解 M1 卡的各个扇区的KEY A和KEY B。

这部分软件自动完成。大抵是穷举或者重放攻击,只有算出扇区的KEY A和KEY B才能修改。

在机器上查询到卡内余额后,尝试修改余额信息。这张水卡只有第八扇区有信息。我们只需要看这部分就行
17.77

发现卡内0和2块内信息是相同的。且N2和N3就是余额信息

因为卡内的数据都是二进制储存的,软件为了便于显示转换为16进制

DEC 1777 == HEX 06FF.
在0 区块下 我除了 N2和N3其他都不知道是什么。

0B FA F1 06 03 03 00 00 0 00 02 00 00 02 00 02

在尝试只修改N2和N3块后发现并不能通过验证。应该是有效验位。

于是我尝试读取不同余额下的第八扇区信息查看修改了什么内容。

17.74

N0 N1 N2 N3 N4 N5 N6 N7 N8 N9 N10 N11 N12 N13 N14 N15
修改前 0B FA F1 06 03 05 00 00 00 00 02 00 00 02 00 02
修改后 14 F7 EE 06 03 08 00 00 00 00 02 00 00 02 00 05

到这里发现N4 和N10, N13 在余额变更之后它们是不变的。

N1, N5, N15都和余额的差值有关。
M1卡在记录金额时现在厂家都添加效验位,防止我这样心怀不轨的人修改余额。

但是大部分的验证都是XOR,和截断,或者取反。

再多增加几个样本看看之前的推断是否一至

17.68

找了一张别的卡。

经过一段时间的尝试,

N5 = ~(N2 + N3 + N4)

N1 = ~N5

N0 = N1 xor N2 xor N2 xor N4 xor N5

N15 = N5 - N4

这尝试的过程太心酸,别问,掉头发。

在机器上测试,也验证通过

好了,至此这张卡完全破解完成了。。

顺带说一句。目前学校里都在使用这种卡,洗澡卡,洗衣卡,水卡,还有学生卡。
因为一张卡有15个扇区可写,如果这些卡的记录数据的扇区不同是可以用一张白卡把信息写上去
然后就可以多卡合一了。

本文遵循 CC BY-ND-ND 3.0 协议,转载请注明原作者,禁止商用,禁止演绎。


© 2015 - 2020 malu
Hexo 强力驱动 · 主题 Milk