mfterm使用教程

mfterm(MIFARE Terminal)是 Kali Linux 中一款专注于 MIFARE 系列智能卡的交互式终端工具,核心功能是通过命令行交互模式,实现对 MIFARE 卡片(以 MIFARE Classic 1K/4K 为主)的精细化操作,包括卡片检测、扇区/块数据读写、密钥管理、卡片数据备份与恢复等,适用于 RFID/NFC 安全测试、智能卡逆向分析、合法卡片数据维护等场景(需对测试卡片拥有合法所有权或明确授权)。

其核心特性与适用范围如下:

  • 交互式操作:提供类似 Linux Terminal 的命令行界面,支持实时输入指令(如读扇区、写密钥、备份数据),操作灵活,便于实时调试与数据验证。
  • 多密钥管理:支持从外部密钥文件(-k 参数)加载自定义密钥库,可同时管理多个扇区的 Key A/Key B,适配不同加密配置的卡片。
  • 卡片数据读写:可直接读取指定扇区/数据块的内容,也可在获取授权(正确密钥)后写入数据,支持十六进制与 ASCII 格式数据交互。
  • 数据备份与恢复:支持加载已有的卡片 dump 文件(-t 参数)到内存模拟卡片,或从物理卡片导出数据生成 dump 文件,便于数据迁移与备份。
  • 字典辅助功能:可加载密钥字典文件(-d 参数),在未知密钥时通过字典尝试匹配,辅助破解低安全级别卡片的扇区授权。

适用卡片类型:主要支持 MIFARE Classic 1K/4K 卡片,部分兼容 MIFARE Ultralight 等轻量级卡片;不支持 MIFARE DESFire 等高级加密卡片(需专用工具)。

二、命令参数解析(表格形式)

1. 全局选项参数

参数(短格式/长格式) 英文说明 中文解析 使用示例
-h / --help Show this help message 显示工具帮助信息(包含所有参数用法与基础指令说明) mfterm -h(输出参数列表与帮助文本)
-v / --version Display version information 显示工具版本号(确认当前版本是否支持目标功能) mfterm -v(输出示例:mfterm 0.1.2)
-t / --tag=tagfile Load a tag from the specified file 从指定的卡片 dump 文件(tagfile,如 .mfd/.dmp 格式)加载卡片数据到内存,可模拟物理卡片进行操作(无需连接真实卡片) mfterm -t mycard.mfd(加载 mycard.mfd 的 dump 数据)
-k / --keys=keyfile Load keys from the specified file 从指定的密钥文件(keyfile)加载自定义密钥库,文件格式为"每行一个 12 位十六进制密钥",加载后可直接用于扇区授权 mfterm -k my_keys.txt(加载 my_keys.txt 中的所有密钥)
-d / --dict=dictfile Load dictionary from the specified file 从指定的字典文件(dictfile)加载密钥字典,用于未知密钥场景下的扇区授权尝试(自动匹配字典中的密钥) mfterm -d key_dict.txt(加载 key_dict.txt 作为密钥字典)

2. mfterm 交互式核心指令(进入终端后使用)

启动 mfterm 后会进入交互式终端(提示符为 mfterm>),以下为常用指令(需结合实际卡片操作场景使用):

