【问题标题】:Reverse engineer checksum/CRC for RF packetsRF数据包的逆向工程校验和/CRC
【发布时间】:2015-10-24 13:33:51
【问题描述】:

祝所有黑客们美好的一天。 我一直在试图找出一种用于射频传输的校验和算法,但经过几个小时,仍然没有运气。 我试图“破解”的设备是“Milux RF 恒温器”,品牌为 LHZ Lucht,由 Watts 制造……它以 433mhz 的频率进行通信。我设法理解了协议以从中获取无意义的(=十六进制)值。当然,我在谷歌上找不到任何关于上述内容的信息。 我包括一些捕获的传输 - 最后一个字节是校验和。 Start 始终为 FFFFFE(可能出于同步原因),因此不确定是否将其包含在校验和中。 我尝试“reveng”对 CRC、一些常用算法(sum、xor 等)进行逆向工程,但没有运气。

FFFFFE0200A31F00BF010C6494 FFFFFE0200A31F00BF010F6458 FFFFFE0200A31F00C4010D64F0 FFFFFE0200A31F00C100AB0084 FFFFFE0200A31F00C400A800AA FFFFFE0200A31F00CC010F6450 FFFFFE0200A31F00CE010F64F8 FFFFFE0200A31F00CE010E641E FFFFFE0200A31F00CE00670048 FFFFFE0200A31F00CE010D64D2 FFFFFE0200A31F00CE00650062 FFFFFE0200A31F00CE00640084 FFFFFE0200A31F00CE010C6434 FFFFFE0300A31F00BF010C6472 FFFFFE0300A31F00BF010D6494 FFFFFE0300A31F00BF010E6458 FFFFFE0300A31F00BF010F64BE FFFFFE0300A31F00CC010C647A FFFFFE0300A31F00CC010E6450 FFFFFE0300A31F00CC010D649C FFFFFE0300A31F00CC010F64B6 FFFFFE0300A31F00CE010F641E FFFFFE0300A31F00CE010D6434 FFFFFE0300A31F00CE010E64F8 FFFFFE0300A31F00CE010C64D2 FFFFFE0200A31F00CE000000A8 FFFFFE0200A31F00CC010E64B6 FFFFFE0300A31F00CC010E6450 FFFFFE0300A31F00CC010C647A FFFFFE0300A31F00CC010F64B6 FFFFFE0300A31F00CC010D649C FFFFFE0300A31F00CC010F64B6 FFFFFE0300A31F00CC010D649C FFFFFE0300A31F00CC010C647A FFFFFE0300A31F00CC010C647A FFFFFE0300A31F00CC010E6450 FFFFFE0300A31F00CC010D649C FFFFFE0300A31F00CC010D649C FFFFFE0300A31F00CC010F64B6 FFFFFE0300A31F00CC010E6450 FFFFFE0300A31F00CC010E6450 FFFFFE0300A31F00CC010C647A FFFFFE0300A31F00CC010F64B6 FFFFFE0300A31F00CC010F64B6 FFFFFE0300A31F00CC010C647A FFFFFE0300A31F00CC010D649C FFFFFE0300A31F00CC010D649C FFFFFE0300A31F00CC010F64B6 FFFFFE0300A31F00CC010E6450 FFFFFE0300A31F00CC010C647A FFFFFE0200A31F00CC010E64B6

任何帮助表示赞赏!

【问题讨论】:

  • 仅供参考,您的列表中有许多重复的消息。那里的 51 条消息中只有 27 条独特的消息。
  • 我投票决定将此问题作为离题结束,因为该问题应提交给制造商。

标签: reverse-engineering checksum crc


【解决方案1】:

最后一个字节不是前面消息的 CRC-8。

然而,最后一个字节是它前面的位的线性函数,至少在提供的示例消息中是这样。这里的“线性”是指最后一个字节中的八位中的每一位都是前一条消息中某个位子集的异或。

【讨论】:

  • 你能解释一下“线性”吗?我正在查看仅在一个字符上有所不同的样本,但校验和的差异不是线性的。此外,如果您取前两个样本,例如 FFFFFE0200A31F00BF010C6494 FFFFFE0200A31F00BF010F6458,则差异仅在于 C 和 F(在校验和的最低有效半字节的位置上),但校验和完全不同(第一个半字节也不同)。异或位不会这样做......
  • 这就是我所说的。末尾的八个校验位中的每一个都是前面消息中不同位子集的异或。至少该假设与您提供的数据不矛盾。判断的方法是异或两对不同的消息得到相同的消息结果,看看最后一个字节是否也相同。
  • 你是个天才,你在这里做点什么!异或 0200A31F00CC010F6450 ^ 0200A31F00CE00650062 和 0200A31F00CE00640084 ^ 0200A31F00CC010E64B6 给出完全相同的结果(2016A6432)。这是你的意思吗?它也适用于所有其他示例。这很有帮助。我不知道如何弄清楚什么是正确的位子集......这是某种常用的算法,可能有名字或其他东西吗?
  • 没错。它被称为“线性函数”,在这种情况下,在有限的伽罗瓦域 2,GF(2) 上。您没有提供足够接近的数据来确定位的子集。 (您的大多数消息位甚至在提供的数据中都不会改变。)检查值可能是由一种简单的算法生成的,该算法使用异或和移位/旋转组合消息的字节。找到它可能需要一些试验和错误。
  • 感谢您的帮助。我尝试了各种常见的算法,但没有什么能让我到任何地方。不幸的是,我没有更好的消息。我现在关注两条只有 1 位差异的消息 0300A31F00BF010C6472 和 0300A31F00BF010D6494(差异是 C/D,从末尾开始的第 3 个字节)。校验和虽然有 5 位不同......我无法计算出 xor/shift/etc 的任何组合。这将与仅 3 个字符产生 5 位差异(我假设消息的第一部分没有任何影响,因为在两种情况下都是相同的)......我的方向是否正确?
猜你喜欢
  • 2014-05-16
  • 2020-02-28
  • 2014-04-08
  • 2012-03-12
  • 2016-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-21
相关资源
最近更新 更多