欢迎来到重庆监控安装公司官方网站!
您的位置: 重庆监控安装公司 - 安防百科 - Mifare 门禁卡复制

Mifare 门禁卡复制

来源:安防百科 / 时间: 2024-05-23

背景知识

市场情况

现在中国市面上主要有两种门禁卡:
一种叫ID卡,是早期的非接触式电子标签,工作频段在 125kHz,芯片中只记录了一个ID号,不可以存储任何数据卡,无需任何权限即可读取。由于太容易复制已经基本退出市场。
另一种叫 MIFARE Classic,又叫 M1 卡,是 NXP 半导体公司的产品,属于IC卡的一种,由于成本低廉也是目前在中国市场上使用最广泛的门禁卡技术,使用场景包括且不限于门禁卡,还有饭卡、水卡等。工作频段在 13.56MHz,符合 ISO/IEC 14443 Type A (国内二代身份证是 Type B)标准,有数据存储空间并可反复擦写数据,数据读写都需要密码验证。

安全问题

从 1994 年就面世的 MIFARE Classic 已经算的上是一个古老的产品,在 2008 年就已经被宣告能用普通 PC 在几分钟之内通过与读卡器通信破解出密钥,2009 年更是公布了仅需卡片的离线破解。NXP 官方也已经建议使用更安全的 MIFARE Plus 和 MIFARE DESFire。有兴趣的朋友可以看看 Black Hat 上的 slides:Hacking Mifare Classic Cards。

基本结构

MIFARE Classic 一般使用的是 MIFARE Classic 1K, 拥有 1024 bytes 的存储空间,划分为 16 个 sector。每个 sector 再划分为 4 个 block,其中的最后一个 block 用于设置A、B两个密钥和控制访问权限的 Access Bits。每张卡的第一个 block 用于存储厂商数据,包括卡片 ID(官方名称叫 UID,注意不要和后文的 UID 卡弄混)和类型信息,出厂之后就不允许修改。Wiki 上有直观的布局图:MiFare Byte Layout.png。

准备操作

确认门禁卡类型

MIFARE Classic (EV1) (MF1S50)

硬件准备

NFC 模块和 USB 转 TTL 模块

如果你和我一样是玩票性质的话,可以购买PN532 NFC RFID 模块 V3 和 「CH340 USB 转 TTL 模块」,两个加起来大概 30 多元,也是本文所使用的硬件。如果想省事可以选 ACR122U 这种一体式的成品,价格 100 元左右,卖家会提供配套软件。当然还有一步到位的选择 Proxmark3,支持高低频卡,可通过配套软件实现破解、嗅探、模拟、复制等功能,被誉为 RFID 界的瑞士军刀,300 元左右就能入手。(上述标注价格均为无法确认质量的淘宝一般售价)

UID 卡

不同的门禁验证的内容也不一样。

  1. 对于只验证卡片 ID 的门禁(最不安全,对于已 root 的 Android 机能通过修改系统配置文件来模拟卡片 ID),需要一个叫 UID 卡的国产的神奇卡片。这种产品是生产厂家并没有按照规范来固化卡片 ID,从而在出厂后还能重复修改卡片 ID,每张不到 1 元。
  2. 对于只验证卡片内容的门禁,使用 NFC 模块配套赠送的白卡就行了。
  3. 对于同时验证卡片 ID 和内容的门禁,也是使用 UID 卡片。
  4. 另外还有少数其它的门禁,可能需要用 CUID/FUID 卡才行,每张大概 1-2 元,本文不涵盖这种情况

购买备注

  1. 大多数商家出售的 PN532 是无焊接的,有的商家会提供免费焊接服务,请注意咨询。如果你买不到焊接好的,也可以自己买套焊具享受动手乐趣。当然了,你还可以选择使用包括双手在内的辅助方式稳定连接🙂。
  2. 购买 USB 转 TTL 模块时注意避免 PL 2303 HX 型号,该型号的早期版本 Rev A 由于山寨问题已经被官方在新版本驱动中封杀,无法在 Win10 系统中自动安装驱动使用。如果你不幸购买到了此(山寨)版本,请使用1.5.0 (2011-10-21) 版本的驱动包或者询问卖家索取。
  3. 由于一般无法事先确认门禁类型,建议在购买 NFC 模块时一并购买 UID/CUID/FUID 卡。如果买 NFC 模块的店铺恰好没有 UID 卡,也可以先测试复制卡片内容失败后,再单独购买(淘宝上有 0.8 元包邮的 UID 卡🤔)。

