我有一个旧的、不再生产的带有串行端口的电子设备。我正在尝试对该设备中使用的数据包 CRC/校验和/哈希进行逆向工程。
任何有敏锐的眼睛,敏锐的数学技能的人都可以破解这个东西吗?
这是我到目前为止所知道的......
- 每个数据包总是 21 个字节。19 个字节的数据加上 2 个字节用于 CRC/校验和/哈希
- 因此,这里没有长度或标题字节。哈希计算涉及所有 19 个字节。
- 我有能力用设备生成一定数量的数据包
- 我的第一个想法是数据包有某种 CRC-16 计算
- 所以我遵循了www.cosc.canterbury.ac.nz/greg.ewing/essays/CRC-Reverse-Engineering.html中的反转提示
验证我的数据包样本符合上述网页链接中概述的“叠加原理”。这表明它们具有数学 XOR 关系。
开始感觉很好……但在那之后就难住了。无法确定 CRC-16 多项式。这些数据包哈希很可能与 CRC 无关,而是一些自制方案。
通读 Ross N. Williams 的“CRC 错误检测算法的无痛指南”
- 见http://www.ross.net/crc/download/crc_v3.txt
- 还使用的应用程序:CRC Reveng – 逆向工程应用程序
- 见 reveng.sourceforge.net
- 还是没有运气...
不幸的是,我无权访问任何设备源/二进制代码
还进行了测试以查看是否使用了其他哈希值,例如 Fletcher 的校验和
这是我的数据包的各种样本。
0x47366B2EE00000000000751CEB5F3469543B585E2D
0x47366B2ED00000000000751CEB5F3469543B582A2C
0x47366B2EC80000000000751CEB5F3469543B580B2B
0x47366B2EC40000000000751CEB5F3469543B58BB2A
0x47366B2EC20040000000751CEB5F3469543B58DFE7
0x47366B2EC10000000000751CEB5F3469543B58A328
0x47366B2EC08000000000751CEB5F3469543B584127
0x47366B2EC04000000000751CEB5F3469543B588126
0x47366B2EC02000000000751CEB5F3469543B580525
0x47366B2EC01000000000751CEB5F3469543B580124
请注意以下关于这些数据包的...
- 在数据包的最后 2 个字节上找到 CRC。
- 如果我查看逻辑分析仪上的位,我已将字节表示为 MSB-first
- 因此,数据包 0x47366B2EE00000000000751CEB5F3469543B585E2D 在二进制中被视为:
- 01000111 .................................................... ............00101101
(0x47).................................................. ......................(0x2D)
我不知道我的系统是大端还是小端,但相当确定的字节是 LSB 优先的
- 请注意,对于上述 10 个数据包样本,每个数据包的不同之处在于 1 个位移至 10 个位位置。除了第 5 个数据包,我必须更改 2 位
查看数据包的 0x47366B2E 部分之后的数据字节。
我看到的唯一模式是每个数据包的最后一个字节减一(2D,2C,...)。(除了第 5 个数据包,我必须更改 2 位)
- 最后一个字节不是某种序列号,因为我可以随时以相同的值生成它们。
- 但它可能会提示使用的数学哈希。
任何帮助表示赞赏!