我有一组数据字节及其 CRC 值可供我使用。我想知道它使用的CRC算法。
CRC 是 16 位长。
首先,我尝试使用 CRC RevEng 查找,但显示“未找到模型消息”。
然后我遵循了 Greg Ewing 撰写的CRC 逆向工程论文。
然后我发现我的数据集遵循叠加原理,所以我得出的结论是它使用了一些标准算法来计算CRC。
根据格雷格的论文:
从两个 1 位消息中获得的两个 CRC 值,其中 1 位位于相邻位置,它们的结果 CRC 仅相差一个移位异或周期。准确地说,如果 C1 对应于位置为 1 的消息
i,而 C2 对应于位置为 1 的消息i+1,则 C1 是通过对 C2 应用一个移位异或循环得出的。(如果这看起来倒退,那是因为 1 位离消息末尾越远,应用于 CRC 的移位异或周期就越多。)有两种可能。如果 C2 的前导位(即将移出的位)为 0,则 C1 将等于 C2 移一位。如果它是 1,那么 C2 将等于 C1 移位一位并与多项式异或。”
在我的情况下,多项式不是每次都一样。
我已经打印了不同消息的 CRC 值,它们在右移操作后的 LSB 和 CRC 值以及要进行异或的多项式值,以便从 C2 驱动 C1
我观察到我可以通过三个多项式值从 C2 获得 C1,这些值如上图 0x9008、0x8000、0x1008 所示
我不知道为什么它会有所不同。我被困在这一点上
我希望我能在这里得到更多关于逆向工程堆栈交换的提示。
罗伊