交互式指令 英文说明 中文解析 使用示例
connect Connect to the MIFARE reader and detect the card 连接 RFID/NFC 读卡器并检测物理卡片(需提前插入读卡器与卡片) mfterm> connect(连接成功后输出卡片 UID、类型等信息)
info Display information about the connected card 显示已连接卡片的详细信息(如 UID、卡片类型、扇区数量、块大小) mfterm> info(输出示例:UID: 12345678, Type: MIFARE Classic 1K, Sectors: 16)
load_keys <keyfile> Load keys from the specified file into the key store 在交互式终端中加载指定密钥文件(补充初始 -k 参数未加载的密钥) mfterm> load_keys extra_keys.txt(加载 extra_keys.txt 到密钥库)
auth <sector> <key_type> <key> Authenticate to the specified sector with the given key type (A/B) and key 使用指定密钥(key,12 位 hex)对目标扇区(sector)进行授权,key_type 为 A(Key A)或 B(Key B) mfterm> auth 0 A FFFFFFFFFFFF(用 Key A FFFFFFFFFFFF 授权扇区 0)
read <sector> [block] Read data from the specified sector (or specific block in the sector) 读取指定扇区(sector)的所有数据块,或指定扇区内的单个块(block,可选参数),输出十六进制数据 mfterm> read 1(读取扇区 1 所有块);mfterm> read 0 1(读取扇区 0 的块 1)
write <sector> <block> <data> Write hexadecimal data to the specified block in the sector (requires prior authentication) 向指定扇区(sector)的指定块(block)写入十六进制数据(data,需为 16 字节,即 32 位 hex),需先通过 auth 授权 mfterm> write 0 1 00112233445566778899AABBCCDDEEFF(向扇区 0 块 1 写入数据)
dump <output_file> Dump the entire card data to the specified file (supports .mfd/.dmp format) 将整个卡片的所有扇区数据与密钥导出为 dump 文件(如 .mfd),需先对所有扇区授权(或拥有默认密钥) mfterm> dump full_card.mfd(导出完整卡片数据到 full_card.mfd)
restore <input_file> Restore card data from the specified dump file (requires prior authentication for all sectors) 从指定 dump 文件(input_file)向物理卡片恢复数据(覆盖原有数据),需先对所有扇区授权 mfterm> restore backup.mfd(从 backup.mfd 恢复数据到卡片)
dict_attack <sector> <key_type> Attempt to authenticate to the sector using the loaded dictionary (requires prior -d or load_dict) 使用已加载的密钥字典(-d 或 load_dict 加载)对指定扇区(sector)进行字典攻击,尝试匹配 key_type(A/B)的密钥 mfterm> dict_attack 2 B(用字典尝试匹配扇区 2 的 Key B)
exit / quit Exit the mfterm interactive terminal 退出 mfterm 交互式终端 mfterm> exit(或 mfterm> quit)

三、mfterm 完整使用教程(全场景覆盖)

1. 前提准备:硬件与环境确认

使用 mfterm 前需确保硬件兼容与软件环境正常,避免因设备或权限问题导致操作失败:

1.1 必备硬件

  • RFID/NFC 读卡器:支持 MIFARE Classic 协议的 USB 读卡器(如 ACR122U、PN532 模块,需在 Kali 中正常识别);
  • MIFARE 卡片:待操作的 MIFARE Classic 1K/4K 卡片(需合法拥有或获得授权);
  • 密钥文件/字典文件(可选):若已知卡片密钥,提前准备密钥文件(每行 12 位 hex 密钥);未知密钥则准备密钥字典文件。

1.2 软件环境验证

复制代码
# 步骤 1:安装 mfterm(Kali 默认预装,未安装则执行)
sudo apt update && sudo apt install mfterm -y

# 步骤 2:验证读卡器连接(以 ACR122U 为例)
sudo pcsc_scan
# 输出应包含"ACR122U PICC Interface",且提示"Waiting for a card...",说明读卡器正常识别

# 步骤 3:验证工具可用性
mfterm -v
# 输出工具版本号(如"mfterm 0.1.2"),说明安装成功

1.3 关键注意事项

  • 所有操作需 sudo 权限(读卡器访问与卡片写入依赖 root 级权限);
  • 写入数据前需确保已通过 auth 指令完成扇区授权,否则会提示"authentication failed";
  • 字典攻击(dict_attack)仅适用于低安全级别卡片,复杂密钥字典可能导致耗时过长(建议优先使用已知密钥)。

2. 场景 1:基础卡片检测与信息查看(无密钥操作)

场景描述:首次接触目标卡片,需先连接读卡器、检测卡片是否正常,查看卡片基本信息(UID、类型、扇区数量),无需密钥(基础信息读取无需授权)。

复制代码
# 步骤 1:启动 mfterm 交互式终端(无初始参数,仅基础操作)
sudo mfterm

# 步骤 2:连接读卡器与卡片
mfterm> connect
# 成功输出示例:
# [INFO] Connected to reader: ACR122U PICC Interface
# [INFO] Detected MIFARE Classic 1K card
# [INFO] Card UID: 12 34 56 78
# 失败提示处理:若提示"no card found",检查卡片是否紧贴读卡器,或读卡器是否被占用(执行 sudo systemctl stop pcscd 关闭占用进程)

