當前位置:
首頁 > 新聞 > 使用信用卡磁條讀取器讀取酒店鑰匙卡信息

使用信用卡磁條讀取器讀取酒店鑰匙卡信息

作為一個極客,你是不是有過這樣的疑問,為什麼我們所購買的廉價磁條讀取器除了能讀取信用卡或借記卡的信息外,其他磁條的信息,比如酒店鑰匙卡的信息都讀不出來?其原因很可能是讀取器太過於廉價,只需要更好的讀取器便能解決這一問題。不過我沒有這麼做,而是繼續在廉價讀取器上下功夫,看看能不能破解這一問題。為此,我特意選擇了一個便宜的磁條讀卡器,試圖找到一種讀取酒店鑰匙卡上的原始數據的方法。

測試用的磁條讀卡器的基本信息

我在2017年以11.85英鎊購買了以下讀卡器:

該讀卡器會通過USB連接,連接後作為鍵盤輸入裝置被檢測到。如果你通過該讀卡器來刷信用卡或借記卡,那文本編輯器就像得到輸入指令一樣,將顯示來自磁條的相應數據。如果你當時沒有打開文本編輯器,那將看不到磁條上的任何信息。

測試證明,我買的讀卡器在Windows和Linux下都能正常工作,但僅適用於讀取信用卡或借記卡的信息。當我刷酒店鑰匙卡時,根本看不到任何數據。

為什麼不使用更好的讀取器?

我本可以找一個更好的磁條讀取器,比如專門針對酒店磁條的讀取器,但這會破壞我的一些解決問題的能力。

我用的是一台MSR605X磁卡讀寫器。MSR605是USB介面123全軌道高抗磁卡寫卡器,集低抗和高抗磁卡的讀寫功能於一體,可對磁卡進行磁條信息的編碼和讀取,對於磁條信息讀寫均一次刷卡完成,具有讀、寫雙重校驗功能,性能穩定可靠,並且兼容性好,有良好的通用性。可廣泛用於金融、郵電、交通、海關等各個領域。

產品特點:

1.可同時讀寫多個磁軌(第1、2、3磁軌),讀寫狀態有指示燈和蜂鳴器提示。

2.手動刷卡,支持高低速劃卡。

3.程序軟體Windows 98 / XP或Vista / Windows 7 / /我Windows 8 32位或64位。

4.讀/寫磁條卡符合ISO格式

主要技術指標:

1.拉卡速度:10 ~ 120cm/s

2.讀寫標準:ISO7810/7811

3.可讀寫矯頑力範圍:300-4000 Oe的磁卡

4.卡片厚度:0.76-1.2MM

5.記錄密度(字元):磁軌:210BPI(76個字元);

第二磁軌:75BPI(低密37個字元)/210BPI(高密104個字元);

第三磁軌:210BPI(104個字元)

6.輸出介面:USB

7.磁頭壽命:> 80萬次

8.電源:外部開關電源,輸入:100 - 240伏交流電,輸出:9 vdc 2 a

9.工作環境:溫度-10℃~60℃,濕度 10% ~85%RH

10.重讀寫率:讀卡

11.尺寸:212×64×63mm,重量:1.4KG

雖然它的功能我還了解的不是很深,但知道它能夠做原始讀取就夠了。

用示波器探測所讀取的信號

我認為廉價讀卡器中的讀頭幾乎肯定能夠從酒店鑰匙卡或任何其他帶有磁條的卡中讀取數據。但經過測試,它們只能讀取支付卡數據。如果我可以在讀取器內的正確位置探測電子信號,我應該能夠看到磁條上的1和0代碼信息。

讀取器內的讀頭

我有兩種工具可以使用(這是一個基於家庭的項目,而不是基於辦公室的項目):

1.便宜的手持式示波器(Sainsmart DS202);

2.Saleae logic分析儀;

我很快意識到,我可以把探頭連接到讀頭上,上面有7個連接點。

讀頭背面的連接點

我想如果將讀頭直接連接到我的示波器上,我可以在刷卡時看到模擬信號。這樣,我就可以用這個信號得到我想要的數據。

將讀頭直接連接到我的示波器上

我嘗試將這7個探測點以不同的組合連接到我的示波器,但根本沒有發現任何信號,或許是信號太弱,又或許是我做的探測工作還不到位。

這樣,我不得不開始在谷歌上搜索所探測的晶元號碼了,該晶元有一個2倍運算放大器和一個1倍模擬比較器:

·2xLM2902DG(運算放大器)

·1xLM2901DG(模擬比較器)

2倍運算放大器

模擬比較器(左),STM32微控制器(右)

