Mifare Classic 1K智能卡介绍及nfc-tools的使用

2016-11-12 21:21:38 NFC

起因

为什么要研究这个东西呢?其实我对智能卡设备一直很感兴趣,很想了解了解。正好最近TUNA协会搞了个金枪鱼之夜: NFC 与 RFID 近场通信技术,去听了听,借这个机会,了解了一些最基本的东西,知道了入门的方法。这里有录像

其实这篇文章介绍的都是一些没什么技术含量的内容,俗称“脚本小子”。不过,在成为大牛之前,你得迈出第一步,总不能脚本小子会的东西你都不会。

相关概念介绍

智能卡,顾名思义就是有智能的卡呗。智能卡按接触方式主要分为两类,接触式和非接触式。SIM卡、芯片银行卡是接触式智能卡。门禁卡、身份证、公交卡都是非接触式智能卡。当然,有些卡同时具有不同模块,比如有银联闪付功能的银行卡不仅可以进行非接触式通信,也可以读芯片,还能刷磁条。

非接触式智能卡也叫射频卡。射频卡遵循ISO/IEC 14443标准,主要有Type A和Type B两类,但几乎所有的射频卡都是Type A,日常生活能接触到的Type B卡只有身份证和清华大学校园卡。

而射频卡进行通信的技术,叫做近场通信技术,简称NFC。

在Type A射频卡中,最为代表性的,也是应用最广泛的一个实现,就是Mifare Classic 1K卡了。所以下面先来介绍一下Mifare Classic 1K卡。

Mifare Classic 1K卡介绍

从名字就可以知道,这个卡的存储空间有1KB。如图所示,它分成16个扇区,每个扇区分成4个段,每个段有16个字节。每个扇区分成A、B两部分,分别由一个密钥来控制访问权限。每个扇区的最后一个段将存放KEY A、控制位、KEY B。

更详细的结构图可以查看维基百科

而第一个扇区的第一个段,存放了卡片的UID信息,可以理解成卡的身份证号。当然也有一些厂商的其他信息,如下图所示。

校验字节即为UID按字节的异或值。

值得一提的是,Mifare Classic在2008年就被破解了,破解方式为在显微镜下逐层分析电路,得到了随机数发生器的算法。结论就是,如果我们知道了Mifare Classic卡中任何一个段的KEY,就可以通过简单的暴破,得到所有的KEY。其实很多卡用的都是一些默认的KEY。但如果一个KEY都没有,就没办法了。

当然了,我们的主要目的是了解技术原理,并不是为了破解。如果你破解了,总会有办法找到你头上的。而且,稍微正式一点的卡,都不会使用默认密钥的。

读写所需的设备

最具性价比的入门设备就是ACR122U-A9读卡器,可以在淘宝和1688买。它可以读写ISO/IEC 14443 Type A和Type B卡。

此外,你可能需要买几张射频白卡。正常来说,Mifare Classic 1K卡在出厂之后就不允许再修改UID,但是有些厂商不按照标准来,制作出了可以修改UID的卡,称为UID白卡。UID白卡在外形上主要有正常白卡和钥匙扣卡。

需要注意的是,ACR122U-A9读卡器出厂送的两张卡只能修改内容,不能修改UID。

还有就是,送的CD光盘是空的,驱动得自己去官网下。

需要的软件

我个人比较喜欢在Windows下搞这些东西,所以下面提供了Windows下的工具链,当然,在Linux上也都是完全可以的。

下面这些工具,都是nfc-tools组开发的。

mfoc

mfoc的主要作用是进行Mifare Classic的破解,使用了上文所述的暴破方法。有人开发了Windows下的GUI的工具,叫做mfocGUI。可以在作者的网站下载到编译好的二进制程序mfocGUI_v29_Release_Compiled.rar,界面如下。

按图中所示进行设置即可。主要需要用到的功能也在图中标出了,下面就来解释一下。

点1,程序将使用默认密钥进行卡信息的读取,如果有不使用默认密钥的扇区,就会进行暴破,需要多长时间得看RP。首次读取成功后,程序将会把这张卡的密钥共计6*16*2=192个字节按A、B两个部分分别写到Keys文件夹下的a+UID.dumpb+UID.dump两个文件里。下次再读这张卡的时候,如果找到了这张卡的KEY,就会直接用这些KEY读写。也就是说,只要UID没变,就不需要重新暴破这张卡,而且即使变了UID,改一下文件名也就好了。如果你修改了卡的KEY,修改对应的key的dump文件就可以了。

如果没有问题,可以勾选4,再次点击1,就可以把卡片里1KB的信息都读出来到文件里,生成一个dump文件。

5是选择暴破使用的Sets数,可以简单理解成字典的大小。如果Sets数过小,有些密钥可能会暴破不出来,当然,大Sets数也就意味着增加暴破时间。

想要写卡的话,点2就可以了,选择修改好的dump文件即可。如果想连带修改扇区的KEY,勾选3即可。

只是,这个软件不能修改卡的UID和厂商数据,于是我们需要下面这个软件。

libnfc

关于Windows下的libnfc,请参考我的这篇文章在Windows下编译支持ACR122U的libnfc

libnfc都是命令行下的工具。主要有:

nfc-anticol.exe
nfc-dep-initiator.exe
nfc-dep-target.exe
nfc-emulate-forum-tag2.exe
nfc-emulate-forum-tag4.exe
nfc-emulate-tag.exe
nfc-emulate-uid.exe
nfc-jewel.exe
nfc-list.exe
nfc-mfclassic.exe
nfc-mfsetuid.exe
nfc-mfultralight.exe
nfc-poll.exe
nfc-read-forum-tag3.exe
nfc-relay-picc.exe
nfc-relay.exe
nfc-scan-device.exe

不过我们并不需要这么多工具。最核心的其实就三个:

  • nfc-list.exe,查看一下卡有没有正常读取。
  • nfc-mfsetuid.exe,修改卡的UID。
  • nfc-mfclassic.exe,修改卡的数据。

由于mfocGUI已经有了写卡的功能,而nfc-mfclassic.exe用起来又比较繁琐,即使可以将文件拖入cmd自动得到文件的绝对路径,这命令用起来也还是很麻烦的。所以大多数情况下都可以弃用它。

不过这个命令的描述很有意思,啥都不说了,自己体会。

所以也就nfc-mfsetuid.exe这个命令用得比较多了,直接执行它意味着将卡的UID改为01234567,如果想改成其他的,需要加上十六进制的UID作为参数,例如nfc-mfsetuid.exe aabbccdd

感谢

https://firefart.at/post/how-to-crack-mifare-classic-cards/

https://bobylive.com/static/1491

http://www.cnblogs.com/kerker233/p/5735192.html

如果长时间无法加载评论,请对 *.disqus.com 启用代理!