我正在尝试确定大端系统上 32 字节受保护内存部分背后的算法。即使更改了一个位,它也会变得无效,但我可以生成任意数量的有效 32 字节消息。
这里显示了各种示例数据。我相信最后 4 个字节是校验和。所有这些都被算法接受。
00000000000000000000000000000000000000000007478A000101004892B760
F0000000000000000000000000000000000000000002D8DF00010100C9E23610
3065C0000000000000000000000000000000000000006F850001010060EB9F07
FFFFFFFF03FC6BBD000000000000000000000000000000000001010070B88F3A
FFFFFFFF0397E33D340C804138458C5006060968570C214B0001017AE8F416FE
我能够创建一堆几乎没有差异的自定义消息。似乎它不可能是 CRC-32。
FFFFFFFF01671F7E000000000000000000000000000000000001010021E4DE0E (00)
FFFFFFFF01671F84000000000000000000000000000000000001010021EADE08 (01)
FFFFFFFF01671F88000000000000000000000000000000000001010021EEDE04 (02)
FFFFFFFF01671F86000000000000000000000000000000000001010021ECDE06 (03)
FFFFFFFF01671F8C000000000000000000000000000000000001010021F2DE00 (04)
FFFFFFFF01671F8A000000000000000000000000000000000001010021F0DE02 (05)
FFFFFFFF01671F86000000000000000000000000000000000001010021ECDE06 (06)
FFFFFFFF01671F8C000000000000000000000000000000000001010021F2DE00 (07)
FFFFFFFF01671F90000000000000000000000000000000000001010021F6DDFC (08)
所有输入字节都相同,除了在每条消息中增加 1 的一个字节。
这是 50 对左右的列表。
基本上,是否有任何分析方法可以应用于一组数据以确定算法的某些属性?我可以生成任意数量的这些消息,并验证它们是否被接受。
编辑:通过移动一位,我注意到 0x04 被添加到两个字节,但减去另一个(F84 -> F88,1EA -> 1EE,E08 -> E04)。经过一些实验(主要是加减不同的值并测试它们),我很幸运,结果是前十四个 16 位字的总和。用 0xFFFF 对总和进行 AND 掩码,该值等于第 15 个字(例如,第一个消息中的 21EA)。然后从 0xFFF2 中减去该值以生成消息中的第 16 个字。
FFFFFFFF01671F84000000000000000000000000000000000001010021EADE08
FFFFFFFF01671F88000000000000000000000000000000000001010021EEDE04