饭卡破解 一卡一密破解(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
后面紧跟的5F是检验位:5F = 25 xor F2 xor AF xor 27
如果用UID卡(0扇区可写的卡)改卡号,记得把后面的校验位也改了,否者部分读卡器不认卡号的,不要以为只改卡号就完事了哈。
实测海康门禁CPU读卡器需要认校验位
密码分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!
未来:通过逆向饭卡数据,大概了解饭卡的数据储存结构,为以后单片机开发饭卡刷卡系统做准备。
“实践是检验真理的唯一标准”,黑客电影说过“光在电脑搞是入侵不了的,还需要实地入侵”很赞同
版权声明:本文全是原创,一字一图打上去的,禁止任何形式的转载,分享,不正当获利!
@font-face { font-family: “yourDictFontAwesome”; src: url(“chrome-extension://dmckmhkomggmpalekfadjibdcknieljf/lib/fontawesome-webfont.ttf”) format(“truetype”); font-weight: normal; font-style: normal }
@font-face { font-family: “yourDictFontAwesome”; src: url(“chrome-extension://dmckmhkomggmpalekfadjibdcknieljf/lib/fontawesome-webfont.ttf”) format(“truetype”); font-weight: normal; font-style: normal }