软件准备

操作步骤

我原本打算用 Linux 来操作的,上网一搜发现 WSL 绝赞的支持映射串口。所以本文以 PN532 + Windows 10 + WSL + Kali Linux为主,其他操作环境请注意变通。

连接 NFC 模块

用附带的杜邦线连接 NFC 模块和 USB 转 TTL 模块/线。注意不要接错了,否则通电后可能会烧毁芯片。

PN532USB 转 TTL 模块USB 转 TTL 线
GNDGND黑色
VCC5.0V红色
TXD/SDARXD白色
RXD/SCLTXD绿色
COM3
/etc/nfc/libnfc.conf
allow_autoscan = false
device.name = "PN532"
device.connstring = "pn532_uart:/dev/ttyS3" #Linux 下为 /dev/ttyUSB0
nfc-scan-device -vsudo
nfc-scan-device uses libnfc 1.7.1
1 NFC device(s) found:
- pn532_uart:/dev/ttyS3:
    pn532_uart:/dev/ttyS3
chip: PN532 v1.6
initator mode modulations: ISO/IEC 14443A (106 kbps), FeliCa (424 kbps, 212 kbps), ISO/IEC 14443-4B (106 kbps), Innovision Jewel (106 kbps), D.E.P. (424 kbps, 212 kbps, 106 kbps)
target mode modulations: ISO/IEC 14443A (106 kbps), FeliCa (424 kbps, 212 kbps), D.E.P. (424 kbps, 212 kbps, 106 kbps)

Dump 卡片

卡片基本信息

nfc-poll
nfc-poll uses libnfc 1.7.1
NFC reader: pn532_uart:/dev/ttyS3 opened
NFC device will poll during 30000 ms (20 pollings of 300 ms for 5 modulations)
ISO/IEC 14443A (106 kbps) target:
    ATQA (SENS_RES): 00  04
       UID (NFCID1): 01  23  45  67
      SAK (SEL_RES): 08
nfc_initiator_target_is_present: Target Released
Waiting for card removing...done.
01 23 45 6700 0408

无密码卡

nfc-mfclassic r a dump.mfd
NFC reader: pn532_uart:/dev/ttyS3 opened
Found MIFARE Classic card:
ISO/IEC 14443A (106 kbps) target:
    ATQA (SENS_RES): 00  04
       UID (NFCID1): 01  23  45  67
      SAK (SEL_RES): 08
Guessing size: seems to be a 1024-byte card
Reading out 64 blocks |................................................................|
Done, 64 of 64 blocks read.
Writing data to file: dump.mfd ...Done.
xxd dump.mfd
00000040: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000050: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000060: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000070: ffff ffff ffff ff07 8069 0000 0000 0000  .........i......

部分加密卡

mfoc -O dump.mfd
Auth with all sectors succeeded, dumping keys to a file!

完全加密卡

如果门禁卡是全加密卡,上面使用 mfoc 就会有失败提示:

No sector encrypted with the default key has been found, exiting..
mfcuk -C -R 0:A -s 250 -S 250
INFO: block 3 recovered KEY: 123456789ABC
mfoc -k 123456789ABC -O dump.mfd

写入卡片

nfc-mfclassic W a dump.mfdWw

小米手环3 模拟加密门禁

大致原理,先用将包含卡片 ID 的 block 0 写入到空白 UID 卡上,给手环复制。再写入加密卡片内容的其它部分到手环。
但需要注意的是,小米手环只模拟了 block 0 的卡号部分,而厂商代码是固定值且不可修改,所以碰到检查卡号和厂商的门禁就没用了。
占坑,等有手环了再说。 就当作课后习题留给大家自行尝试吧。

相关产品

在线客服
微信联系
客服
扫码加微信(手机同号)
电话咨询
返回顶部