解码串行数据

逆向工程 串行通讯
2021-06-19 10:23:23

我有一个能量监测器,我设法进入了饲料。我对握手数据包进行了排序,但我一直在研究如何从 HEX 解码这些数据。

我所知道的是转储时监视器上显示的以下值。

  1. Pac = 81 瓦
  2. Vac = 236.1V
  3. 能源总量 = 45.7 kWh
  4. 总小时数 = 72 小时

并有以下数据包,由监视器每 10 秒发送一次

 AA 55 00 01 01 00 11 82 32 00 AA 00 9A 06 DE 06   ªU.....‚2.ª.š.Þ.
 D4 00 03 00 03 00 04 09 59 13 8C 00 51 00 00 00   Ô.......Y.Œ.Q...
 00 01 C9 00 00 00 48 00 01 00 00 00 00 FF FF 00   ..É...H......ÿÿ.
 00 00 00 00 00 00 00 00 00 00 00 09 35            ............5

 AA 55 00 01 01 00 11 82 32 00 A3 00 9A 07 01 07   ªU.....‚2.£.š...
 11 00 03 00 03 00 04 09 51 13 8E 00 4F 00 00 00   ........Q.Ž.O...
 00 01 C9 00 00 00 48 00 01 00 00 00 00 FF FF 00   ..É...H......ÿÿ.
 00 00 00 00 00 00 00 00 00 00 00 07 88            ............ˆ

 AA 55 00 01 01 00 11 82 32 00 A3 00 9A 06 C2 06   ªU.....‚2.£.š.Â.
 E3 00 03 00 03 00 04 09 39 13 8E 00 51 00 00 00   ã.......9.Ž.Q...
 00 01 C9 00 00 00 48 00 01 00 00 00 00 FF FF 00   ..É...H......ÿÿ.
 00 00 00 00 00 00 00 00 00 00 00 09 03            .............

 AA 55 00 01 01 00 11 82 32 00 A3 00 9A 06 B8 06   ªU.....‚2.£.š.¸.
 B2 00 03 00 03 00 04 09 39 13 90 00 51 00 00 00   ².......9..Q...
 00 01 C9 00 00 00 48 00 01 00 00 00 00 FF FF 00   ..É...H......ÿÿ.
 00 00 00 00 00 00 00 00 00 00 00 08 CA            ............Ê

我可以在 start 之前看到完全相同的东西,2<ascii>,之后它似乎包含数据。最后一个数据包转储应该是与接收时监视器上的数据类似的数据包,正如我所提到的。

我试过将每个十六进制转换为整数,也许只是找到相似的数字,最简单的就是小时,72因为它每小时都在变化。但我徒劳的尝试使我一无所获。没有接近 72。

我怀疑数据被混淆或加密。我只是不知道我还能如何尝试解决这个问题,并从此类领域的经验丰富的开发人员那里寻求一些建议。

所有数据包都以相同的结尾,FF FF 00 ..并且每次最后一个十六进制都不同,我怀疑有一个 CRC 值用于检查。所有这些之间可能还有其他值混合,但我只对我可以在监视器上看到的主要值感兴趣。

1个回答

您知道每次都会有 72 个在数据中。让我们将其转换为十六进制,即48. 我们可以在每个数据包中清楚地看到这一点。

它前面有 30个可能的字节,因为它是作为 32 位 int 写出的(出于某种原因)。

在此之前,我们可以看到00 00 01 c9让我们将其全部转换为十进制:结果是457您正在寻找的另一个值的 10 倍。

下一组是00 51 00 000这个值和下一个值之间可能有 2 个字节,所以让我们关注一下51,转换为十进制81您正在寻找的另一个价值!

236.1但是,您要查找的最后一个值是在看到总能量之后,也许该值首先按比例缩放,10因此让我们检查 2361 十六进制,即0939. 瞧,这是在最后一个数据包中:

AA 55 00 01 01 00 11 82 32 00 A3 00 9A 06 B8 06
B2 00 03 00 03 00 04 09 39 13 90 00 51 00 00 00
00 01 C9 00 00 00 48 00 01 00 00 00 00 FF FF 00
00 00 00 00 00 00 00 00 00 00 00 08 CA

请记住,单个十六进制数字 (0-f) 可以包含的最高值是 15,将其中的 2 个放在一起,您可以达到 255。再次将位数加倍,您将获得 65535。另外要记住的是工程师很便宜,当他们只能使用定点代替时,他们不会进行浮点运算。诀窍是找到他们使用的比例因子。