首页 > 代码库 > RFID开发之圣诞袜的秘密

RFID开发之圣诞袜的秘密

0X01爬烟囱

请先阅读《RFID开发之圣诞老人无稽之谈》
经过上次心有余悸的测试,决定继续细心分析卡上数据。经过多张卡对比发现有个地方是检验金额的。

E803000000000000EB00640001003B02

我们知道E8030000, E8 03 00 00倒序为00 00 03 E8,转成10进制即为1000。通过对比另外几张卡发现这里的金额精确到0.1。所以,所有的金额都是比原来的大10倍即个位数是 0.1元这个位置即角。十位才是1元,所以 100元,我们的数据表示是 1000。

我们更改了金额为:

DC05000000000000EB00640001003B02

(1500,150刀),但是为什么刷卡的时候金额还是为100呢?因为这区做了金额校验(这里的金额检验算作是卡得第二道防护)。 

E8 03 00 00 00 00 00 00 EB 00 64 00 01 00 3B 02 

发现8-9字节是 0-7字节的每个字节和。E8+03=00EB,DC+05!=00EB所以消费机会报警。现在我们知道了这个校验,那么我们在写程序的时候,更改金额区块的时候,要计算所充值的金额和原来金额的总和,然后写入8-9字节。
这样才可以正常充值使用!我们更改完得数据应为:

DC05000000000000E100640001003B02

这样应该就可以高枕无忧了!第二次刷卡测试,金额为150刀,没问题。

但是消费机又响了!究竟是哪里出了问题呢?我让朋友把消费过的卡,Dump出来,发现还是这块数据对不上。后来只好让朋友每次消费的时候Dump出数据,并记录消费金额,刷卡时间。
皇天不负有心人,终于找到了操作次数记录(每次充值都有一个操作记录,基础值为0,操作一次累加1)。
这样的话,我们程序就好解决了,每次充值之前,先备份该区块数据,做充值操作的时候把备份的数据取出来和充值后的数据进行拼接填充该区块。

DC05000000000000E1006400 0100 3B02

此处的12-13字节为操作次数0100,倒序即为0001,这里表示1次操作记录。经过曲折的烟囱,终于达到了目的地!

当然了这里只能说是侥幸,校验的地方比较少,不是全加密,省了不少时间。

0X02送礼物

此时程序已经完成得差不多了(其余的一些数据就不一一分析了)。心想着恶作剧下,看他们行业有什么守则。。。
对方开了80、143、1433、3389端口。悲剧的是3389被防火墙做了限制,访问不了。本来想做80端口转发,没那么多时间去写就放弃了。
加了个软件彩蛋,简单的加了几句cmd,net user …….你们比我更懂!程序编译完成,发给朋友。幸运的是朋友电脑没装杀毒软件,所以CMD顺利执行,有了账号但是照样连不上。
过了差不多一个月,他又来找我Dump一张远距离ID卡,Dump完后,突然想起上次开的账号,这次千辛万苦连上了。顺手截图几张,嘿嘿~~~可惜的是找不到报价单。- -!

 

0X03打开圣诞袜

爬进了烟囱,把礼物装到圣诞袜,是时候该说再见了。
本次分析需求,数据分析,到开发程序Demo总耗时一个礼拜(实际开发时间)。本次RFID开发还算顺利,
归根结底有两点:

1.学校的一卡通安全性低,非全加密,没有做UID校验。只有3道校验防护(严格来说只有2道防护)。
2.消费终端没做2次校验。每次充值的充值机应该具有可标志性,以便记录操作记录。需要更多的验证,不仅限于密码块!

关于更多的RFID安全请访问radiowar wiki!

以上纯属是圣诞老人无稽之谈,不具有导向性,代表性。仅为个人学习日志!欢迎交流,互相学习!

RFID开发程序完整Demo下载:下载地址

                                                                      完
祝大家圣诞快乐!