# 步骤 3:查看卡片详细信息
mfterm> info
# 输出示例:
# Card Information:
# - UID: 12345678
# - Type: MIFARE Classic 1K
# - Sectors: 16(1K 卡片默认 16 扇区,4K 为 40 扇区)
# - Blocks per Sector: 4(每个扇区含 4 个块,每块 16 字节)
# - Total Blocks: 64
# - Total Size: 1024 bytes(1K)

# 步骤 4:退出终端(完成基础信息查看)
mfterm> exit

3. 场景 2:已知密钥的扇区数据读写(核心操作)

场景描述:已知目标卡片扇区 0 的 Key A 为"FFFFFFFFFFFF",需对该扇区进行授权,读取扇区数据并向指定块写入自定义数据(如测试数据"00112233445566778899AABBCCDDEEFF")。

复制代码
# 步骤 1:启动 mfterm 并加载密钥文件(若密钥已知,也可后续交互式加载)
# 方式 1:启动时通过 -k 加载密钥文件(推荐,提前准备 my_keys.txt,含 FFFFFFFFFFFF)
sudo mfterm -k my_keys.txt

# 方式 2:交互式加载密钥文件(启动后执行)
sudo mfterm
mfterm> load_keys my_keys.txt
# 加载成功提示:[INFO] Loaded 1 keys from my_keys.txt

# 步骤 2:连接卡片并授权扇区 0
mfterm> connect(成功检测卡片后)
mfterm> auth 0 A FFFFFFFFFFFF
# 授权成功提示:[SUCCESS] Authenticated to sector 0 with Key A
# 授权失败处理:若提示"invalid key",检查密钥是否正确、key_type 是否为 A/B 对应

# 步骤 3:读取扇区 0 的数据(所有块)
mfterm> read 0
# 输出示例(扇区 0 含 4 个块,每块 16 字节 hex 数据):
# Sector 0, Block 0: 1234567890ABCDEF0123456789ABCDEF(UID 相关数据)
# Sector 0, Block 1: 00000000000000000000000000000000(空数据块)
# Sector 0, Block 2: 00000000000000000000000000000000(空数据块)
# Sector 0, Block 3: FFFFFFFFFFFF078069FFFFFFFFFFFF(控制块:Key A + 权限位 + Key B)

# 步骤 4:向扇区 0 的块 1 写入数据(需 16 字节 hex 数据,即 32 位字符)
mfterm> write 0 1 00112233445566778899AABBCCDDEEFF
# 写入成功提示:[SUCCESS] Written 16 bytes to sector 0, block 1

# 步骤 5:验证写入结果(重新读取块 1)
mfterm> read 0 1
# 输出应显示:Sector 0, Block 1: 00112233445566778899AABBCCDDEEFF(与写入数据一致)

# 步骤 6:退出终端
mfterm> exit

4. 场景 3:卡片完整数据备份(dump 导出)与恢复

场景描述:需对目标卡片进行完整数据备份(生成 .mfd 文件,防止数据丢失),后续可通过该文件恢复数据到其他兼容卡片(需合法授权)。假设已知所有扇区均使用默认密钥"FFFFFFFFFFFF"(Key A)。

复制代码
# 步骤 1:启动 mfterm 并加载默认密钥文件
# 准备默认密钥文件(default_keys.txt),包含常用弱密钥
echo -e "FFFFFFFFFFFF\nA0A1A2A3A4A5\nD3F7D3F7D3F7" > default_keys.txt
sudo mfterm -k default_keys.txt

# 步骤 2:连接卡片并批量授权所有扇区(以 1K 卡片 16 扇区为例)
mfterm> connect
# 循环授权 0-15 扇区(Key A,默认密钥)
mfterm> for i in {0..15}; do auth $i A FFFFFFFFFFFF; done
# 授权成功会逐行输出"[SUCCESS] Authenticated to sector X with Key A";失败扇区需单独处理(如更换密钥)

# 步骤 3:导出完整卡片数据到 dump 文件
mfterm> dump card_backup.mfd
# 导出成功提示:[SUCCESS] Dumped 1024 bytes to card_backup.mfd
# 验证文件:ls -l card_backup.mfd(1K 卡片对应 1024 字节,4K 对应 4096 字节)

