逆向工程 RS232 协议神秘的最后一个字节

逆向工程 嵌入式 串行通讯
2021-06-27 20:37:23

我有一个旧的净水器系统,它由一个 PDA 和一个主板(我认为 ic 是瑞萨电子)组成,通过 RS232 进行通信,我需要知道它们用于通信的协议,以便从另一个设备复制它。我已经实际完成了,下面我详细介绍了我能够提取的特征:

协议详情

RS232

字节序:LSB

波特率:9600

数据:8位

停止位:1

奇偶校验:奇数

数据包大小:21 字节

字符开始/停止:90

极性:正极

两个字节之间的时间:6.8 毫秒

数据包之间的时间:1.9 秒

倒数第二(字节 20):校验和(所有数据字节的简单总和 + 90)

消息格式

PDA (TX):90 + (18 * data_byte) + 校验和 + unknown_byte

主板(TX):90+(18*data_byte)+校验和+90

我也已经知道数据的每个字节对应什么,但是最后一个字节(unknown_byte),我不知道它对应的是什么,即使数据相同,它也在不断变化。当我打开 PDA 时,它不断地发送相同的序列:

  90 + (18 * zero_byte) + 90 + unknown_byte

最后一个字节似乎从 PDA 开始遵循一个序列,但它不会完全重复:

05、EA、EC、F1、E9、EE、F4、EB、F1、E8、EE、F3、EB、F0、E8、ED、F3、EA、F0、F5、ED、F2、E6、EC、F1、 E9、EE、F4、EB、F1、E8、EE、F3、EB、F0、f6、E8、ED、F2、EA、F5、EC、F2、E9、EF、F4、E8、EE、F3、EB、 F0、F6、ED、F2、EA、EF、F5、E7、EC ...

DEC 中的其他序列:

5,234,236,241,233,238,244,235,241,232,238,243,235,240,232,237,243,234,240,245,237,242,230,236,241,233,238,244,235,241,232,238,243,235,240,246,237,242,234,239,245,236,242,233,239,244,232,238,243,235,240,232,237,242,234,239,245,236,242,233,239,244,236,241,233,238,244,235,237,243,234,240,245,237,242,234,225,245,236,242,233,239,244,236,241,233,238,244,235,240,229,234,239,245,236,242,233,239,244,236,241,233,238,244,235,240,232,237,243,234,240

有谁知道这个字段可能对应什么?

提前致谢

3个回答

无法访问代码很难确定,但我认为这是某种序列号。我建议尝试记录尽可能多的序列,并尝试自己发送重播以查看是否得到相同的响应。

这个值没有校验和(据我所知?)这一事实非常令人困惑,但它可能表明:

  • 协议真的不关心这个值中的位翻转(并且在这种情况下不需要丢弃数据包)
  • 在校验和过程中该值尚不可知

我真的不知道,如果我不得不在黑暗中拍摄,我会说这是某种健全性检查,可以在很长一段时间内检查某些内容是否大致正确。

如果我正确阅读了问题,您在开始时总是看到相同的顺序吗?这让我想到了随机数生成器,可能是LCGXOR shifter在这两种情况下,算法都可以使用足够的数据进行逆向工程。如果它是 RNG,它最终会重复。

有趣的是,除了 05,所有值都是 230 加上从 0 到 16(包括!!)的某个值可能有一个 mod-17 正在进行。

换个角度看,它们都在 238 +- 8 之内。

为什么是RNG?难倒我了。从理论上讲,您可以通过观察一系列数据包来计算自开启以来已经发送了多少数据包。一种奇怪的序列号。

如果您并不总是看到相同的序列......它可能是一个时间增量(自上次阅读以来的时间?)以防止时钟漂移或其他什么。我不知道重点是什么,奇怪的是相同的值不会连续重复两次。但它可能符合在校验和时不知道的理论。

祝你好运...

最后,在进行多次测试后,它似乎可能是垃圾,保持这个值固定我已经能够向外部发送命令并且它已经工作

感谢大家的帮助