2014-12-20

這篇文章主要是講 linux下的對IC卡(M1卡)的無線hack技術。
設備:硬件方面,PC機一台,PN532開發板一套。
軟件方面:mfoc,mfcuk。
本文用不到mfcuk的,我還是給大家科普下吧。
原理這些我不講啦,講應用吧。
mfoc,知道卡的一個密碼,以超短時間破解其他所有密碼。
mfcuk,通過隨機數,暴力破解密碼(別認為是隨機數充當密碼),一般30分鍾內能破解,不能破解的話說明你運氣不夠,換個時間
忍不住還是說說M1卡吧。
M1卡,一般國內喜歡用1K卡,1K卡里面有16個扇區,每個扇區有4個塊,每個塊有16個字節。
第0塊,第1塊,第2塊都是數據區域。
第3塊是keyA,控制段,keyB的存儲區域,分別是6個字節,4個字節,6個字節。
特別的,第0個扇區的第0個塊是比較特殊的,里面是只讀的,不可改的,存儲的是廠家的一些信息。
(有些卡就是通過這個區域產生隨機密碼然后讓普通的M1空白卡不能復制,因為要復制只能復制除第0扇區第0塊的東西啊。除非有神一般的第0扇區,第0塊可寫的M1卡,樓主有一張哦。)
因為這個無線破解樓主已經在很長一段時間搞了,所以一些軟件的編譯截圖我沒有,在下面先把代碼貼出來吧。
1.因為樓主用的PC和PN532開發板要相連,而PN532用的是UART的串口.
所以我用了一個USB轉UART的板子,把兩個東西連起來了。
然后裝些必要的驅動。
安裝:libpcsclite-dev 和 libusb-dev
apt-get install libpcsclite-dev libusb-dev
安裝:libccid 和 pcscd
apt-get install libusb-0.1-4 libpcsclite1 libccid pcscd
到googlecode里面下載libnfc-1.6.0-rc1.tar.gz
然后一條條執行下面命令,搞個sh也可以。
下面這些指令不懂的話補補基礎吧。
tar xzvf libnfc-1.6.0-rc1.tar.gz
-
cd libnfc-1.6.0-rc1/
-
autoreconf -vis
-
./configure --with-drivers=pn532_uart --enable-serial-autoprobe
-
make clean
-
make
-
make install
-
ldconfig
-
然后執行下 libnfc 里面的 nfc-list 試試看(要把卡放在設備上面哦。)
看上面,成功安裝好了。
下面裝mfoc-0.10.3.
先到googlecode下個源碼吧,然后執行如下命令。
tar xzvf mfoc-0.10.3.tar.gz
-
cd mfoc-0.10.3
-
./configure
-
make
看看成功沒,如下圖:
下面開始破解.執行命令
-
./mfoc -K -O test.file
-
看見沒,上面一部分的密碼已經 FOUND了,因為卡里面有一些沒用到的區域用了默認密碼.
這個卡的一個默認密碼是 ffffffffffff
(所以大家也可用 ./mfoc -k ffffffffffff -O test.file 這個命令,感興趣的朋友可以google一下).
很多卡都有這個默認密碼.
下面在用探針探索中,很快就有結果了.
結果出來了
有了結果我們可以怎樣?
有兩種行徑.第一,復制卡;第二,修改卡.
復制卡是最簡單的。
因為一般的 M1卡都不檢索第0扇區第0塊的數據.所以復制可行.
如果你有一張10元的水卡,校園卡,工卡,或者門禁卡其他七七八八的卡(反正國內就那樣都基本是1K的M1卡).
你復制到另一張卡里面可以,你自己把數據導出來(有密碼不就可以導出了嗎...).
用完10塊,再把數據寫進卡里面就可以了...
當然這種是最沒有技術含量的...我們是要數據分析的.
所以我們來到了第二種方式:數據分析,修改數據.
如果你們玩過單擊游戲,用過修改器,作弊器,你們就會知道,我們分析數據大概的原理,就是看看哪里變了,刷刷卡,看看哪里變了.就大概可以了.
只能說大概,變的數據不一定是我們的有用數據啊,因為做卡的廠家哪會這么笨啊,肯定會加點冗余數據來校驗的啊.
當然一般這些校驗的數據都是通過有用的數據的加、與、或、非、異或形成的,CRC貌似比較少.
然后有些是固定冗余,不用理.
對於上面那個圖.我發現了數據段,那個有密碼的那個扇區的控制塊我就不說了。
那個控制塊的4個字節說明了整個扇區有keyA控制.
要理解更多東西,大家還是要懂M1的原理的啊.可以看下M1的文檔哈.
上面那個圖的紅色畫圈圈的區域是數據段
我們可以通過修改數據段改變卡的金額值.
樓主確實是成功了....從10幾塊數據變成了99塊.
當然,一切都是測試,不要干壞事哈.(樓主用的什么卡大家就不要猜了.)
下面是數據的導入:
命令是
nfc-mfclassic w a test.file test.file
注意,前面那個 test.file 是代表你的含有密鑰的文件,可以認為是 mfoc 導出來的文件.
后面那個test.file 是你要寫入的文件.
兩個文件是一樣的,不過代表的意義不同.
下面是導入成功的圖片.(get20是我修改后的導出來的文件,相當於text.file修改后的文件)
破解到這里結束吧.
下面給個安裝mfcuk的方法吧.
tar xzvf mfcuk
-
cd mfcuk
-
autoreconf -is
-
./configure
-
make
ps:make前修改src/Makefile,將LIBNFC_LIBS的值復制到LIBS后面
忘了提醒大家,那個googlecode因為是開源的,所以很多 mfoc 和 mfcuk 代碼都不完全正確。
我記得最新版的mfoc和mfcuk(建立在libnfc 1.7 平台的)好像是在某個c文件里面漏了個&的,就是指針出錯了,導致編譯不成功.