# 步骤 4:(可选)向新卡片恢复数据(需新卡片与原卡片类型一致)
# 1. 移除原卡片,插入新卡片
mfterm> disconnect  # 断开原卡片连接(部分版本支持,无则直接更换卡片)
# 2. 连接新卡片并授权所有扇区(同步骤 2)
mfterm> connect(检测新卡片)
mfterm> for i in {0..15}; do auth $i A FFFFFFFFFFFF; done
# 3. 从 dump 文件恢复数据
mfterm> restore card_backup.mfd
# 恢复成功提示:[SUCCESS] Restored 1024 bytes from card_backup.mfd
# 验证:读取新卡片扇区数据,确认与原卡片一致(如 mfterm> read 0 1)

# 步骤 5:退出终端
mfterm> exit

5. 场景 4:未知密钥的扇区字典攻击(辅助破解)

场景描述:未知目标卡片扇区 2 的密钥,但有包含常见弱密钥的字典文件(key_dict.txt),需通过 mfterm 的字典攻击功能尝试匹配密钥,获取扇区授权。

复制代码
# 步骤 1:准备密钥字典文件(key_dict.txt)
# 包含常见 MIFARE 弱密钥(可从开源库获取扩展字典)
echo -e "FFFFFFFFFFFF\nA0A1A2A3A4A5\nA1B2C3D4E5F6\nD3F7D3F7D3F7\n000000000000" > key_dict.txt

# 步骤 2:启动 mfterm 并加载字典文件
sudo mfterm -d key_dict.txt

# 步骤 3:连接卡片并执行字典攻击(针对扇区 2 的 Key A)
mfterm> connect
# 执行字典攻击:尝试用字典中的密钥匹配扇区 2 的 Key A
mfterm> dict_attack 2 A
# 攻击过程日志:
# [INFO] Starting dictionary attack on sector 2, Key A
# [TRY] Key: FFFFFFFFFFFF... [FAILED]
# [TRY] Key: A0A1A2A3A4A5... [SUCCESS]
# [SUCCESS] Found valid Key A for sector 2: A0A1A2A3A4A5

# 步骤 4:使用破解的密钥授权并读取扇区数据
mfterm> auth 2 A A0A1A2A3A4A5(用破解的密钥授权)
mfterm> read 2(读取扇区 2 数据)
# 输出扇区 2 的所有块数据,完成授权与读取

# 步骤 5:(可选)保存破解的密钥到文件
# 在终端外执行(新终端),或退出后记录:
echo "Sector 2 Key A: A0A1A2A3A4A5" >> cracked_keys.txt

# 步骤 6:退出终端
mfterm> exit

6. 场景 5:加载内存卡片(模拟操作,无物理卡片)

场景描述:无物理卡片时,需加载已有的卡片 dump 文件(如 test_card.mfd)到内存,模拟物理卡片进行指令测试(如练习 read/write 操作,或验证 dump 文件完整性)。

复制代码
# 步骤 1:启动 mfterm 并加载内存卡片(-t 参数指定 dump 文件)
sudo mfterm -t test_card.mfd

# 步骤 2:查看内存卡片信息(无需连接物理读卡器)
mfterm> info
# 输出示例(与物理卡片 info 格式一致):
# Card Information:
# - UID: 87654321
# - Type: MIFARE Classic 1K
# - Sectors: 16
# - Total Size: 1024 bytes
# 说明:内存卡片已成功加载,可模拟所有物理卡片操作

# 步骤 3:模拟扇区授权与数据读写(使用 dump 文件中的密钥)
# 假设 dump 文件中扇区 1 的 Key A 为"D3F7D3F7D3F7"
mfterm> auth 1 A D3F7D3F7D3F7
mfterm> read 1(读取内存卡片扇区 1 数据)
mfterm> write 1 2 112233445566778899AABBCCDDEEFF(写入数据到内存卡片)

# 步骤 4:(可选)导出修改后的内存卡片数据
mfterm> dump modified_test_card.mfd
# 导出修改后的 dump 文件,可用于后续物理卡片恢复

# 步骤 5:退出终端
mfterm> exit

四、常见问题与解决方案

