原文: http://www.cnblogs.com/h2zZhou/p/5250710.html
看了網上寫的一些關於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個扇區的數據做一個對比了,看看哪一位變化了,如何變化了。