找到这些有效载荷-crc 对的哈希算法

逆向工程 CRC
2021-06-17 10:39:38

我有一个 LED 面板的遥控器,它发送以下 4 个字节的数据和最后一个字节的某种 CRC/计数器字节。我已经知道前 2 个字节是 remote-id,第三个字节是 panel-id,第四个字节是 command-id。最后一个字节以某种方式与前 4 个字节相关联地计算,并且在重复按下按钮时不会改变。

我已经尝试使用reveng -w 8 -s [some samples]查找算法,但没有成功。

也许有人可以帮助找到计算这些有效载荷字节的最后一个字节的正确方法,甚至可以解释它是如何被发现的:

FFCC0000CB
FFCC0001CA
FFCC0002C9
FFCC0003C8
FFCC0004CF
FFCC0005CE
FFCC0006CD
FFCC0007CC
FFCC0008C3
FFCC0009C2
FFCC000AC1
FFCC000BC0
FFCC000CC7
FFCC000DC6
FFCC000EC5
FFCC000FC4
FFCC0010DB
FFCC0011DA
FFCC0012D9
FFCC0013D8
E8D6630021
E8D6630120
E8D6630223
E8D6630322
E8D6630425
E8D6630524
E8D6630627
E8D6630726
E8D6630829
E8D6630928
E8D6630A2B
E8D6630B2A
E8D6630C2D
E8D6630D2C
E8D6630E2F
E8D6630F2E
E8D6631031
E8D6631130
E8D6631233
E8D6631332
FFCC0300CE
FFCC0301CF
FFCC0302CC
FFCC0303CD
FFCC0304CA
FFCC0305CB
FFCC0306C8
FFCC0307C9
FFCC0308C6
FFCC0309C7
FFCC030AC4
FFCC030BC5
FFCC030CC2
FFCC030DC3
FFCC030EC0
FFCC030FC1
FFCC0310DE
FFCC0311DF
FFCC0312DC
FFCC0313DD
1个回答

根据提供的数据,它似乎是一个非常简单的检查,第 5 个字节是前 3 个字节与第 4 个字节的异或之和。

// input bytes
byte b[4];

// check byte
byte c = ( b[0] + b[1] + b[2] ) ^ b[3];

添加我是如何解决的 -

首先,我观察到第 4 个字节中单个位的变化翻转了检查字节中的同一位。这是明显的异或行为。第 4 个字节与校验字节的异或结果不依赖于第 4 个字节。这证明这就是第 4 个字节的合并方式。

在这一点上,我认为这会很困难,因为一旦您排除了第 4 个字节,您就只提供了前 3 个字节的 3 个不同示例。

但是,在您的第一个示例中,FF+ CC=很突出CB

然后我用你的第二组例子尝试了前 3 个字节的总和,幸运的是,它也有效。 E8+ D6+ 63=21

对其余示例的快速检查表明这对他们也有效。