Kali平台下的M1卡破解 实战篇
本文主讲在kali平台下,对M1卡进行破解和克隆。
所需设备:电脑,ACR122u-a9读卡器,白卡。
研究对象:学校洗澡卡
主要使用软件:mfoc, mfc-mfclassic
本文主要使用系统为kali1.1,由于本人觉得电脑装windows和kali1.1双系统很麻烦,便把kali安装在了U盘里面,不是live CD,是正儿八经安装在了U盘,可以保存设置更新系统的那种,安装之后用easyBCD添加一个启动项即可。系统选择界面如下:

1.使用mfoc破解并获取M1卡数据
进入kali1.1系统,插上读卡器,指示灯亮:

这里说明一点,网上很多破解M1卡都是在windows环境下完成,但是我认为在kali下更加方便稳定,因为kali本身就自带了读卡器驱动并且更加稳定,不需要我们自己安装,我在windows环境下操作的时候经常遇到读卡器死机的情况,而且Windows环境下使用的程序大都是Linux环境下移植过去加了个GUI。
虚拟机装的kali对读卡器的驱动同样不稳定,其中原因我也不是很清楚,但是想想也对,毕竟人家堂堂正正的读卡器,偏偏要被一个虚拟机所驱动,人家自己心里也不好过(。﹏。) (。﹏。)。
将洗澡卡放在读卡器上,滴~~~指示灯变绿。

打开mfoc :

Mfoc 使用方法如下:
Mfoc [-h] [-k key] …[-p probnum] [-T tolerance] [-O output]
命令说明如下:
-h 帮助文档
-K 自定义密匙
-P 探测次数
– T 探测延时
-O 是大写的O(欧),不是0(零) 指定输出文件名
这里我们输入命令:
mfoc –O xizaoka.mfd
过了几秒钟显示如下:

在0-15这16个扇区中,除了扇区9没有找到密匙之外,其余扇区均使用了默认密匙。而且显然,扇区存的就是我们想要的数据,这里我们可以利用M1卡的验证漏洞来获得密匙,具体什么漏洞我将在之后的文章中详细讲解。mfoc正好能利用这个漏洞。
程序开始破解:

成功找到扇区9的密匙A和密匙B,并开始dump出数据:

Dump完成:

我们以同样的方式对白卡也操作一次,先拿走洗澡卡:

大家注意看,在拿走洗澡卡之后,读卡器指示灯并没有变红,但是并不影响使用,直接再把白卡放上去即可。这应该是U盘版kali的一个小bug:

使用命令:
mfoc –O baika.mfd
对白卡dump完成之后,我们在根目录得到了两个文件 baika.mfd 和 xizaoka.mfd 每个均为4096 bytes,也就是4K,然而我们的洗澡卡容量明明只有1K为什么会dump出4K呢,这个我在以后文章中也会说明。


2.在windows环境下手工修改dump文件格式
上文说了我们的卡只能装1K的数据,那么我们必须要把这个4k的文件变成1K,我当时也不知道该怎么办,便将dump出来的文件复制出来,在windows下使用winhex打开想研究一下到底怎么回事儿,如下图:
扇区0保存了UID

扇区9保存了洗澡金额数据,我们这里不需要弄懂是怎么保存的:

重点来了,过了16个扇区后,我发现后面还跟了3K大小的空白数据:

心想,有卵用?删掉不正好是1K嘛,改完如下:

Windows平台上好像也有一个名叫fixdump的小工具,能将4K的文件改为1K,我想原理应该就是和我的一样吧。(其实baika.mfd不需要修改)
3.在kali环境下使用nfc-mfclassic复制卡片。
进入kali,将修改好的文件复制到根目录,打开nfc-mfclassic:

命令格式如下:
Nfc-mfclassic r|R|w|W < > [
命令说明如下:
r|R|w|W r标示读read,w表示写write,特别注意,当使用大写W时,软件将尝试覆写0扇区的UID
a|A|b|B 选择使用密匙A或密匙B 大写时将忽略错误
dump.mfd 我们将要写进卡里面的文件名,我们这里是xizaoka.mfd
keys.mfd 之前dupm白卡产生的文件,主要作用就是保存了白卡的密匙。这里是baika.mfd
f 当UID不匹配时,强制使用前面的key,我们不需要用到,当然这个参数加上去也没有影响。
将白卡放在读器上。

最终的命令为:
Nfc-mfclassic w A xizaoka.mfd baika.mfd f

之前我的命令是Nfc-mfclassic W a xizaoka.mfd baika.mfd f
发现写入失败
后来把W改成了小写w,写入成功。
原来是淘宝老板坑我,给我送的卡不可以修改0扇区UID。
到这里工作完成。最后放上两张效果图。


之后还有修改数据等等的,那都是自由发挥的事情了。