一些校验和算法的逆向工程

逆向工程 CRC
2021-06-20 23:52:00

我试图在 433 Mhz 频率上反转发射器(由 PCF7952 芯片控制)和接收器之间的一些通信协议

我知道如何准备将接收到的“正确”包,接收方的控制器 100% 将通过此命令执行操作。

但是,命令的最后 2 位对我来说是未知的,它似乎是某种校验和 / crc(但为什么它只有 2 位?)

现在,每次我发送 4 个具有相同“正文”但最后是 00、01、11、10 的命令时。

其中一个最终为接收器工作,但目标是从第一次尝试开始执行命令(现在第一次尝试成功的概率为 25%,绝对是因为最后 2 位错误)

我曾经认为发射器使用标准的 CRC 计算方法,程序只是从为命令主体生成的 CRC8/CRC16/CRC32 序列中添加了一些较低的位。

我尝试使用来自http://www.lammertbies.nl/comm/info/crc-calculation.html 的可能的 CRC 算法,但在这些序列中没有找到任何正匹配

我也试图检查任何奇偶校验位算法也没有运气

这是位序列的样本(最后 2 位是校验和(可能),从末尾开始的第三位始终为 0,至少在我抓取的 2200 个样本中),它们是从工作设备(发射机)中抓取的

0111 1001 1101 1011 0001 1000 1100 0111 1100 1010 1010 1001 1010 1010 1101 10 010
0111 1001 1101 1011 0001 1000 1100 0111 1100 0100 1111 0101 0100 1101 0101 11 000
0111 1001 1101 1011 0001 1000 1100 0111 1100 1010 1010 1011 1010 1000 1111 10 011
0111 1001 1101 1011 0001 1000 1100 0111 1100 0100 1101 1101 1101 0101 1010 01 010
0111 1001 1101 1011 0001 1000 1100 0111 1100 1011 0011 0011 1011 0000 1111 10 010
0111 1001 1101 1011 0001 1000 1100 0111 1100 0101 1111 1101 1101 1101 1100 11 010
0111 1001 1101 1011 0001 1000 1100 0111 1100 0101 1111 1111 1111 1101 1110 11 001
0111 1001 1101 1011 0001 1000 1100 0111 1100 1100 1000 0000 0101 0000 0011 01 011
0111 1001 1101 1011 0001 1000 1100 0111 1100 1010 0110 0010 0010 0100 0011 11 010
0111 1001 1101 1011 0001 1000 1100 0111 1100 1100 1000 1000 1101 0000 1011 01 010

这里也是抓取了所有位序列的文件 - https://drive.google.com/file/d/0B6VO67TWi9UOSkt4VHJNQmtSTXc/view

老实说,我不知道还能去哪里找。

任何提示/帮助或任何东西都非常感谢。

1个回答

(我试图将此添加为评论,但没有足够的声望点)

我注意到连续校验和 {00,00,10,00,10} 在前 1100 个样本中重复 21 次,其中 8 次,中间有 19 个样本,而数据保持随机/不同。

例如

00,00,10,00,10 模式的重复

这让我想知道校验和是否可能基于时间/时钟?只有 2 位校验和重复当然是很有可能的,但不确定到这种程度是否“只是巧合”。

{11,01,11,11,01}也有很多重复。不确定这是否有帮助,这只是我注意到的。