bigknife 发表于 2020-9-3 11: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发包。



逆向过程就不发了,od挂载,很简单的bp send,逮住数据包是时间的时候,然后ctrl+f9层层返回观察可疑函数
返回这一层的时候,在上面一个函数里发现了时间处理:



重点分析这个:CALL SB100PC.086836E7,另外查了下这个SB100PC.ocx好像是什么上古打卡芯片之类的吧,软件目录下有很多这种ocx,估计对应不同芯片。


分析过程在注释里,经过分析,软件使用当前时间减去2000年1月1日00:00:00的总秒数,比如距今大概652440564秒了,16进制是26E373F4,然后用0x100,依次和0x26、0xE3、0x73、0xF4相加,作为校验码(?),放在包末尾




然后就是写代码验证了




这里需要发两个包,第一个是告诉打卡机我要改时间了,第二个包发送时间,由于第一个包内容是始终固定的,就直接复制了截取到的包里的内容



测试成功,由于这玩意只能局域网通讯,我在纠结做成手机APP直接控制(但是从进门到连上WIFI需要一定距离和时间),还是在办公室电脑做个web服务端,我有公网VPS,可以用frp映射办公室电脑端口到公网,手机通过访问网页来调用{:1_925:}老远就可以掏出手机准备好改时间。就这样吧,END。

刀大喵 发表于 2020-9-3 13:42

每天一个摸鱼小技巧

bigknife 发表于 2022-4-8 10:22

gp865542 发表于 2022-3-3 14:40
我有点不明白啊不联网啊 怎么获取到他的IP地址的
因为我知道他支持局域网通信(因为毕竟打卡数据得传出来嘛),而且和我们办公室使用的同一个网络,扫一下就知道了。而且安装的时候我拍下了端口,不知道端口的话你得社工一下管理员或者生产厂家。哦,理论上你下载他的考勤软件,分析一下也能知道端口号。

ww23eq 发表于 2020-9-3 11:50

佩服!!!
道高一尺魔高一丈{:301_986:}

rustyjackal 发表于 2020-9-3 11:53

好好学习,天天向上

sjjyz 发表于 2020-9-3 12:12

纸质卡片打卡有没有可能搞?看上去不用联网的,靠机器自身时间周期打印到卡片上

mscsky 发表于 2020-9-3 12:16

你是老板?敢这么玩,内网透传被入侵了谁负责?

VPSMarket 发表于 2020-9-3 12:29

公司加个网关限制IP访问就没得玩了

嚣张的猪 发表于 2020-9-3 12:55

我上班不用打卡,但是公司的打卡机是用vlan单独隔开的,想动手估计有点难度

辰迷星海 发表于 2020-9-3 13:00

感谢分享

夏520 发表于 2020-9-3 13:31

感谢分享

xiaobentuko8 发表于 2020-9-3 13:37

牛了,不怕老板{:301_997:} 感谢分享
页: [1] 2 3 4 5 6
查看完整版本: 记一次古董打卡机远程修改时间的逆向和实现