转】M1卡密钥破解,收藏
M1卡說明及使用proxmark3破解方法
看了網(wǎng)上寫的一些關(guān)于M1卡的文章,多數(shù)有些誤導(dǎo)之嫌。首先談?wù)凪1卡的規(guī)格,M1卡的容量為1KB,好多網(wǎng)上寫8KB,這里其實是有個誤區(qū),應(yīng)該是8K位。1Byte=1B=8位。其實也就是說8k位想到于1KB的容量,也就是說一個4GB的U盤的存儲空間約等于四百萬張m1卡的空間。
? ?? ???雖然空間比較小,但是里面其實學(xué)問很大,我們來看一下M1卡的內(nèi)部結(jié)構(gòu)。M1卡分為16個數(shù)據(jù)存儲區(qū),通常我們稱為“扇區(qū)”,編號是“0”到“15”。每個扇區(qū)又分為4個存儲單元,我們稱為“塊”,在M1卡中數(shù)據(jù)存儲的最小單位就是“塊”。每一塊有16字節(jié)(16B),用來存放數(shù)據(jù)。
就像下圖所示:
?
其中每個data為一個“塊”。這樣我們可以計算一下:16b* 4(塊)*16(扇區(qū))=1024B 就是1K。
第0扇區(qū)的塊0(即絕對地址0塊),它用于存放廠商代碼,已經(jīng)固化,不可更改。
在全扇區(qū)加密時,通常用前三個“塊”(0,1,2號塊)存放數(shù)據(jù),用最后一個”塊“(3號塊)存放密碼。
其中密碼分為A密碼和B密碼:前6個字節(jié)存放A密碼,中間4字節(jié)為控制字段,后6字節(jié)存放B密碼。
例如:
A0 A1 A2 A3 A4 A5 FF 07 80 69 B0 B1 B2 B3 B4 B5
注意這里每個扇區(qū)的密碼都是獨立的,也就是說可以為16個扇區(qū)設(shè)置16個不同的密碼,當(dāng)然也可以使用相同的密碼,但是這樣會大大降低破解的難度。例如上圖中的該扇區(qū)A密碼為空:000000000000,B密碼為:FFFFFFFFFFFF。
對于控制位這里有點門路,我找了很多網(wǎng)上的文章,其中發(fā)現(xiàn)這篇講解得最好:http://www.duoluodeyu.com/2013/835.html
但是注意其中的 字節(jié)7是C1Y,而不要把字節(jié)6、7、8一次當(dāng)成了C1Y C2Y C2Y。注意到這一點對于理解就沒什么難度了。?
每個M1卡都有一個唯一的序列號,我們稱為“UID”,是32位的,也就是4個字節(jié)。
M1卡是典型的高頻卡,工作頻率為13.56MHz,一般調(diào)頻(FM)收音機接收的廣播頻率在87MHz到108MHz之間。猜想:如果高頻卡工作頻率達(dá)到80MHz以上時在讀卡或?qū)懣〞r產(chǎn)生的頻率應(yīng)該能對該頻段收音機產(chǎn)生電磁干擾。
通信速率:106KBPS,也就是說可以在10毫秒的時間內(nèi)完成讀寫內(nèi)容。
工作半徑:100mm。大約在100mm以內(nèi)的距離,可以使用讀卡器對m1卡進(jìn)行操作(一般寫距離要小于讀距離)。
在使用proxmark3對M1卡進(jìn)行破解時 ,我們可以使用hf mf mifare命令去探測基于PRNG的漏洞出現(xiàn)的Key 。
例如:
然后使用hf mf nested 1 0 A FFFFFFFFFFFF??去探測各個扇區(qū)的密碼,例如:
花費幾分鐘后,得到如下的key列表:
根據(jù)這個key列表,按道理使用hf mf dump就可以直接讀取各扇區(qū)的數(shù)據(jù)了,但是這里遇到了點問題,hf mf dump使用默認(rèn)的密碼FFFFFFFFFFFF來讀取各扇區(qū)數(shù)據(jù),而這里只有0扇區(qū)密碼正確,其他的均無法dump,所以我們需要使用其他辦法。
[size=1em]hf mf rdsc 1 a 1866c42fe6a8
來讀取第一扇區(qū)數(shù)據(jù):
同樣的用 hf mf rdsc 2 b 1866c42fe6a8
讀取第二扇區(qū)數(shù)據(jù),這里為什么用B密碼是有原因的(因為控制位設(shè)置的問題 )。
依次讀取16個扇區(qū)即可。(其實在這張卡中,只有前3個扇區(qū)有數(shù)據(jù),后面的扇區(qū)數(shù)據(jù)塊均為空)
這里我們就獲取了全部想要的數(shù)據(jù),在最開始接觸m1卡的時候由于知識的不足,總感覺可以控制的位置是有限的。
這也就是不要已經(jīng)擁有了整個世界還覺得不完美。??
現(xiàn)在就可以去刷卡,然后把16個扇區(qū)的數(shù)據(jù)做一個對比了,看看哪一位變化了,如何變化了。
Mifare1智能洗澡卡破解分析
Mifare Classic card提供1k-4k的容量,我們經(jīng)常見到的是Mifare Classic 1k(S50),也就是所謂的M1卡。M1卡有從0到15共16個扇區(qū),并且每個扇區(qū)都有獨立的密碼,每個扇區(qū)配備了從0到3共4個段,每個段可以保存16字節(jié)的內(nèi)容,反正從0開始數(shù) 就對了(和數(shù)組下標(biāo)為0開始一樣)。
每張M1卡都有一個全球唯一的UID號,這個UID號保存在卡的00扇區(qū)的00段,也稱為廠商段,其中前4個字節(jié)是卡的UID,第5個字節(jié)是卡UID的校驗位,剩下的是廠商數(shù)據(jù)。并且這個段在出廠之前就會被設(shè)置了寫入保護(hù),只能讀取不能修改,當(dāng)然也有例外,有種叫UID卡的特殊卡,UID是沒有設(shè)置保護(hù)的,其實就是廠家不按規(guī)范生產(chǎn)的卡(我們在網(wǎng)上買的空白卡片一般都是這種可以修改UID號的卡)。
今天我們以破解一張洗澡卡為例:
用到的工具
讀卡設(shè)備:ACCR122U一個
空白M1卡片兩張
正常使用洗澡卡一張
上圖:
平臺:windows7
軟件:NFCGUI-PRO.exe
M1卡服務(wù)程序
破解思路:在M1卡的16個扇區(qū)內(nèi)的某一個扇區(qū)內(nèi)的字段中存儲著洗澡卡內(nèi)的信息,例如使用時間、使用次數(shù)、水卡金額等信息,想要修改卡內(nèi)的信息就要將卡片內(nèi)的記錄數(shù)據(jù)導(dǎo)出,每個扇區(qū)第一個字段的16個字節(jié)是扇區(qū)的秘鑰對,我們要是想要導(dǎo)出數(shù)據(jù)就要通過窮舉的方法測試出秘鑰對,只有知道秘鑰對后才可以導(dǎo)出卡片內(nèi)文件(具體原因請百度M1卡工作原理或查看:http://www.hufubo.com/?p=202),幸運的是國內(nèi)大部分的M1卡都是使用的默認(rèn)密碼或者弱密碼(例如 FFFFFFFF? FFFFFFFF),我們可以使用比較傻瓜式的軟件M1卡服務(wù)程序窮舉秘鑰對并導(dǎo)出卡內(nèi)的dump文件(通過破解軟件導(dǎo)出的數(shù)據(jù)文件都為xx.dump格式文件),然后通過一張卡多次消費并導(dǎo)出dump文件來對比不同金額情況下扇區(qū)內(nèi)的信息來核算出具體的金額控制位,然后通過NFCGUI-PRO.exe程序?qū)⑿薷暮玫膁ump文件寫入到空白的M1卡內(nèi)。
具體實施:
聲明:在實施過程中有可能我的步驟不是最簡便和最有效的辦法,但是作為科普入門級的文章,只希望更多的人能理解實施的過程,以更好的去防護(hù)這種方法。
- 先去洗澡卡終端查看卡內(nèi)的余額:
卡內(nèi)余額為26.91元,然后將ACR122u插在機器上,使用M1卡服務(wù)程序破解得出卡內(nèi)的DUMP文件
使用M1卡服務(wù)器程序破解:
破解成功:
由于這種M1卡秘鑰對為弱密碼所以大約幾十秒的時間就會破解成功,dump文件會生成在文件目錄下:
dumpfile 4da2e80e(2015-08-2523_4).dump文件就是生成的破解文件? 可以看到生成的dump文件為1KB大小,但是具體寫入M1卡的時候是需要寫入4KB大小的dump文件的
ps:這些軟件本來是基友Linux開發(fā)的,移植到win平臺上只能生成1kb的dump文件,我們可以使用修復(fù)工具:fixdump將1KB文件修復(fù)為4KB,也可以使用NFCGUI-PRO.exe
這個軟件自帶的修復(fù)功能修復(fù)為4KB文件,我是使用的NFCGUI-PRO.exe
修復(fù),如圖:
打開這個軟件點擊選擇文件-選擇剛才生成的1KB文件-就會提示“是否保存為4K文件格式”—選擇“是”-就是自帶修復(fù)成功
然后關(guān)閉軟件,剛才的1kb的DUMP文件就會自帶修復(fù)為4KB文件了。
通過上面的方法得出三個不同金額的dump文件。
2)通過十六進(jìn)制編輯器進(jìn)行dump文件的對比,找出金額控制位,我使用winhex進(jìn)行編輯dump文件:
因為這兩個文件都是同一張卡片不同金額的dump文件,所以假定有金額的數(shù)據(jù)不同,有刷卡次數(shù)記錄的數(shù)據(jù)不同,刷卡時間的記錄不同,(假定會有這些不同之處,也許只有記錄金額的變化),通過對比兩張卡片,發(fā)現(xiàn)在00000176 和00000192處有不同的數(shù)據(jù)塊
如圖;
余額為26.91:
余額為26.88:
發(fā)現(xiàn)這兩張卡內(nèi)的不同之處在于:
通過十六進(jìn)制轉(zhuǎn)換測試:
Hex(80 0A)=32778
HEX(7F F5)=32757
測試發(fā)現(xiàn)并不是這么簡單的直接轉(zhuǎn)換,于是將 800A 進(jìn)行翻轉(zhuǎn)為 0A80
HEX(0A80)=2688??? 2688符合卡內(nèi)余額為26.88的實際情況。
HEX(0A83)=? 2691?? 2691符合卡內(nèi)月為26.91的實際情況。
可以總結(jié)得出金額位的加密方法為 金額轉(zhuǎn)換十六進(jìn)制后進(jìn)行翻轉(zhuǎn)存儲。
接下來分析 7F F5代表的含義
根據(jù)M1卡了解 金額位置后面會有校驗位數(shù)據(jù),通俗講就是當(dāng)前面金額數(shù)據(jù)變了之后,校驗位會根據(jù)另外的算法去改變值。
一般最簡單的算法都是二進(jìn)制取余后轉(zhuǎn)換為16進(jìn)制再加上金額位的加密方法
計算方法如下:
校驗位7F F5-翻轉(zhuǎn)為F5 7F轉(zhuǎn)換二進(jìn)制為1111010101111111? 二進(jìn)制取余為0000101010000000 轉(zhuǎn)換為十進(jìn)制為:
Hex(0000101010000000)=2688
可以得出金額校驗位的加密方式為將金額轉(zhuǎn)換為二進(jìn)制后取余,取余后的二進(jìn)制轉(zhuǎn)換為16進(jìn)制,將16進(jìn)制翻轉(zhuǎn)后得到的結(jié)果就是金額校驗位的信息
例如金額為26.88—2688–0000101010000000—1111010101111111–F5 7F–7F F5
計算出金額校驗位應(yīng)填7F F5
計算出金額位和金額校驗位的加密方式后可以進(jìn)行金額的修改
修改金額為600元則計算
金額位:600—60000—EA60—60EA
金額校驗位:600—60000—1110101001100000—0001010110011111—159F—9F15
則金額位填:60EA
金額校驗位填:9F15
直接在winhex內(nèi)修改dump文件:
直接保存文件為600.dump,dump金額就修改成功了
3)將文件寫入到空白卡片中
通過NFCGUI-PRO.exe軟件進(jìn)行dump文件寫入:
如圖:
打開NFCGUI-PRO.exe軟件后DUMP和Key文件選擇加載文件600.dump
將ACR122U插入到電腦后將空白卡片放到讀卡器上后選擇寫入文件
寫入成功:
4)測試:
到這里就是M1卡破解的基本步驟,僅作科普文章,請勿做違法事件!
解決方案:
1)將卡片全部更換成CPU卡,CPU卡可以模擬M1卡結(jié)構(gòu),完全代替M1卡,安全性也比邏輯加密的M1卡更安全。
2)采用一卡一密系統(tǒng),一卡一密可以免去升級硬件的麻煩,最大程度保護(hù)IC卡系統(tǒng)。
3)采用滾動碼系統(tǒng),增加效驗,加大破解成本
通過十六進(jìn)制轉(zhuǎn)換測試:
Hex(80 0A)=32778
HEX(7F F5)=32757
測試發(fā)現(xiàn)并不是這么簡單的直接轉(zhuǎn)換,于是將 800A 進(jìn)行翻轉(zhuǎn)為 0A80
HEX(0A80)=2688??? 2688符合卡內(nèi)余額為26.88的實際情況。
HEX(0A83)=? 2691?? 2691符合卡內(nèi)月為26.91的實際情況。
可以總結(jié)得出金額位的加密方法為 金額轉(zhuǎn)換十六進(jìn)制后進(jìn)行翻轉(zhuǎn)存儲。
接下來分析 7F F5代表的含義
根據(jù)M1卡了解 金額位置后面會有校驗位數(shù)據(jù),通俗講就是當(dāng)前面金額數(shù)據(jù)變了之后,校驗位會根據(jù)另外的算法去改變值。
一般最簡單的算法都是二進(jìn)制取余后轉(zhuǎn)換為16進(jìn)制再加上金額位的加密方法
計算方法如下:
校驗位7F F5-翻轉(zhuǎn)為F5 7F轉(zhuǎn)換二進(jìn)制為1111010101111111? 二進(jìn)制取余為0000101010000000 轉(zhuǎn)換為十進(jìn)制為:
Hex(0000101010000000)=2688
可以得出金額校驗位的加密方式為將金額轉(zhuǎn)換為二進(jìn)制后取余,取余后的二進(jìn)制轉(zhuǎn)換為16進(jìn)制,將16進(jìn)制翻轉(zhuǎn)后得到的結(jié)果就是金額校驗位的信息
例如金額為26.88—2688–0000101010000000—1111010101111111–F5 7F–7F F5
計算出金額校驗位應(yīng)填7F F5
計算出金額位和金額校驗位的加密方式后可以進(jìn)行金額的修改
修改金額為600元則計算
金額位:600—60000—EA60—60EA
金額校驗位:600—60000—1110101001100000—0001010110011111—159F—9F15
則金額位填:60EA
金額校驗位填:9F15
直接在winhex內(nèi)修改dump文件:
直接保存文件為600.dump,dump金額就修改成功了
3)將文件寫入到空白卡片中
通過NFCGUI-PRO.exe軟件進(jìn)行dump文件寫入:
如圖:
打開NFCGUI-PRO.exe軟件后DUMP和Key文件選擇加載文件600.dump
將ACR122U插入到電腦后將空白卡片放到讀卡器上后選擇寫入文件
寫入成功:
4)測試:
到這里就是M1卡破解的基本步驟,僅作科普文章,請勿做違法事件!
解決方案:
1)將卡片全部更換成CPU卡,CPU卡可以模擬M1卡結(jié)構(gòu),完全代替M1卡,安全性也比邏輯加密的M1卡更安全。
2)采用一卡一密系統(tǒng),一卡一密可以免去升級硬件的麻煩,最大程度保護(hù)IC卡系統(tǒng)。
3)采用滾動碼系統(tǒng),增加效驗,加大破解成本
總結(jié)
以上是生活随笔為你收集整理的转】M1卡密钥破解,收藏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1小时场景生活圈来了!苏宁双十一引领零售
- 下一篇: EndNote x8基础使用教程(一)