目录
- Mifare Classic 基础知识
- 它是什么?
- 工作原理:扇区、块、数据结构
- 安全机制:密钥与访问条件
- 准备工作:硬件与软件
- 硬件:你需要什么读卡器?
- 软件:工具包推荐与安装
- 核心工具实战篇
- mfoc (Mifare Classic Offline Cracker) - 密钥破解
- nfc-list & nfc-mfclassic - 卡片信息读取与写入
- libnfc-utils - 基础交互
- 完整工作流程示例
- 读取一张未知卡片的全部数据
- 克隆一张 Mifare Classic 卡片
- 安全性与法律声明
- 重要警告
- 合法用途
- 进阶学习资源
Mifare Classic 基础知识
它是什么?
Mifare Classic 是由恩智浦半导体生产的一系列非接触式智能卡芯片,工作在 13.56MHz 的频率下,它被广泛用于门禁卡、交通卡、会员卡、校园卡等,它的主要特点是成本低,但也因此存在严重的安全漏洞。

工作原理:扇区、块、数据结构
Mifare Classic 卡片的数据存储结构是理解操作的基础。
- 扇区: 卡片被划分为 16 个扇区,编号从 0 到 15。
- 块: 每个扇区由多个块组成。
- 扇区 0-15 (标准扇区): 每个扇区有 4 个块(块 0, 1, 2, 3)。
- 数据块: 块 0, 1, 2 通常是数据块,每个块可以存储 16 字节(128 位)的数据。
- 块 3 (密钥块/ trailer block): 每个扇区的最后一个块(块 3)比较特殊,不存储用户数据,而是存储该扇区的两个密钥(KeyA 和 KeyB)和访问条件位。
数据块结构
一个标准的 16 字节数据块结构如下:
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| Byte 0 | Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | Byte 7 | ... | Byte 15 |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
你可以将这 16 个字节自由地用于存储信息,如 ID 号、权限、积分等。
密钥与访问条件
- 密钥: 每个扇区都有两个独立的 6 字节(48 位)的密钥,分别是
KeyA和KeyB,在对扇区进行任何读写操作前,必须先验证对应的密钥成功。 - 默认密钥: 很多卡片出厂时使用默认密钥,最常见的是
FFFFFFFFFFFF(全F) 或000000000000(全0),这是破解的突破口。 - 访问条件: 位于每个扇区的块 3,它定义了在不同密钥验证成功后,对数据块(0, 1, 2)的读写权限,这个机制非常复杂,是 Mifare Classic 安全性的核心,也是其弱点所在。
准备工作:硬件与软件
硬件:你需要什么读卡器?
你需要一个能够支持 Mifare Classic 的 USB 读卡器,市面上主要有两种:

