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 }

版权声明:本文为xxhstudio原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/xxhstudio/p/11154947.html