使用NFC模拟校园卡门禁功能 【Mac, Windows, Android, 手环】
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】
考慮使用命令行工具,或者是用對應的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
- 官網 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
- 安裝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卡,則可以使用這一個軟件。
-
2.讀卡 : 使用該讀寫軟件的玩轉NFC,再掃描卡片類型,就可以看到這張卡片的信息來,可以看到UID,為4個字節。這就是我們費勁千辛萬苦需要的東西!
-
3.寫白卡
-
準備一張白卡,讀白卡,點扇區左邊👈的小三角可以保存白卡的dump文件。
-
編輯dump文件:使用二進制文件編輯器,只要可以編輯二進制文件就可以。這里使用增值資料/輔助工具/dump編輯軟件.exe 更改前4個字節為UID,第5個字節為校驗碼(即UID四個字節的異或值,可以在這里計算)。然后保存即可
-
寫入白卡,將剛才編輯的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.其他參考:
- 詳談Mifare Classic 1K卡
- IC卡復制初嘗試
- Linux搭建nfc測試環境
- linux下pn532板子測試學校水卡
總結
以上是生活随笔為你收集整理的使用NFC模拟校园卡门禁功能 【Mac, Windows, Android, 手环】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html+css实现了简单的注册页面
- 下一篇: 【人脸识别】基于主成分分析PCA算法人脸