背景故事
几天来,我试图破解使用旧医疗设备的协议,以便以自动方式为研究收集数据。
有问题的设备是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 协议 -NOVACOM3
和SATDIAG
. 由于诊断协议通常更简单,我从后面的协议开始:
- SATDIAG 连续传输数据
- 协议除了向计算机发送数据外,还包含一些未知的固件更新上传模式(可能是一些 XMODEM 左右......我没有固件 blob,所以显然我没有玩过这个)
- 经过分析,我可以非常自信地说每个数据包
0x00
以0x0A
(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-...)
我卡住了...
我无法强制设备开始流式传输 - 如果我设法做到这一点,找出参数应该不会那么难,因为我在设备上有显示器并且我知道需要哪些参数。直到……我不知道如何进一步发展。我还尝试联系购买该公司的飞利浦部门 - 没有任何回应。
有任何想法吗?