這些晶元負責放大來自讀頭的信號,這樣連接到每個輸出,我都可能會看到信號,進而根據這些信號來確定磁條上的數據。通過數據表,我可以識別每個晶元的輸出引腳。

2倍運算放大器的輸出峰值為0.5-0.6v,使用我的示波器雖然可以輕鬆查看,但我無法將看到的內容輸入到我的邏輯分析儀中。我需要大約3v的峰值。不過此時信號看起來也很沒有規律,不是我希望的那種方波。

模擬比較器的輸出正是我所要的,這時一個很有規律的3v或4v的峰值方波,僅在我刷卡時出現。此時,模擬比較器有4個輸出,這對於可以讀取3軌磁條的讀頭來說是合理的。現在,將這4個輸出信號提供給邏輯分析儀,然後開始計算構成信號(0和1)的內容。

計算信號的內容分析

以下是Saleae logic軟體中比較器觀察到的輸出信號:

通過Saleae logic查看到的輸出信號

saleae logic是一款幫助saleae邏輯分析儀調試硬體的軟體,你只需點擊「開始」按鈕,即可記錄數字和模擬信號。您可以用數據填滿整台計算機的內存,因此可以輕鬆採集冗長或罕見的事件。操作非常簡單而且方便。

請注意,此時,我們只看到1個方波,而不是3個方波,這是因為所測試的酒店鑰匙卡只有3個軌道中的1個。由於只有一個信號能分析,所以我還沒有計算出信號的內容。

這時,我想到了早在1992年就出現的Phrack37。

關於1和0如何在磁條上編碼的ASCII解釋

本質上,0和1在編碼時長度相同。只是1改變了狀態,0沒有改變。注意0可以是高的也可以是低的。

我沒有靠著感覺來解碼1和0,而是編寫了一個Python腳本,用它來解析了邏輯分析儀中導出的數據並轉儲了1和0。以下是導出為CSV時「Logic」(Saleae軟體)使用的格式:

從Saleae的Logic軟體導出CSV格式

由於數據的波特率不是恆定的,因此編寫Python代碼很難,它隨著讀頭讀取鑰匙卡的速度而變化。雖然在編寫代碼時,犯了幾個錯誤,但最終還是找到了一個有效的解決方案。

以下是一個散點圖,所顯示的方波脈衝的持續時間並沒有預期那樣的2個值。相反,可以看到各種各樣範圍的值。它仍然是從1(短脈衝,藍色或紫色點)到0(長脈衝,綠點),見上圖。每個連續脈衝與最後一個脈衝的比率都是從1到0:

顯示了脈衝持續時間(delta)需要多少值,而不是預期的兩個值

分析位元組或字元

由於信用卡使用2個軌道,其中一個字元由5位(4位+ 1個奇偶校驗)組成,另一個字元由7位(6位+ 1個奇偶校驗)組成。

我以前花了很多時間來編寫信用卡解碼器,部分原因是因為我需要確定我正確讀取了1和o信號,另外一部分原因是因為我認為我需要一些代碼來查看酒店鑰匙卡中是否使用了相同的字元類型。

此編碼的挑戰之一是需要知道數據的開始位置和前導碼何時結束,似乎 Sentinel 命令可以用於標記數據的開始或結束。這些是特殊字元(位模式),大家可以在條帶的開頭和結尾查找,然後它才有意義。這就是讀卡器只能用於讀取信用卡的原因:固件正在尋找信用卡使用的標記。它無法解碼酒店鑰匙卡,因為數據的開始或結束位置並不明顯,或數據沒有構成一個什麼進程。此外,可能缺乏有效的縱向冗餘校驗(LRC)。

如何識別酒店磁條上的字元

我在讀取的酒店磁條內容中運行了我的信用卡代碼,看看是否有所有5位或所有7位的奇數奇偶校驗。不幸的是沒有,這也是便宜的磁條讀取器讀取鑰匙卡失敗的另一個原因。

然後我對1和0進行了一些頻率分析,由於很多5位和7位的值都有自己的特點,我在信用卡磁條上看到了它們各自對應的內容。由於7位磁條上有20個空格。因此,使用頻率分析,我應該能夠猜到磁條使用了7位字元。

通過將一些酒店磁條數據分成8位模式,我注意到1和0的相同字元串發生的次數比預期的要多得多。所以我的猜測是,酒店磁條使用了8位字元。

下面是我編寫的Python腳本的一些輸出樣本:

1.原始位;

2.字元串(帶十六進位轉儲),如果使用5位、6位、7位或8位字元,則是正確的。雖然「正確性」取決於奇偶校驗、位順序以及位值映射到的字符集,但這裡還有很多錯誤和改進的空間;

3.檢查字元內的奇偶校驗;

