手機(jī)上全功能NFC的好處,當(dāng)然就是可以模擬各種門禁卡和飯卡了。小米錢包自帶的NFC卡模擬功能和ROM結(jié)合,使用時(shí)更是雙擊喚起且隨意切換,十分好用。這里記錄了幾天來摸索的經(jīng)驗(yàn),供其他正在研究的同學(xué)參考。
1. 準(zhǔn)備工作
- PN532模塊。淘寶上30塊買焊接好的帶USB延長線的即可。
- 白卡1張。用來做手機(jī)卡模擬的橋梁
- 全功能NFC手機(jī)一臺(tái)。小米系列手機(jī)是首選,其他品牌手機(jī)未測試。
2. 模擬非加密卡的流程
模擬非加密卡很簡單,直接打開小米錢包,選擇門卡->模擬門卡。根據(jù)系統(tǒng)指示直接將非加密卡放在手機(jī)NFC感應(yīng)區(qū),系統(tǒng)會(huì)自動(dòng)識(shí)別并生成模擬卡。這里需要注意一點(diǎn),有時(shí)手機(jī)讀的可能卡信息可能不完整,最好在電腦上用PN532模塊再讀一邊模擬出來的卡,如果數(shù)據(jù)一致那就沒有問題;否則還需要?jiǎng)h除此卡后重新模擬。
3. 模擬加密卡的一般流程
小米錢包的門卡模擬,只支持非加密卡,如果是加密卡就不能直接模擬,此時(shí)就需要用到PN532的強(qiáng)大解密功能了。玩NFC的朋友都知道,NFC的1類卡有非加密、部分加密和全加密這幾種。部分加密是在某幾個(gè)扇區(qū)使用了非公開的密鑰,而全部加密是所有扇區(qū)都使用了私有的密鑰。解密的原理網(wǎng)上很多,這里只介紹具體操作流程:
- 用PN532解密部分加密的NFC卡,保存為A.dump文件
- 將A.dump文件中的0扇區(qū)0行,即此卡的ID數(shù)據(jù)復(fù)制到一張空白dump文件的同樣區(qū)域,保存為B.dump文件
- 將B.dump文件寫入一張物理白卡中
- 使用手機(jī)模擬此物理白卡,得到模擬卡b;使用小米錢包的門卡功能,使用PN532讀取模擬卡b的信息,如果能夠讀取,說明模擬有效,否則請(qǐng)重新模擬,以確保正確。
- 將A.dump文件寫入模擬卡b中,更新后的模擬卡a即為原來的部分加密NFC卡片。用PN532同樣驗(yàn)證一遍更新后的卡片數(shù)據(jù),如果和原來A.dump一致,那么證明模擬成功。
一般使用PN532上位機(jī)即可有效破解部分加密的卡片,對(duì)于采取了AES非對(duì)稱加固的卡片,則需要借助已知的密鑰,才能順利讀取卡片內(nèi)容。
4. 模擬非對(duì)稱加密卡的方式
發(fā)現(xiàn)手頭上的公司門卡雖然是部分加密,但是竟然不能被PN532上位機(jī)破解,搜了很多資料,都是基于經(jīng)典的MFOC/MFCUK的解決方案,都沒有效果。最后只能翻墻看看國外網(wǎng)友怎么說,果然在github上找到了一個(gè)叫做miLazyCracker的方案,可完成傻瓜式暴力破解。
4.1 安裝miLazyCracker
- 下載地址:https://github.com/nfc-tools/miLazyCracker
- CraptEV1文件可自行下載 度盤鏈接 提取碼: 7vjj
- Linux上安裝libnfc驅(qū)動(dòng),參考見 這篇簡書
- Linux上安裝miLazyCracker,就一行命令:./miLazyCrackerFreshInstall.sh
4.2 使用miLazyCracker
安裝完畢后,創(chuàng)建一個(gè)臨時(shí)目錄,既可以開始暴力破解了
mkdir mydumps
cd mydumps
miLazyCracker
4.3 卡模擬
miLazyCracker解密后,即可獲得加密扇區(qū)的密鑰和完整的dump文件。導(dǎo)入到PN532上位機(jī)中,然后再讀取卡片,即可順利獲取完整卡片數(shù)據(jù)。然后再按第三章節(jié)的方式,使用過度卡來完成模擬操作。最后記得再使用PN532讀一下手機(jī)模擬出來的卡片,以確認(rèn)正確哦。
寫在最后
NFC模擬幫助我減輕了日常出行所需攜帶的卡片數(shù)量,配合智能門鎖,我甚至可以不需要帶鑰匙和門卡出門了。以上所述的PN532以及miLazyCracker都只是工具,如果用于提升生活出行便利目的,那可能是工具制作者希望看到的;絕不可用于任何非法或者灰色產(chǎn)業(yè)鏈,否則就會(huì)收到道德的譴責(zé)和法律的制裁。
這里強(qiáng)烈推薦在實(shí)際操作之前閱讀 miLazyCracker 作者Kevin Larson寫的ppt(RECON-BRX-2017-Analyzing_Mifare_Classic_Cracking),上面度盤目錄也有。他制作這個(gè)工具是為了說明1類的NFC卡片即使使用AES加密也很不安全,所以應(yīng)該盡量使用更高級(jí)的卡片。不過似乎國內(nèi)還是普遍使用了1類卡片,畢竟成本考慮,一張1類卡才幾毛錢;而且配合云端數(shù)據(jù)庫的讀寫,數(shù)據(jù)本體還是安全的;卡片更多是用來確認(rèn)用戶的身份。所以歸根到底,產(chǎn)品方案上具體使用哪一類技術(shù),恐怕更重要的是出于它的經(jīng)濟(jì)性考慮。
附注:M1類NFC卡片的0扇區(qū)格式:前4個(gè)字節(jié)為卡片UID,模擬時(shí)只看這4位;第5位是校驗(yàn)位;第6位開始到第16位是廠商數(shù)據(jù)。不知道是不是巧合,我手頭的幾張卡片第6-8位基本都是 08 04 00,只有一張是 88 04 00。