druserx/lector
GitHub: druserx/lector
Lector 是一款基于 libnfc 的 MIFARE Classic NFC 卡片安全分析工具,通过默认密钥字典暴力破解和完整数据转储来测试弱密钥卡片的安全性。
Stars: 0 | Forks: 0
# Lector
**NFC 卡片分析与转储工具**,专注于 MIFARE Classic,使用 C 语言和 libnfc 编写。
该名称源自拉丁语 *lector* —— 即“阅读者”。开发此工具的目的是对使用弱密钥或出厂默认密钥的 MIFARE Classic 门禁系统、闸机和交通卡进行安全测试。
```
_ _
| | ___ ___| |_ ___ _ __
| |/ _ \/ __| __/ _ \| '__|
| | __/ (__| || (_) | |
|_|\___|\___|\__\___/|_|
nfc card analyzer | v0.2.7
```
## 功能
- 通过 SAK/ATQA **自动检测**卡片类型(MIFARE Classic 1K/4K、Mini、Ultralight、DESFire、SmartMX)
- 使用实地收集的 64 个默认密钥库进行**密钥暴力破解**(NXP 出厂默认、MAD、NDEF、交通系统)
- MIFARE Classic 所有扇区的**完整转储** —— 独立处理 Key A 和 Key B
- **MAD 分析**(MIFARE Application Directory),识别已知的 AID
- 用于 Text Records、URI Records 和 Smart Posters 的 **NDEF 解析器**(NFC Forum RTD)
- **识别已知密钥** —— 识别出默认密钥时会显示其来源
- 格式化的 **Hex 转储**,带有内联的 ASCII dump
- 通过 libnfc 支持多种读卡器:ACR122U、PN532 (USB/UART)、SCL3711
## 环境要求
```
# Debian/Ubuntu
sudo apt install libnfc-dev libnfc-bin
# Arch
sudo pacman -S libnfc
# 支持的 hardware (libnfc)
# - ACR122U(最常见,运行良好)
# - 通过 USB 或 UART 连接的 PN532
# - SCL3711
# - 任何带有通用 CCID driver 的读卡器
```
## 编译
```
git clone https://github.com/druserx/lector
cd lector
make
```
## 使用说明
```
# 基本分析 — 检测卡片并尝试 dump
sudo ./lector
# verbose:显示每个扇区的 hex dump
sudo ./lector -v
# 将 dump 保存到文件
sudo ./lector -o dump_cartao.bin
# 在 dump 之后尝试 parse NDEF
sudo ./lector -n
# 强制类型(如果 SAK 被篡改则很有用)
sudo ./lector -1 # forca MIFARE Classic 1K
sudo ./lector -4 # forca MIFARE Classic 4K
```
## 输出示例
```
[ CARTAO DETECTADO ]
─────────────────────────────────────────
Tipo : MIFARE Classic 1K
UID : A3:B2:C1:D0 (4 bytes)
ATQA : 00 04
SAK : 08
[*] iniciando dump — 16 setores, 64 chaves no dicionario
setor 00 [trailer: bloco 3] KeyA:ok KeyB:ok
setor 01 [trailer: bloco 7] KeyA:ok KeyB:?
setor 02 [trailer: bloco 11] KeyA:ok KeyB:?
...
setor 15 [trailer: bloco 63] KeyA:? KeyB:?
[ MAD - MIFARE Application Directory ]
─────────────────────────────────────────
GPB versao : 1
InfoByte : 0x01 (publisher sector: 1)
Setores com aplicacao:
setor 01 AID: 0003 NFC Forum
setor 02 AID: E001 NFC NDEF v2
[ RESUMO DO DUMP ]
═════════════════════════════════════════
Tipo : MIFARE Classic 1K
UID : A3:B2:C1:D0
ATQA : 00 04
SAK : 08
Setores : 16 total / 14 lidos / 2 protegidos
Setor Key A Key B Status
───── ────────────── ────────────── ──────
00 A0A1A2A3A4A5 ???????????? lido (4/4 blocos) [MAD Key A (NXP)]
01 D3F7D3F7D3F7 ???????????? lido (4/4 blocos) [NDEF Key A]
...
14 ???????????? ???????????? protegido
15 ???????????? ???????????? protegido
```
## 项目结构
```
lector/
├── src/
│ ├── main.c # CLI, fluxo principal
│ ├── nfc_scan.c # init do leitor, polling, identificacao do tipo
│ ├── mifare.c # dump MIFARE Classic, brute-force, MAD
│ ├── ndef.c # parser NDEF (Text, URI, Smart Poster)
│ ├── chaves.c # banco de 64 chaves default coletadas em campo
│ └── relatorio.c # hex dump, tabela de setores, salvar em arquivo
├── include/
│ └── *.h
└── Makefile
```
## 密钥库
`src/chaves.c` 中的密钥库包含:
- NXP 标准密钥(出厂默认、MAD Key A/B、NDEF)
- 搜索到的公共交通系统密钥
- 常见的门禁控制密钥
- 实地测试中收集的密钥变体
自动识别功能会显示已知密钥的来源(例如:`[MAD Key A (NXP)]`、`[ASCII: 123456]`)。
## 局限性
- MIFARE DESFire:仅能检测,不支持转储(使用 ISO 7816-4 APDUs,留待未来开发)
- MIFARE Ultralight:检测正常,页面转储功能正在开发中
- 未实现 Nested attack 和 PRNG attack —— 在字典中未找到的密钥将显示为 `????????????`
- 需要 root 权限或配置 udev 权限才能访问读卡器
## 法律免责声明
本工具仅供在您拥有或获得明确授权的设备上进行**授权测试**。未经授权在第三方系统上使用本工具是非法行为。
## 参考
- [libnfc — NFC 库](https://github.com/nfc-tools/libnfc)
- [AN10833 — NXP MIFARE 类型识别](https://www.nxp.com/docs/en/application-note/AN10833.pdf)
- [AN10787 — MIFARE 应用目录](https://www.nxp.com/docs/en/application-note/AN10787.pdf)
- [NFC Forum NDEF 规范](https://nfc-forum.org/specs/)
## 许可证
MIT
标签:C, libnfc, MIFARE Classic, NFC, StruQ, 客户端加密, 物联网安全, 硬件安全