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