逆向工程未知 RS232/UART 二进制协议

逆向工程 硬件 嵌入式 串行通讯 协议
2021-06-20 15:01:40

背景故事

几天来,我试图破解使用旧医疗设备的协议,以便以自动方式为研究收集数据。

有问题的设备是Novametrix CO2SMO Plus,型号8100很久以前,该设备的制造商被 Respironics 收购,然后 Respironcis 被飞利浦收购。他们的网站在过去 12-14 年里都不存在,存档副本没有任何有用的信息。由于设备是在 2000 年之前设计的,因此 Internet 上没有软件 - 它在软盘上分发,以便作为软件更新。

设备与型号 7100 非常相似,它比 8100 早约 3 年发布。设备的主要区别在于软件 - 8100 中的设备要复杂得多。

物理层

起初,我着眼于确定连接的物理层等显而易见的事情——这很容易,因为服务手册实际上列出了位于设备背面的 DB25 中的所有信号。

一开始我希望 8100 将使用类似的,制造商有详细记录的 ASCII 协议(称为NOVACOM1)作为 7100 使用。不幸的是,事实并非如此。我的设备使用更新的协议NOVACOM3——互联网上关于它的信息为零;似乎NOVACOM2从未发布过。

我没有示波器(而且我无法访问我大学的电子实验室),所以我确定端口的波特率,只是在设备上启用调试模式的情况下观察具有不同波特率的流量(稍后会详细介绍)。我可以自信地说它是 9600 8N1(就像以前的型号一样)。

设备使用NXP MC68332 MCU,根据数据表,它是坚固耐用的 32 位内核,具有相当多的子单元,可用于汽车应用。它似乎也是一个安全的 - 因为我几乎没有 EE 的经验,所以我很快排除了任何尝试物理攻击 CPU 的可能性。

电脑软件

根据服务手册,制造商开发了用于与设备通信的 PC 软件—— “CO2SMO Plus! for Windows”不幸的是,它作为单独的包装出售,现在无处可寻。

诊断协议

该设备有两个 Novametrix 协议 -NOVACOM3SATDIAG. 由于诊断协议通常更简单,我从后面的协议开始:

  • SATDIAG 连续传输数据
  • 协议除了向计算机发送数据外,还包含一些未知的固件更新上传模式(可能是一些 XMODEM 左右......我没有固件 blob,所以显然我没有玩过这个)
  • 经过分析,我可以非常自信地说每个数据包0x000x0A(LF)开头和结尾
  • 协议每秒传输数据包几次(我没有对此进行任何测量,但它是 15-20/s)
  • 设备交替发送 9 字节和 25 字节(包括 2B 的页眉和页脚)数据包
  • 每隔几秒传输 41 字节的数据包
  • 很可能没有使用校验和(相同的有效载荷包含不同的最后一个字节,我还计算了一些流行的校验和)
  • 协议似乎严格旨在收集性能数据、某种资源使用情况或代表未知的内部状态 - 测量的变化不会导致数据包的任何显着变化。我还尝试手动搜索与设备显示的数字类似的数字 - 不走运。

总之SATDIAG似乎更像是一个调试器转储一些性能指标或资源使用情况。

控制协议

接下来,我开始使用用于与 PC 软件对话的协议 - NOVACOM3:

  • 协议遵循请求-响应模式
  • 为了显示实时波形协议必须包含连续模式,该模式仅流式传输数据而无需额外查询:这就是我想要的
  • 通过发送不同的字符,我确定0x00标记数据包的结尾。没有任何字符标记开始数据包的迹象。
  • 看起来设备期望(一些?)数据包为 8 字节(包括尾随NULL-BYTE)长 - 而发送由0x00我看到的 8 字节设备终止的不同长度与回复 2 字节是一致的。
  • 似乎没有校验和 - 我有相同的第一个字节和不同的第二个字节的不同的 2 个字节响应
  • 响应数据包似乎没有定义长度
  • 发送多个0x00似乎将设备输入缓冲区“归零” - 当我在玩确定长度时,发送 3-40x00导致设备行为一致。
  • 发送多个0x00生成无响应
  • 协议可能有一些命令块:当我通过发送 1 个字节开始扫描时 +0x00在每个字节之后我没有收到 7 个字节的响应:0x10, 0x30, 0x50, 0x70, 0x90, 0xb0, 0xd0,0xf0
  • 我能够得到的所有响应都是 2 字节或 4 字节(更长的响应实际上似乎是 2 个数据包)。每个数据包都以0x2A
  • o 能够得到的唯一响应是:{0x2A, 0xA0}, {0x2A, 0xA1},{0x2A, 0x80}
  • 该数据包{0x2A, 0x80}实际上可能是某种 ACK,因为很多时候当响应长度为 4 个字节时,我不得不等待第二个数据包 1-1.5 秒。
  • 0x20(space) / 0x40(@) /0x60似乎是一个白色字符 - 发送它后跟 0x00 导致没有响应。这些字符在 SATDIAG 中也很常见。它们的间距如此均匀 20-40-60 有点令人怀疑。现在在写这篇文章时,我认为这可能与之前描述的几个点的范围有某种联系(10-30-50-70-90-...)

我卡住了...

我无法强制设备开始流式传输 - 如果我设法做到这一点,找出参数应该不会那么难,因为我在设备上有显示器并且我知道需要哪些参数。直到……我不知道如何进一步发展。我还尝试联系购买该公司的飞利浦部门 - 没有任何回应。

有任何想法吗?

0个回答
没有发现任何回复~