欢迎来到重庆监控安装公司官方网站!
您的位置: 重庆监控安装公司 - 安防百科 - 修改门禁和电梯卡实例之ACR122U的控制指令和参数

修改门禁和电梯卡实例之ACR122U的控制指令和参数

来源:安防百科 / 时间: 2024-05-24

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

还以为是啥高科技CPU卡呢,原来不是,就是一张标准的MIFARE卡。全卡共有16个扇区,每扇区4个块,每块16个字节。每个扇区都有两个密码,全卡共有32个密码。想访问哪个扇区,就必须使用与其对应的密码。

加黑这句话是道听途说,不知道真假:这种卡加密使用的是Crypto1算法。但是这种加密方式早在2008年就被亨里克和卡尔斯滕哥俩联手攻破了。这哥俩一个是德国计算机科研人员,一个是美国弗吉尼亚大学计算机专业在读博士。我们可以直接使用他们哥俩在第24届黑客大会上公布的资料来破解M1卡。

找到一个别人写的破解程序,据说原理就是上面那段我道听途说的消息。然而这个破解程序很好用,点了“开始破解”按钮之后几十秒,滴的一声,电梯卡所有扇区的数据全都Dump出来了。这个程序长这个样子:

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

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

复制成功,接下来就想分析分析数据。

用十六进制编辑器打开dump出来的文件,静下心来观察观察这些数据,找到了这样一处数据:“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。

(这篇文章是我2019年10月份首发看雪论坛的,这么几年过去了,改的这个2099很管用,每年不去物业那里更新了)

然后想分析一下楼层控制(我的卡只能刷开地下车库、一楼和我所在楼层,电梯里无法按亮其他楼层按钮),结果没分析出来,包含我楼层数字的地方太多了。算了,洗洗睡觉。

-----------第一阶段结束---------------

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

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

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

不想交费,但也没想破解。虽然破解并不难,混过看雪论坛,一眼感觉就是逆向一下,把按钮的enable属性改了就行,不过还是不要破解别人的程序了。

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

SDK里提供的模块已经封装好了各种操作它的函数,直接用就可以了。

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

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

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

详细参数和返回值如图:

比如想把“00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F”写入0x04这个块,

发送“FF D6 00 04 10 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F”即可。

详细参数和返回值如图:

当然,读写某个块的前提是有秘钥哦。

例如秘钥是“FF FF FF FF FF FF”,那么让读卡器载入秘钥需要发送“FF 82 00 00 06 FF FF FF FF FF FF”。

详细参数和返回值如图:

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

例如发送“FF 88 00 04 60 00”,FF88是命令,00是参数1,04是参数2,60是秘钥类型,00是秘钥序号。

对我来说,会用这几步就足够了。

1、把秘钥载入到读卡器,同时给秘钥一个序号,比如00号秘钥。
2、把00号秘钥与当前卡目标块的秘钥进行比对认证。
3、认证通过后,对目标块那是想读就读,想写就写。

然后我就写了一个小程序,可以对指定的块进行读写,如下图:

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

有时间我再继续新。

相关产品

在线客服
微信联系
客服
扫码加微信(手机同号)
电话咨询
返回顶部