4.尋找常見字元的頻率分析,以用於改變字元長度;

[+] Parsing file export.csv

[-] Flips in channel 0: 3

[-] Flips in channel 1: 1652

[-] Flips in channel 2: 3

[+] Analysing swipes

[-] Channel 0:

[-] Channel 1:

[-] Swipe 0: 693 bits

[-] Swipe 1: 701 bits

[-] Channel 2:

[+] Creating Plots

[-] creating plots with dimensions (1637, 1637), (1637, 1637)

[-] saving plot to file: export.csv-plot-channel-1.png

----------------------- CHANNEL 1 SWIPE 0 -----------------------

[+] Length (bits) = 266 (%5 = 1, %6 = 2, %7 = 0, % 8= 2)

[+] Data: 10100110001001100010011000100110001001100010011000100110001001100010011000100110001001100101011011100110101001001101100110100110001001100111110110111100111101100010000000100110011001101100001010010101001001001110110100000111001101011101100001100101101000101010011001

[+] Strings:

[-] 5 bit: 5398621

[-] length: 53

[-] hex:

35 33 39 38 36 32 31 3c 34 33 39 38 36 32 31 3c 5398621

34 33 3a 3e 36 32 3c 33 35 33 39 3c 3b 3e 3c 3d 43:>62

34 30 39 3c 36 31 35 35 34 39 3d 31 3e 36 3e 33 4096>3

36 3d 31 3a 36 6=1:6

[-] 6 bit: E(1C&,9RD(1CFM92;+1S;G;"D,-**DMPLW8M4,

[-] length: 38

[-] hex:

45 28 31 43 26 2c 39 52 44 28 31 43 46 4d 39 32 E(1C&,9RD(1CFM92

3b 2b 31 53 3b 47 3b 22 44 2c 2d 2a 2a 44 4d 50 ;+1S;G;"D,-**DMP

4c 57 38 4d 34 2c LW8M4,

[-] 7 bit: %..#...2$..#&-.....3."..$....$-0,7.-.

[-] length: 37

[-] hex:

25 08 11 23 06 0c 19 32 24 08 11 23 26 2d 19 12 %..#...2$..#&-..

1b 0b 11 33 1b 27 1b 02 24 0c 0d 0a 0a 24 2d 30 ...3."..$....$-0

2c 37 18 2d 14 ,7.-.

[-] 8 bit: .&&&&&&&&&&V....&}.. &f..$..5.e..@

[-] length: 34

[-] hex:

a6 26 26 26 26 26 26 26 26 26 26 56 e6 a4 d9 a6 .&&&&&&&&&&V....

26 7d bc f6 20 26 66 c2 95 24 ed 07 35 d8 65 a2 &}.. &f..$..5.e.

a6 40 .@

[+] Parity for 5 bit chars: odd: False, even: False)

[+] Parity for 6 bit chars: odd: False, even: False)

[+] Parity for 7 bit chars: odd: False, even: False)

[+] Parity for 8 bit chars: odd: False, even: False)

[+] Frequency analysis for potential char lengths:

[-] 5 bits:

10011: 5

11000: 4

01100: 4

00110: 4

00100: 4

[-] 6 bits:

100110: 5

100010: 5

011000: 5

011001: 4

001001: 4

[-] 7 bits:

1000100: 3

0010011: 3

1101100: 2

1100010: 2

1011010: 2

[-] 8 bits:

00100110: 12 < common 8-bit patter implies 8-bit chars?

10100110: 3

...snip...

以上數據來自實際的酒店鑰匙卡。

我還開始關注了XORing、旋轉字元(rot13格式),位順序和偏移的整個位流(是為了防止我在錯誤的位置開始時將字元組合起來)。位流(bit stream)就是一個連續的位序列,表示在某個通信路徑上串列(一次一位)傳輸的數據流。

分析到此為止,如果我能解碼鑰匙卡上的任何數據,我一定會及時發帖。我希望以明文形式查看我的房間號和結帳日期。

總結

以廉價的閱讀器,耗時的來讀取鑰匙卡的過程非常具有挑戰性,雖然沒有達到目的,但我卻編寫了自己的代碼,了解了matplotlib以及邏輯分析儀。如果你想了解更多有關磁條的信息請查看:

1.Samy Kamkar的magspoof工具,該工具可以幫助你的PC通過讀頭傳輸可能會很有用的壞數據。

2.如何攻擊酒店鑰匙卡和銷售點系統;


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 嘶吼RoarTalk 的精彩文章:

RANCOR使用PLAINTEE和DDKONG惡意軟體家族在東南亞進行針對性攻擊
嵌入式系統的安全技術分析(一)

TAG:嘶吼RoarTalk |