原文地址:http://drops.wooyun.org/tips/11105

0x00前言


对于串口通信大多时候是固定的,所以对于大多数的攻击主要就是对数据的抓取然后模拟通信就可以了。如何确定设别是不是串口通信的最简单办法,windows系统右键计算机,管理的设备管理中可以查看是否增加com口。

0x01 使用的工具


在抓取时要使用类似于wireshark的抓包工具SerialMonitor。

SerialMonitor程序截图 Alt text

在进行模拟串口时,为了方便采用虚拟串口工具Virtual Serial Port Driver,在调试时采用串口调试助手(当然这里也可以自己写个串口程序调试),然后就是模拟数据通信程序,这个要自己编写个人建议采用C#编写(原因简单方便)。

Virtual Serial Port Driver程序截图 Alt text

串口调试助手程序截图 Alt text

0x01 串口数据抓取


安装完SerialMonitor后,打开程序选择Session——>new Session后会跳出配置,框这里选择增加的com口和Select all后,点击Start monitoring。

Alt text

这个时候就开启了监听com口了。接下来就是就是使用设置正常操作,从而抓取通信的数据内容。这里拿一次SS628M10芯片的身份证读卡器的数据来做演示。

抓取的数据如图 Alt text

这里我们主要看Dump view窗口。从窗口数据我们可以看见开启端口然后使用的程序会向设备发送一段请求码,然后会返回多次数据,对于抓取一次完整的通信要从com口打开到com口关闭,暂时遇到一直通信的是GPS模块,其它都是通信结束就会关闭。

到此通信数据抓取完毕。

0x02 模拟串口数据通信


先说一下模拟串口通信的原因,由于使用串口通信设备的程序在通信时是搜索本机还有的com然后打开未被占用的最小的com口进行通信,于是我们就可以创建一个虚拟的串口对,在然后使用数值比较小的串口号这样就可以替代设备进行通信。这里要使用串口对,要不然的话你发送数据没有回复,串口对相当于一条数据线在设备程序和虚拟串口程序间连接。

使用虚拟串口程序创建虚拟串口对如图 Alt text

创建完串口后,按照上面分析设备使用程序会打开COM1进行通信。这样程序把数据发给COM1,通过串口对,数据会发送给COM2从而读出,这时只要对COM2口进行串口编程就可以模拟数据通信了。

PS:这里要说下大多程序都可以使用这种方法进行模拟通信,不过在利用ActiveX控件的web页面调用时会出现识别不出串口的问题,这里要插一条相同芯片的数据线即可。