常见问题 可能原因 解决方案
"connect: no reader found"(连接时无读卡器) 1. 读卡器未插入或未被系统识别;2. 读卡器驱动未安装;3. 其他进程占用读卡器 1. 重新插拔读卡器,执行 lsusb 确认设备存在(如 ACR122U 显示"072f:2200");2. 安装 libnfc 驱动(sudo apt install libnfc-bin);3. 关闭占用进程:sudo systemctl stop pcscd
"auth: authentication failed"(授权失败) 1. 密钥错误;2. 密钥类型错误(A/B 混淆);3. 扇区权限配置禁止该密钥授权 1. 核对密钥是否正确(如重新加载密钥文件);2. 尝试切换密钥类型(如 auth 0 B FFFFFFFFFFFF);3. 查看扇区控制块权限(需先获取其他密钥授权)
"write: permission denied"(写入权限拒绝) 1. 未完成扇区授权;2. 扇区控制块配置为"只读";3. 写入数据长度错误(非 16 字节) 1. 先执行 auth 指令完成授权;2. 读取控制块(如 read 0 3)确认权限位(需修改权限需 Key B 授权);3. 确保写入数据为 32 位 hex 字符(16 字节)
"dict_attack: no dictionary loaded"(字典攻击无字典) 1. 未通过 -d 参数或 load_dict 加载字典文件;2. 字典文件路径错误或无读取权限 1. 启动时加 -d key_dict.txt,或交互式执行 load_dict key_dict.txt;2. 确认字典文件路径正确(如 /root/key_dict.txt),赋予权限:chmod 644 key_dict.txt
"restore: card type mismatch"(恢复时卡片类型不匹配) 1. 目标卡片类型与 dump 文件不一致(如 dump 为 1K,目标为 4K);2. dump 文件损坏或格式错误 1. 使用 info 确认目标卡片类型,确保与 dump 文件一致;2. 重新生成 dump 文件(避免恢复损坏文件)

五、注意事项与安全规范

  • 法律边界 :仅可对 合法拥有或获得明确授权 的 MIFARE 卡片使用 mfterm,未经授权的卡片破解、数据修改或克隆(如门禁卡、交通卡)涉嫌违反《刑法》《数据安全法》,需承担法律责任(如非法控制计算机信息系统罪)。
  • 数据安全
    • 备份的 dump 文件包含卡片完整数据与密钥,需加密存储(如 gpg -c card_backup.mfd),避免泄露导致卡片被非法克隆;
    • 写入数据前务必备份原数据,避免误操作导致卡片数据损坏(无法恢复)。
  • 硬件风险
    • 频繁对同一扇区执行 write 操作,可能导致卡片物理损坏(MIFARE 卡片有写入次数限制,通常为 10 万次以上,但需避免无意义重复写入);
    • 部分廉价读卡器可能存在协议兼容性问题,写入数据时可能导致卡片锁死(需重启读卡器或重新上电恢复)。
  • 工具局限性
    • 不支持 MIFARE DESFire、NTAG 21x 等非 Classic 系列卡片,此类卡片需使用专用工具(如 nfc-tools、Proxmark3);
    • 字典攻击仅对弱密钥有效,对随机强密钥(如 12 位随机 hex 字符)几乎无效,需结合其他破解工具(如 mfcuk、mfkey32)。
  • 版本更新 :Kali 仓库中的 mfterm 版本可能较旧,若遇到功能缺失或兼容性问题,可从源码编译最新版(参考官方仓库:https://github.com/nfc-tools/mfterm)。
相关推荐
上海云盾-小余2 小时前
黑产入侵链路拆解:从打点踩点到内网横移的完整防御思路
网络·安全·web安全
默|笙2 小时前
【Linux】进程信号(4)_信号捕捉_内核态与用户态
linux·运维·服务器
supersolon2 小时前
PVE9安装32位爱快路由(ikuai)
linux·运维·网络
深圳市恒讯科技2 小时前
OpenClaw 2026安全指南
运维·服务器·安全
123过去2 小时前
nfc-mfclassic使用教程
linux·网络·测试工具·安全
虎头金猫2 小时前
自建 GitLab 没公网?用内网穿透技术,远程开发协作超丝滑
运维·服务器·网络·开源·gitlab·开源软件·开源协议
高工智能汽车2 小时前
一体化 SoC 时代,性能与安全的双向奔赴——华山 A2000 “3L” 安全架构解析
安全·安全架构
天选硬件打工人2 小时前
第二十九篇:【硬件工程师筑基系列 6-2】样板上电前全检查与安全上电流程 | 避免炸板的核心防线
单片机·嵌入式硬件·安全·硬件架构·硬件工程·射频工程
一个人旅程~5 小时前
Linux系统如何分区更合适?
linux·经验分享·电脑