gpt4 book ai didi

reverse-engineering - 逆向工程UPS串行协议(protocol): Checksum/CRC?

转载 作者:行者123 更新时间:2023-12-04 15:38:59 32 4
gpt4 key购买 nike

我收到了一个 APC SMC1000 UPS 设备,我想用它为基于微 Controller 的应用程序供电,并在关闭前执行一些任务。 UPS 有串口和 USB 两种端口,但是串口协议(protocol)好像没有文档。由于 USB 主机不在 uC 上,我想使用串行端口与它通信。

在使用 Python 脚本进行了一些探索后,UPS 开始说话,我可以识别出一些信息。然而,最终它似乎在继续之前期待一条消息,所以我想弄清楚如何做到这一点。

UPS 总是发送 19 个字节的消息,其中第一个字节是 ID,接下来是 16 个字节的数据,然后大概是一些未知校验和或 CRC 的 2 个字节。
[ Msg ID | 16 byte data | 2 byte checksum? ]
如何导出CRC或校验和类型?我已经尝试了一些方案,最终在 ID 为 7f 的以下消息中使用了 reveng ,但不幸的是:

0x7f 0000000019c90013004e000001790000 3190
0x7f 0000000019ca0013004e000001790000 259b
0x7f 0000000019cb0013004e000001790000 19a6
0x7f 0000000019cc0013004e000001790000 0db1
0x7f 0000000019cd0013004e000001790000 01bc
0x7f 0000000019ce0013004e000001790000 f4c7
0x7f 0000000019cf0013004e000001790000 e8d2
0x7f 0000000019d00013004e000001790000 dcdd
0x7f 0000000019d10013004e000001790000 d0e8
0x7f 0000000019d20013004e000001790000 c4f3
0x7f 0000000019d30013004e000001790000 b8fe
0x7f 0000000019d40013004e000001790000 ac0e
0x7f 0000000019d50013004e000001790000 a015
0x7f 000000001c67001500530000017c0000 5eb8

任何有用的想法将不胜感激!

最佳答案

我花了太多时间在这上面。但是,嘿,一旦你掉进了兔子洞......

感谢@rcgldr,我避免了寻找 CRC 检查,而是决定查找各种简单的校验和。最终我得到了一个 Python 脚本,它对上面的示例运行各种校验和,并将其与最后 2 个字节进行比较。直到我将第一个字节添加到校验和中才成功,给了我一个 Fletcher 的 8 位校验和。
我使用了来自 https://github.com/njaladan/hashpy 的代码为了这。

7f0000000019c90013004e000001790000 0x3190 PASS
7f0000000019cb0013004e000001790000 0x19a6 PASS
7f0000000019cc0013004e000001790000 0xdb1 PASS
7f0000000019cd0013004e000001790000 0x1bc PASS
7f0000000019ce0013004e000001790000 0xf4c7 PASS
7f0000000019cf0013004e000001790000 0xe8d2 PASS
7f0000000019d00013004e000001790000 0xdcdd PASS
7f0000000019d10013004e000001790000 0xd0e8 PASS
7f0000000019d20013004e000001790000 0xc4f3 PASS
7f0000000019d30013004e000001790000 0xb8fe PASS
7f0000000019d40013004e000001790000 0xac0a FAIL
7f0000000019d50013004e000001790000 0xa015 PASS
7f000000001c67001500530000017c0000 0x5eb8 PASS

它还表明其中一个样本的校验和无效。
不幸的是,我的印象是消息 7f 是对主机的某种挑战字符串。也许我也可以解决这个难题:)

协议(protocol) ID

到目前为止,我还通过检查数据并搜索 APC 的 PowerChute 报告的值来识别几个消息 ID。
  • 0x00:带有协议(protocol)信息的 header (16 字节)
  • 字节 0:未知(在我检查的单元上总是 0A,也许是协议(protocol)版本?)
  • 字节 1:消息大小
  • 字节 2:可用 ID
  • 0x40:序列号(14 字节)
  • 0x41:单位名称
  • 0x43:单位类型
  • 0x45:固件版本 1
  • 0x46:固件版本 2
  • 0x48:电池更换码
  • 0x49:制造商
  • 0x7e:挑战的一部分(对)
  • 0x7f:挑战的一部分(来自)

  • 也许我会随着我的进步更新这个列表

    2019 年 9 月 11 日更新

    我现在正在 https://sites.google.com/site/klaasdc/apc-smartups-decode 上记录我的进展

    关于reverse-engineering - 逆向工程UPS串行协议(protocol): Checksum/CRC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58675120/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com