您的算法可能如下:
width=16 poly=0x1021 init=0xffff refin=true refout=true xorout=0xffff check=0x906e name="X-25"
对除前两个字节和后两个字节(CRC)之外的整个数据包进行操作。
玩巴卡鲁
如果 CRC RevEng 等 CRC 分析工具拒绝一组代码字,则值得从最小的一组开始并添加代码字,直到一个被拒绝,或者达到所需的确认强度。我只尝试使用 20 字节的数据包以避免任何并发症;前两个有结果,前三个也有结果,前四个没有。如果我跳过第四个数据包并添加第五个数据包,我仍然会得到答案:
$ reveng -w 16 -s "10020200C6FE2D00C5FE2D00047C000010038CEC" "10020200C5FE2D00C6FE2D00046D00001003DFA4" "10020200C6FE2D00C5FE2D00015B00531003C1C4" "10020200C5FE2D00C6FE2D00046E0000100313B9"
width=16 poly=0x1021 init=0xb37a refin=true refout=true xorout=0x0000 check=0x006b name=(none)
随机是罕见的
现在我有足够的信心尝试不同长度的数据包来获取 Init 和 XorOut。
$ reveng -w 16 -s "10020200C6FE2D00C5FE2D00047C000010038CEC" "10020200C5FE2D00C6FE2D00046D00001003DFA4" "10020200C6FE2D00C5FE2D00015B00531003C1C4" "10020200C5FE2D00C6FE2D00046E0000100313B9" "10020200C5FE2D00C6FE2D0001A405534B000D004B1003F50D"
width=16 poly=0x1021 init=0x7c90 refin=true refout=true xorout=0x07f0 check=0x5902 name=(none)
width=16 poly=0x1021 init=0x8c8f refin=true refout=true xorout=0xffff check=0x5902 name=(none)
对于这个多项式,得到一对结果是正常的。请注意 Check 值是相同的,因为这两个模型会产生相同的结果。其中之一具有xorout=0xffff,令人放心,因为它是典型的 XorOut 值。不过对应的Init值,0x8c8f有点出乎意料,但也不是不可能。
每当 Init 或 XorOut 值看起来“随机”时,值得再次查看数据包格式,以防某些字节毕竟没有进入 CRC 算法。这些意外的字节会抛出搜索代码并强制 Init 和/或 XorOut 值进行调整以适应它们。
我尝试从每个数据包的开头删除相同数量的字节,直到我得到这个:
$ reveng -w 16 -s "0200C6FE2D00C5FE2D00047C000010038CEC" "0200C5FE2D00C6FE2D00046D00001003DFA4" "0200C6FE2D00C5FE2D00015B00531003C1C4" "0200C5FE2D00C6FE2D00046E0000100313B9" "0200C5FE2D00C6FE2D0001A405534B000D004B1003F50D"
width=16 poly=0x1021 init=0xffff refin=true refout=true xorout=0xffff check=0x906e name="X-25"
CRC RevEng 正在搜索预设模型并找到匹配的模型;该命令可以重复使用-F以表明它没有袖手旁观。如上所述,该算法将与其功能相同的别名一起重新出现。因此,我们可以说我们之前拒绝的数据包可能有一个错字:
$ reveng -m x-25 -c 0200C6FE2D00C5FE2D00047D00001003
c8e7