社区的门禁兼电梯卡50元一张,我们一家3口人就150元,过阵子家里老爷子来我这里的线元了,太贵了吧!想起来柜子里有一个吃灰很久的ACR122U读卡器,遂祭出来分析了一下电梯卡。

  还以为是啥高科技CPU卡呢,原来不是,就是一张标准的MIFARE卡。全卡共有16个扇区,每扇区4个块,每块16个字节。每个扇区都有两个密码,全卡共有32个密码。想访问哪个扇区,就必须使用与其对应的密码。本段内容是道听途说,不知道真假:这种卡加密使用的是Crypto1算法。但是这种加密方式早在2008年就被亨里克和卡尔斯滕哥俩联手攻破了。

  这哥俩一个是德国计算机科研人员,一个是美国弗吉尼亚大学计算机专业在读博士。我们可以直接使用他们哥俩在第24届黑客大会上公布的资料来破解M1卡。找到一个别人写的破解程序,据说原理就是上面那段我道听途说的消息。然而这个破解程序很好用,点了“开始破解”按钮之后几十秒,滴的一声,电梯卡所有扇区的数据全都Dump出来了。这个程序长这个样子:

  又找了一个别人的写卡程序,导入刚才破解得到的二进制文件,放上一张从某宝1.2元买来的空白卡扣,写入。

  试了试电梯、门禁,多次测试,全都成功,看来这张电梯卡连滚动码都不是,数据终身不变。

  晚上静下心来观察观察这些数据,找到了这样一处数据:“13 0A 1F 00 18 00 00 12 08 1B 0A 11”(图片光标所在蓝色行)。

  把130A1F0018逐字节转成十进制,就是1910310024,这不就是19年10月31日24点到期嘛(我们小区物业费每年10月到期,小区居民都知道)。

  后面的12081B0A11转成十进制表示就是18年08月27日10:17,这就是我去年交物业费时,物业给我更新电梯卡数据的时间嘛。如果直接把130A改成630C有效期不就到了2099年12月了嘛,看起来So easy。然后想分析一下楼层控制(我的卡只能刷开地下车库、一楼和我所在楼层,电梯里无法按亮其他楼层按钮),结果没分析出来,包含我楼层数字的地方太多了。算了,洗洗睡觉。

  后来,不甘心啊,就想知道哪个数据是楼层权限,哪个地方可疑就改哪个地方,然后去电梯测试,暴力尝试,总会找到地方的。

  此时发现,我每改一个数据去试验,就得把全卡数据整体写入一次,可我只想写某个块,并不需要全卡重写。有没有可以给出目标块的位置,直接写该块的软件呢?

  找了找,都是收费的,最友(sheng)好(qian)的一款是读取目标块免费,写入目标块就得交费注册的,如图,不注册的话,写卡按钮灰色的,如下图:

  不想交费,好吧,正好我手里有读卡器的SDK,看看读卡器的命令和参数,自己写一个小程序吧。

  实质上就是需要写一个通讯程序,发送一串二进制数据过去,读卡器响应之后返回一串二进制数据回来,并不难。

  比如读0x04这个块,发送“FF B0 00 04 10”即可。FFB0是读指令,00是第一个参数,04是第二个参数,10是要读的字节数。

  函数返回值9000表示读取成功,6300表示读取错误。(如果读取成功,要读的数据已经在读取缓冲区里了)。

  读卡器载入秘钥之后还要和卡内目标块的秘钥进行比对认证,如果秘钥正确才能对目标块进行读写哦。

  对我来说,会用这几步就足够了。1、把秘钥载入到读卡器,同时给秘钥一个序号,比如00号秘钥。2、永乐国际旗舰厅app。把00号秘钥与当前卡目标块的秘钥进行比对认证。3、认证通过后,对目标块那是想读就读,想写就写。

  试了试,自己写的程序果然好用,接下来就是去测试哪个块里有电梯楼层限制的数据啦。