背景
最近在hack rovio小车的定位系统,从一些公开的资料(CSK.Blog-对Wowwee Rovio机器人的拆解和扩展可能性探讨)获知,北极星主芯片与主控板的通信是通过串口,也就是URAT总线进行通信。
接线图如下
从上往下依次为:GND,Reset,TX,RX,CON,VIN
这里面,必须接的是GND,TX,RX,VIN,VIN口电压4.6V,用5V应该也没问题
既然是串口,那么用esp32,甚至单片机就可以驱动起来,理论分析到这,下面就是软硬件上的hack分析
硬件hack
根据上述接口图,从之前的hack分析中,抓取的小车和上位机通信数据包看,位置信息是通过head_position字段传递的,是一个int值,不出意外,这个值是通过北极星主芯片的tx口发给小车主控板的。
为了抓这个数据,把tx口接线柱拆下来,接到usb 串口的rx口后,试图从总线数据上进行分析。
首先,摆在眼前的是波特率问题,因为没有总线分析仪这样高端的设备,只能反复切换波特率尝试,终于在切换到19200时,发现了有效的ascii字符。
然后就把主控板的TX口接到电脑usb串口芯片的RX口上,然后把电脑usb串口芯片的TX口接到北极星芯片的RX口上,硬件这么接的目的,是为了分析主控板的上行通信协议。
随后就碰到一个比较棘手的问题,串口跟TCP端口有所区别,无法像网卡一样,获取所有TCP/IP流,然后过滤指定的端口数据进行分析。端口被某个应用独占后,其它应用无法再打开端口监听端口上的数据包。
为了达到监听的目的,做了如下尝试:
软件hack
在windows上,写了一段python代码,之所以用python,完全是考虑开发环境搭建的简化,批处理没有找到合适的方式,C++要搭编译环境,退而求其次,用了python
首先在windows上安装python3.x,官方网站下载3.5-3.8即可,最新的是3.12了。注意,别被x度导流到国内的二道贩子网站,出二维码缴费,真恶心。
安装过程注意,勾选环境变量和安装pip,后面要用
安装完成,打开命令行,输入pip install pyserial
随后,找个记事本,写下如下代码,保存后缀.py, 用python打开
import serial
from time import sleep
def recv(serial):
while True:
data = serial.read_all()
if data == '':
continue
else:
break
sleep(0.02)
return data
if __name__ == '__main__':
ser = serial.Serial('com10', 19200, timeout=0.5) #/dev/ttyusb0
if ser.isOpen() :
print("open success")
else :
print("open failed")
while True:
data =recv(ser)
if data != b'' :
print("receive data & write back ====>: ",data)
ser.write(data) #数据写回
上述代码的作用是打开窗口com10(根据需要指定),接收主控板发过来的数据,打印出来,随后再发送出去,传递给北极星,相当于再电脑内部做了个环回+打印的功能。
如法炮制,可以在电脑上再安装一个usb ttl适配器,连接北极星上的TX口,这样就能在同一台电脑上,同时监听上下行数据,进行分析了。
软硬件接线图
关于串口工具
过程中用到的工具,做个记录,备忘
1. 串口调试精灵
绿色版的,这个不多介绍了。网上李逵很多,正经的叫sscom
2. Virtual Serial Port Driver
也叫vspd,要下载破解版的。这个软件的作用是可以虚拟出串口,在物理串口和虚拟串口之间建立桥接,桥接后,可以用串口监听软件监听物理串口上的数据,场景是某些下位机通过串口与windows主机通信,因为物理串口被占用,无法监听,所以变通为在桥接的虚拟端口上做监听
3. CommMonitor
与上述vspd配合使用,能够对某些常用的协议做格式化显示,看起来方便些。
4. SerialMonitor,Device Monitoring Studio等
同上
注意,Device Monitoring Studio有的版本还只有tcp端口,没有串口监听,下载了一个8.4的破解版,可用。
http://www.ceiwei.com 这个网站有串口工具下载,非免费版和收费版,免费版也够用了。