CRC32逆向工程不知道参数,但知道输入值

逆向工程 CRC 散列函数
2021-06-16 11:41:41

亲爱的会员们,

我想弄清楚我拥有的一些十六进制 CRC32 值的参数。

这些值是:

Value - input (before hashing)
55D3028A - J
73AF2D02 - O
6742BE71 - T

我希望我能找出多项式和初始/最终 XOR 值,以便我可以散列我自己的值。

我正在使用 reveng 来获取散列我自己的字符串的参数,但我没有找到可行的解决方案。

我试过的命令:

  • ./reveng.exe -w 32 -q 40000000 -s 55d3028a 73af2d02 6742be71
  • ./reveng.exe -w 32 -p 40000000 -q 80000000 -s 55d3028a 73af2d02 6742be71
  • ./reveng.exe -w 32 -p 80000000 -q c0000000 -s 55d3028a 73af2d02 6742be71
  • ./reveng.exe -w 32 -p c0000000 -q 0 -s 55d3028a 73af2d02 6742be71
  • ./reveng.exe -w 32 -l -s 55d3028a 73af2d02 6742be71

是否可以使用输入值和给定的 crc 来蛮力/计算参数,或者是否有人知道其他方法来实现相同的目标。

提前致谢,

EvilID

1个回答

我想尝试一下,因为它看起来很有趣,但我没有成功。

不过,也许这会引导您朝着正确的方向进行进一步的测试。

我开始阅读一些关于 CRC 的介绍材料:

http://www.sunshine2k.de/articles/coding/crc/understanding_crc.html

还有这个,其他人试图对 CRC 进行逆向工程:

https://www.cosc.canterbury.ac.nz/greg.ewing/essays/CRC-Reverse-Engineering.html

以大致了解我们正在处理的内容。然后我正要写一些小的 Z3 脚本,但幸运地偶然发现

https://github.com/DennisYurichev/yurichev.com/blob/master/blog/CRC_cracker_Z3/CRC_cracker.py

此处描述:https : //yurichev.com/blog/CRC_cracker_Z3/

基本上,这是一个使用 Z3(微软的定理证明器)来计算 CRC 和的脚本,它试图找到多项式,测试大端和小端解释,以及是否反转输入/输出。您为其提供输入数据和它们必须生成的 CRC 总和,然后它会告诉您参数。

不过,那个脚本并没有为我产生结果。这要么意味着它不是 CRC,不是 32 位 CRC,输入/输出的修改超出了简单的反转,或者提供的样本不仅仅是您列出的 3 个字母。

我也找不到任何匹配的公开参数集(例如 CRC32C),为此我使用https://pycrc.org/测试了一些参数集

如果您的实际目标是重新创建校验和,我现在可能会对代码进行逆向工程,而不是将其视为黑盒。