我正在努力弄清楚RF设备的校验和,这似乎很简单,但到目前为止还算不上运...

前3个字节是SyncWord,然后9个字节是有效负载,最后一个字节大概是校验和。

一些订购的输出

          +-------+-------+-------+-------+ ... +--------+--------+
          | byte0 | byte1 | byte2 | byte3 | ... | byte11 | byte12 |
          +-------+-------+-------+-------+ ... +--------+--------+
          <---- SyncWord (3) ----> <--- Payload (9) ----> <- CRC ->


样品

0xE1,0xC0,0x0A,0x0E,0xAA,0x70,0x30,0x30,0x96,0x84,0x27,0x13,0xF6
0xE1,0xC0,0x0A,0x0E,0xAA,0x60,0x30,0x30,0x96,0x84,0x27,0x13,0xE6
0xE1,0xC0,0x0A,0x4E,0x8A,0x60,0x38,0x34,0x94,0x84,0x27,0x13,0x10
0xE1,0xC0,0x0A,0x4E,0x8A,0x70,0x38,0x34,0x94,0x84,0x27,0x13,0x20
0xE1,0xC0,0x0A,0x4E,0xAA,0x60,0x30,0x34,0x94,0x84,0x27,0x13,0x28
0xE1,0xC0,0x0A,0x4E,0xAA,0x60,0x38,0x34,0x94,0x84,0x27,0x13,0x30
0xE1,0xC0,0x0A,0x4E,0xAA,0x70,0x30,0x34,0x94,0x84,0x27,0x13,0x38

0xE1,0xC0,0x0A,0x4F,0x8A,0x70,0x30,0x14,0x9C,0x81,0x25,0x12,0xFB
0xE1,0xC0,0x0A,0x4F,0xAA,0x70,0x30,0x14,0x9C,0x81,0x25,0x12,0x1B
0xE1,0xC0,0x0A,0x0E,0xAA,0x70,0x30,0x34,0x94,0x85,0x27,0x13,0xF9
0xE1,0xC0,0x0A,0x0E,0x8A,0x60,0x38,0x34,0x94,0x85,0x27,0x13,0xD1



评论

您可以从设备中提取代码,还是可以使用固件更新?关于接收方的类似问题。

其PIC单片机没有可用的固件,并且启用了代码保护位,接收器相同。射频端是cc1101,但未启用其数据包控制功能,因此它们正在处理图片中的所有内容。

#1 楼

校验和算法确实很简单。它以模0xFF的形式添加所有有效载荷字节,然后添加26。

我编写了一个脚本对其进行测试:
样本进入input.txt并全部通过。

至于我是如何发现的,我在Google上搜索了同步字(不知道那是什么),还有1字节的校验和和其他一些帖子中提到的简单加法。我还测试了多个CRC8变体,但没有一个起作用。我还发现它表明校验和似乎反映了输入中的变化,例如: -我认为-对于CRC来说不那么明显。

评论


谢谢!我真的很感激您的时间,并且我也对该算法进行了稍微的修改,并且确实表现出魅力。

–拉茨·阿提拉(RáczAttila)
18年5月14日在19:10

@RáczAttila您必须进行什么修改?

–伊戈尔·斯科钦斯基♦
18年5月15日在6:05

因为我使用了python2.7,所以binascii方法不起作用。我必须使用data = line.split(“,”)和校验和+ = int(c,16)。

–拉茨·阿提拉(RáczAttila)
18年5月15日在7:23