[原创]记一次古董打卡机远程修改时间的逆向和实现
部门最近买了个古董考勤机,支持人脸+指纹,没有互联网功能,不方便作假,安装师傅来的时候我趁机拍下了局域网通讯端口(这很重要,没有这个的话后边都不能进行了,除非你找到厂商去问、查资料),然后去该打卡机厂商官网下载配套考勤报表软件开始分析。
在群里吹水得出结论,最好的作假手段就是:一般打卡机都有联网同步时间的功能,伪造时间包,用手机操作,打卡前改时间,打完卡改回去,甚至可以把一周的全打了先,我们这里上班其实本来就很松散,所以此方法可行。
由于这家公司型号也有点多,第一次下错了软件版本,第二次下的版本设置里找到了时间同步功能。
QQ截图20200903093707.png (31.77 KB, 下载次数: 0)
下载附件
2020-9-3 09:38 上传
接下来就是分析封包,看看有没有明文信息,查了下软件,Delphi写的,在我想来古董打卡设备通信一般都是UDP明文吧,以为很简单,没想到是TCP+特殊的时间格式;
这个软件也推荐下,是我分析过程中才找到的。1M多体积,开袋即食(不知道是不是我安装过wireshark,已经安装过wincap之类的原因),还能模拟发包;
观察可疑数据包,别的大部分包都很简单,只发送4字节左右的数据,不像是时间(这里头脑里要对时间在内存里怎么保存的要有个大概概念)
5A A5 01 00 94 77 E3 26 14 03
只有这一串包像时间,前4位是固定指令头,后6位是数据,而且每次会变化,可是这既不是Delphi的双精度浮点保存的时间,也不是Unix时间戳,这就很麻烦了,本来都想放弃,用postmessage模拟点击算了,尝试了一下还是很麻烦,效率不高,趁昨天只睡了3个小时还神清气爽,又分析了一下代码,强迫症犯了,觉得完美的方式是做成手机APP发包。
QQ截图20200903094534.png (80.23 KB, 下载次数: 2)
下载附件
2020-9-3 09:47 上传
逆向过程就不发了,od挂载,很简单的bp send,逮住数据包是时间的时候,然后ctrl+f9层层返回观察可疑函数
返回这一层的时候,在上面一个函数里发现了时间处理:
code.png (521.58 KB, 下载次数: 2)
下载附件
2020-9-3 10:31 上传
重点分析这个:CALL SB100PC.086836E7,另外查了下这个SB100PC.ocx好像是什么上古打卡芯片之类的吧,软件目录下有很多这种ocx,估计对应不同芯片。
分析过程在注释里,经过分析,软件使用当前时间减去2000年1月1日00:00:00的总秒数,比如距今大概652440564秒了,16进制是26E373F4,然后用0x100,依次和0x26、0xE3、0x73、0xF4相加,作为校验码(?),放在包末尾
carbon.png (1.43 MB, 下载次数: 1)
下载附件
2020-9-3 10:27 上传
code3.png (114.3 KB, 下载次数: 0)
下载附件
2020-9-3 10:45 上传
然后就是写代码验证了
code5.png (45.66 KB, 下载次数: 1)
下载附件
2020-9-3 11:01 上传
这里需要发两个包,第一个是告诉打卡机我要改时间了,第二个包发送时间,由于第一个包内容是始终固定的,就直接复制了截取到的包里的内容
GIF 2020-09-03 11-18-09.gif (1.19 MB, 下载次数: 1)
下载附件
2020-9-3 11:20 上传
测试成功,由于这玩意只能局域网通讯,我在纠结做成手机APP直接控制(但是从进门到连上WIFI需要一定距离和时间),还是在办公室电脑做个web服务端,我有公网VPS,可以用frp映射办公室电脑端口到公网,手机通过访问网页来调用老远就可以掏出手机准备好改时间。就这样吧,END。