COVID-19期间,我们学校实行通行证制度,只有具有通行证的同学的卡才可以自由进出校园,他而没有通行证的人下人出校只能是一种奢望。在这种无理取闹的制度之下,我试想通过NFC模拟出那些可以自由进出的同学的校园卡,从而实现自由进出校园。其实这个想法已经有人做了,使用手机自带的nfc模拟校园卡,是可以实现门禁进出功能的。经过实际测试,一下方案是可行的:
- 使用带NFC功能手机模拟
- NFC读卡器 + 白卡
- 带NFC功能手机+手环 or NFC 读卡器+白卡+手环
首先第一种,使用带nfc功能的手机模拟,这个是最简单的,只需要打开手机的钱包/卡包app然后模拟门禁卡读取需要复制的卡即可,这样每次进学校大门的时候直接刷手机进来就行。
然而对于手机不带NFC功能的手机,譬如我的就是,就比较难搞了。此外,使用手机NFC模拟不具有可拓展性,一台手机只能当作一张卡片使用,如果需要多张卡片就需要多个手机了。因此我们的解决方案是通过复制白卡来实现制作门禁卡,白卡复制不存在可拓展性这个问题。首先自己购买白卡,然后先读校园卡,再将其写入白卡。我们知道每一张卡都有唯一的ID,这个ID在门禁识别的时候用到。接下里本文的所有操作遵循1.读卡获取卡片ID ;2.将ID写入白卡。通过这两步,就得到了和原来的卡ID一模一样的卡,这个卡就可以拿来刷进校门了。
根据读卡,写卡的媒介不同,可以分为三种平台,win,mac,和手机&手环这些。根据卡片的类型不同,可以分为UID,CUID,M1,CPU卡。
卡片类型介绍:
- M1卡:全称Mifare classic 1K,普通IC卡,0扇区不可修改,其他扇区可以反复擦写。通常我们使用的门禁卡、电梯卡都是M1卡。M1卡是NXP(恩智浦半导体)公司研发的IC卡,执行标准是ISO/IEC14443 Type A,读写频率是13.56MHz。目前大多数手机厂商使用的NFC芯片都是NXP,另一部分则是BRCM(博通)方案,均执行同一标准,这是手机读写M1卡的技术基础。
- UID卡:普通复制卡,可以反复擦写所有扇区,门禁有防火墙则失效。
- CUID:升级复制卡,可以反复擦写所有扇区,可以穿透大部分防火墙。【我们的白卡是购买此种类型的卡】
- CPU卡:有操作系统,可存储数据,也有自己的ID号,CPU卡发一串数据给设备,设备与SAM卡进行运算,设备再发一串数据回CPU卡确认,然后进行交易或身份认证;跟M1卡的区别在于一个算法在空中,一个算法在设备里面;无论是卡商,设备商,运营商,都不知道其中的算法,所以这个系统的安全性会高很多。【校园卡等大多数具有金融功能的卡属于此种类型】
目前,大多数校园卡为CPU卡,也就是加密级别最高的卡。好在,金融扇区和门禁ID扇区是分开的,这使得我们可以通过复制卡片的ID来实现门禁功能。
根据不同平台,其复制校园卡的难度排序是
Mac > Win > 手机写卡> 手机模拟,手环模拟
平台
- Win
- Mac OS X
- Android&手环
卡片类型
- UID
- CUID
- M1
- CPU
读卡器
- PN532 【for mac and windows】
该读卡器从某宝购入,附赠两个这种白卡,一共花费¥63。又额外买了10张CUID白卡,长下面这个样子,约¥1/张。
- PN532 【for mac and windows】
1. 使用Mac进行NFC读写
【GUI 工具】
现存的针对Mac平台的NFC读写软件较少,我只找到了这两个GUI程序,但是这两个软件都连接不上我的PN532读卡器,遂作罢。查看App Store上的说明看到,这两个工具均不支持PN532,但是支持另一个非常常用的读卡器ACR122U。我手头上没有对应的读卡器,所以这条路走不通了。(以后可以考虑再买一个ACR122U)- 【Command Line Tools or 读写API】
在网上搜索,使用关键词Mac NFC百度搜索,得到的结果都是用iPhone来做的??难道Mac == IPhone了??后来找到了一篇记录: 记Macbook Pro配合FT232使用PN532模块,算是中文互联网上位数不多的经验贴了,跟着这位兄弟一点点搭建好了需要的依赖库。考虑使用命令行工具,或者是用对应的API来读写NFC。
- 【Command Line Tools or 读写API】
硬件连接:MBP2019 雷电3 接口-> type-c 转USB3.0拓展坞->USB连接PN532
驱动Driver ?
软件需求: libusb -> libnfc ,mfoc ,mfcuk
- 安装Libusb
- 官网 https://libusb.info/,GitHub:https://github.com/libusb/libusb
- 安装方法一: 从官网或者是GitHub下载源代码->解压->进入包目录 ->依次执行
$ ./configure ->$ make ->$ make install
- 即
$ ./configure&&make&&make install
- 即
- 安装方法二:Homebrew安装
- 直接
$ brew install libusb
- 刚开始的时候执行这个命令报错:
Error: libusb: undefined method `license' brew install
在这里找到了解决方案,出现这个原因说明当前brew版本太老了,只需要更新一下,brew update -v
,执行**两次**这个命令,然后再brew install libusb
就成功了。
- 直接
- 注1: 这里推荐使用homebrew安装,接下来的几个也是推荐brew。
- 注二:一个问题,我第一次使用的是源代码编译安装,最后
$ make install
也都成功了。但是执行下一步的时候提示libusb.h头文件找不到,header not found.第二遍安装使用的是$ brew install libusb安装,就没有这个问题出现,可见,使用brew可以轻松的安装配置各种包,不需要自己对各种环境配置揪心。所以强烈建议使用homebrew安装。
- 安装Libnfc
- 官网 http://www.libnfc.org/,GitHub :https://github.com/nfc-tools/libnfc
- 安装方法同样两种,一样的操作
- 安装方法一:官网或者GitHub下载源代码,解压,进入目录,依次执行
$ ./configure ->$ make ->$ make install
- 安装方法二:
$ brew install libnfc
- 安装mfoc
- GitHub:https://github.com/nfc-tools/mfoc
- 安装方法一:参见GitHub readme,
$ autoreconf -is
[注:这里需要安装autoreconf,方法$brew install automake
]$./configure
$ make && sudo make install
- 执行
$./configure
时报错如下:PKG_CHECK_MODULES(libnfc, libnfc >= $LIBNFC_REQUIRED_VERSION, , AC_MSG_ERROR([libnfc >= $LIBNFC_REQUIRED_VERSION is mandatory.]))
,没有找到解决办法,这里有一个解释。最后采用了homebrew安装。 - 安装方法二:homebrew安装
$ brew install mfoc
- 安装mfcuk
- 放弃源代码安装,直接homebrew安装
$ brew install mfcuk
- 放弃源代码安装,直接homebrew安装
- 安装Libusb
至此,所有软件已经安装完毕,此时进入终端输入nfc-list,即可查看当前的卡片信息
可以看到这张卡的SAK是20,这意味着我这张卡是一张CPU卡,我们需要的东西即是这个UID。
使用nfc-mfcassic 命令可以读写卡。但是在后续的写卡过程中遇到两个严重的问题:
nfc写入不进去
不知怎么地,写入命令可以正常执行,没有报错,但是却没有写入。卡片的ID还是之前的。不知为何。大端小端问题
可以后续对dump文件进行编辑的过程中,可能由于大小端问题,编辑的文件总是不对。这个dump文件就是这张卡的1K字节的二进制文件,前4个字节是UID,第5个字节是校验字节,其值是UID四个字节的异或值。我们只需要修改这5个字节,其他的不需要改动。2.使用Windows进行读写
使用Windows相对较为简单,相关的经验贴也有很多,出现问题大多数也都能找得到解决方案。首先是软件,读卡器软件链接 :https://pan.baidu.com/s/1DQVDdLNUirx33kr18j7EEw 提取码:0rkw,这个是我在淘宝店买读卡器赠送的。这个文件里面包含了很多细节,里面描述的很清楚,在这里就不再赘述了,按照里面的来一般不会有问题。
使用步骤:- 1.准备工作
- 硬件连接: PN352直接插上USB口即可
- 软件准备
- 安装驱动 : 参照文件
- 安装读写工具 NFC reader
这里我建议使用教程与软件/增值资料/PN532工具V3.0_crack.exe
这一个来安装,使用NFC REA 3.0
这一个读取不到CPU卡的UID,因此后续无法使用,如果你的卡是普通的M1卡,则可以使用这一个软件。
- 安装读写工具 NFC reader
- 安装驱动 : 参照文件
- 2.读卡 : 使用该读写软件的玩转NFC,再扫描卡片类型,就可以看到这张卡片的信息来,可以看到UID,为4个字节。这就是我们费劲千辛万苦需要的东西!
- 1.准备工作
3.写白卡
- 准备一张白卡,读白卡,点扇区左边👈的小三角可以保存白卡的dump文件。
- 准备一张白卡,读白卡,点扇区左边👈的小三角可以保存白卡的dump文件。
* 编辑dump文件:使用二进制文件编辑器,只要可以编辑二进制文件就可以。这里使用``增值资料/辅助工具/dump编辑软件.exe`` 更改前4个字节为UID,第5个字节为校验码(即UID四个字节的异或值,可以在[这里](http://www.ip33.com/bcc.html)计算)。然后保存即可
* 写入白卡,将刚才编辑的dump文件写入(使用写M1卡方式)即可,大功告成!
(为了防止写入错误,写入之后,再读取一下卡片,看看前5个字节的内容对不对。)
3.手机NFC&手环NFC
手机读写白卡可以使用NFC simulator。具体使用方法见:
教你用Android NFC手机制作门禁卡
如何用小米NFC手机模拟加密卡(的部分功能)
手机模拟成功之后,可以再用手环模拟手机,这样就可以来。
也可以使用,手环模拟写好的白卡,也可以模拟出来。
参考:小米手环4玩转自定义表盘/开门锁/模拟加密卡
目前学校已经实施进出校园报备制,因此此种方法已经退出来历史舞台。
4.一些问题
- UID/CUID卡如何复制?
这两种类型的卡片是很容易,可以直接读取所有扇区内容,然后将其写入到另外一张白卡即可。不需要额外编辑dump文件。 - M1卡如何复制?
- 写入是UID还是CUID还是M1?
据我测试,使用三种写入方式得到的卡片均可正常刷开门禁。 - 金融消费能用吗?
显然是不行的【CPU】。maybe possible【M1卡】【暴力破解】 - 校验码一定要计算准确哦,如果计算错误,写入到卡片之后,这张卡就报废了。无法再读写。
- 图书馆能用吗?经测试,在我们学校图书馆是刷不进去的。
- 白卡太明显了?这种纯白色的卡还是套上卡套吧,收敛一点。
5.其他参考:
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 rat_racer@qq.com