1. 1. 使用Mac进行NFC读写
  2. 2.使用Windows进行读写
  3. 3.手机NFC&手环NFC
    1. 4.一些问题
    2. 5.其他参考:

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/张。

从某宝购入的读卡器

1. 使用Mac进行NFC读写

  • GUI 工具
    现存的针对Mac平台的NFC读写软件较少,我只找到了这两个GUI程序,但是这两个软件都连接不上我的PN532读卡器,遂作罢。查看App Store上的说明看到,这两个工具均不支持PN532,但是支持另一个非常常用的读卡器ACR122U。我手头上没有对应的读卡器,所以这条路走不通了。(以后可以考虑再买一个ACR122U)

    在这里插入图片描述

    • Command Line Tools or 读写API
      考虑使用命令行工具,或者是用对应的API来读写NFC。
      在网上搜索,使用关键词Mac NFC百度搜索,得到的结果都是用iPhone来做的??难道Mac == IPhone了??后来找到了一篇记录: 记Macbook Pro配合FT232使用PN532模块,算是中文互联网上位数不多的经验贴了,跟着这位兄弟一点点搭建好了需要的依赖库。
  • 硬件连接: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
    • 安装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

至此,所有软件已经安装完毕,此时进入终端输入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卡,则可以使用这一个软件。
    • 2.读卡 : 使用该读写软件的玩转NFC,再扫描卡片类型,就可以看到这张卡片的信息来,可以看到UID,为4个字节。这就是我们费劲千辛万苦需要的东西!
      在这里插入图片描述
  • 3.写白卡

    • 准备一张白卡,读白卡,点扇区左边👈的小三角可以保存白卡的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

×

喜欢就点赞,疼爱就打赏