- ACR122U: 最经典、最推荐的选择,它基于
PCSC标准,兼容性极佳,支持 Windows, Linux, macOS,使用libnfc或PCSC工具链都可以驱动。 - PN532: 基于
libnfc的读卡器,通常集成在小巧的开发板或模块上(如 Adafruit 的产品),功能强大,但配置可能稍复杂。
推荐: 初学者直接购买 ACR122U 即可。
软件:工具包推荐与安装
我们将使用功能最强大、最主流的开源工具包 libnfc,它包含了一系列命令行工具,是 Mifare Classic 研究的瑞士军刀。
环境:Linux (以 Ubuntu/Debian 为例)
- 安装依赖和
libnfc工具包:sudo apt-get update sudo apt-get install pcscd pcsc-tools libnfc-bin libnfc-dev
- 检查读卡器是否被识别:
插入 ACR122U 读卡器,然后运行:
pcsc_scan
如果能看到你的读卡器信息(如 ACS ACR122U PICC Interface 00),说明硬件连接正常。 再运行:
(图片来源网络,侵删)nfc-list
如果能列出读卡器型号(如 NFC device: ACS ACR122U PICC Interface 00 [ACS ACR122U USB-NFC Reader]),说明软件驱动正常。
核心工具实战篇
假设你已经成功连接了读卡器,并且有一张 Mifare Classic 卡片在读卡器范围内。
mfoc (Mifare Classic Offline Cracker) - 密钥破解
mfoc 的作用是非离线暴力破解卡片密钥,它利用了 Mifare Classic 的一个漏洞(Nested Attack),可以在几分钟内破解出卡片上所有扇区的密钥,而无需知道任何一个密钥。
安装:
mfoc 通常包含在 libnfc-tools 或 mfoc 的独立包中。
sudo apt-get install mfoc
使用方法:
- 在终端运行
mfoc:mfoc
- 将卡片放在读卡器上,
mfoc会自动开始尝试破解。 - 成功后,它会生成一个文件,默认名为
keys-7-8-9-10-11-12-13-14-15.bin,这个文件包含了破解出的所有密钥。
输出解读: 你会看到类似这样的输出:
|-----------------------------------------|
| Trying nested attack with key FF FF FF FF FF FF... (found 0 keys)
| Trying nested attack with key A0 A1 A2 A3 A4 A5... (found 1 keys)
|-----------------------------------------|
| Found 16 keys on 16 sectors!
| Keys written to file: keys-7-8-9-10-11-12-13-14-15.bin
这表示它找到了 16 个扇区的密钥,并保存到了 keys-7-8-9-10-11-12-13-14-15.bin 文件中。
nfc-list & nfc-mfclassic - 卡片信息读取与写入
这是最核心的读写工具。
读取卡片信息
nfc-mfclassic r a.dump
r: read (读取) 模式。a.dump: 输出的文件名,这个文件将包含卡片的全部数据,包括所有扇区的所有块。- 如果提示 "Error: No default keys found",说明默认密钥不工作,这时就需要先用
mfoc破解出密钥。
使用密钥读取卡片信息
如果你有了一个密钥文件(keys.bin),可以这样读取:
nfc-mfclassic r a.dump -k keys.bin
-k keys.bin: 指定密钥文件。nfc-mfclassic会自动用文件中的密钥去尝试读取每个扇区。
写入数据 写入操作非常危险,一旦写错,可能导致卡片永久损坏或数据丢失。强烈建议先完整读取一张卡,修改备份文件,然后写入备份文件进行测试。
假设你已经有了 a.dump 文件,并且想修改它:
- 用十六进制编辑器修改
a.dump文件:- 在 Linux 上可以使用
bvi,hexedit或hexeditor。 sudo apt-get install hexedithexedit a.dump- 你会看到 16 进制的数据,每个扇区有 4 个块,每块 32 个字符(16字节),修改时请务必小心。
- 在 Linux 上可以使用
- 将修改后的数据写入卡片:
nfc-mfclassic w a.dump
w: write (写入) 模式。- 同样,如果需要密钥,请使用
-k参数:nfc-mfclassic w a.dump -k keys.bin
libnfc-utils - 基础交互
这个工具包里还有一些其他有用的工具。
nfc-list
我们已经用过,用于列出连接的读卡器。
nfc-poll
轮询卡片信息,可以快速查看卡片的 UID、类型等基本信息。
nfc-poll
nfc-mfgen
Mifare Classic 通用工具,可以快速生成 UID 或修改块数据,比 nfc-mfclassic 更简单,但功能也较少,适合快速测试。
完整工作流程示例
读取一张未知卡片的全部数据
- 连接硬件: 插入 ACR122U 读卡器。
- 检查环境:
nfc-list
- 尝试用默认密钥读取:
nfc-mfclassic r a.dump
- 情况A(成功): 直接生成了
a.dump文件,跳到第5步。 - 情况B(失败): 提示
No default keys found,进入第4步。
- 情况A(成功): 直接生成了
- 使用 mfoc 破解密钥:
mfoc
等待破解完成,得到
keys-7-8-9-10-11-12-13-14-15.bin文件(重命名为keys.bin更方便)。 - 使用破解的密钥读取数据:
nfc-mfclassic r a.dump -k keys.bin
a.dump文件包含了这张卡片的完整数据镜像,你可以用hexedit查看或修改它。
克隆一张 Mifare Classic 卡片
克隆的本质是将源卡片的全部数据(包括密钥)完整地复制到目标卡片上。目标卡片必须是空白或可被覆盖的 Mifare Classic 卡片。
- 读取源卡片:
按照场景一的方法,读取源卡片的数据,得到
source.dump文件。mfoc -O source.dump # 直接输出到source.dump # 或者 nfc-mfclassic r source.dump -k keys.bin
- 准备目标卡片: 找一张空白的 Mifare Classic 卡片(或一张你愿意牺牲的卡片)。
- 将数据写入目标卡片:
nfc-mfclassic w source.dump
- 系统会提示你将目标卡片放到读卡器上。
- 写入完成后,目标卡片就成为了一张与源卡片完全一样的克隆卡。
安全性与法律声明
重要警告
- 高风险操作: 写入 Mifare Classic 卡片有很高的风险,错误的写入操作(如扇区不匹配、密钥错误)可能会导致卡片被“锁死”,永久无法再被读取或写入。
- 数据丢失: 不要尝试写入一张正在使用中的、重要的卡片(如你的门禁卡、交通卡),除非你 100% 确定你在做什么并且有备用方案。
- 技术学习: 本教程旨在用于教育和技术研究,帮助你理解 RFID 技术的工作原理和安全机制。
合法用途
- 数据备份与恢复: 为自己的卡片创建一个数据备份,以防卡片丢失或损坏。
- 定制开发: 开发自己的项目,如制作游戏道具卡、自定义会员卡等。
- 安全研究: 分析和测试 Mifare Classic 的安全漏洞,以促进其被更安全的替代品(如 Mifare DESFire)所取代。
非法用途
- 未经授权的克隆: 克隆他人的门禁卡、交通卡以获取非法访问权限。
- 数据窃取: 窃取他人卡片中的敏感信息。
任何用于非法目的的行为都将承担严重的法律后果,请务必遵守当地法律法规,仅在授权范围内进行技术探索。
进阶学习资源
- libnfc 官方文档: https://github.com/nfc-tools/libnfc
- mfoc 项目主页: https://github.com/nfc-tools/mfoc
- 经典论文: "Dark Side of Security by Obscurity: An Analysis of the Mifare Classic Crypto System" - 这篇论文详细揭露了 Mifare Classic 的所有漏洞,是进阶必读。
- YouTube 视频: 搜索 "Mifare Classic Hacking" 或 "Mifare Cloning",有很多视频教程可以直观地展示操作过程。
希望这份详细的教程能帮助你顺利入门 Mifare Classic 的世界!祝你学习愉快!
