gpt4 book ai didi

windows-ce - 确定 Windows CE 可执行文件使用的 16 位 CRC/校验和算法的方法?

转载 作者:行者123 更新时间:2023-12-02 20:23:59 25 4
gpt4 key购买 nike

我需要对 Windows CE 可执行文件实现的 CRC/校验和算法进行逆向工程。作为专有协议(protocol),它没有提及 CRC/校验和算法。但是,有一个控制台界面可以报告正确/计算出的校验和,如果消息协议(protocol)正确,我可以使用随机位构建自己的消息:

我观察到,

  • 更改消息中的单个位会完全更改校验和字节。

  • 算法似乎与位置相关,因为我在各种消息数据位置中输入了一些单个 1 位消息,其余位为零,并且所有时间控制台都报告了不同的校验和。如果它是简单的附加校验和,校验和将是相同的。

我应用了常见的 XOR、LRC、加性校验和算法、常见的 CRC 多项式(Standard、CCITT、X-modem)并完成了 [CRC 逆向工程论文][2],但不幸的是,由于消息类型,我无法推导多项式已修复,因此无法创建单个 1 位消息。

我的问题:

  1. 是否有任何 CRC/校验和算法属性可供我针对消息进行测试,以确定算法是基于校验和还是基于多项式的 CRC?

  2. 有没有办法将程序反汇编中看到的错误消息与相应的汇编指令关联起来?

  3. 当反汇编代码在控制台上报告正确的校验和时,有哪些方法可以调试/查明反汇编代码?内存转储什么的?

最佳答案

尝试CRC RevEng 。对您的数据进行的一些快速尝试没有结果,但我并没有非常努力。考虑不仅尝试所有十个消息字节,还尝试最后八个和最后六个。

此外,您还可以在同一站点找到 most comprehensive list of known CRCs据我所知。

更新:

这很可能是某种 CRC,或者至少是 GF(2) 上的线性运算。它具有 CRC 所具有的属性:如果两个序列具有相同的异或,则它们的 CRC 也具有相同的异或。例如,从您的数据中(删除公共(public)前缀,但请注意,包含前缀或其一部分不会更改结果):

00000000000122b5 ^ 0000000000022421 = 0000000000030694
0447080a300130A1 ^ 0447080a30023635 = 0000000000030694

0447080a300130A1 ^ 0447080a30043A36 = 0000000000050a97
00000000000122b5 ^ 0000000000042822 = 0000000000050a97

考虑到这一事实,有一种方法可以让您构建一个例程来计算校验值,而无需确定它是否是 CRC 或 CRC 参数是什么。

为所有单位消息生成 16 位校验值,即在消息数据的六个字节中设置一个位,其余消息数据位为零。这些消息是该线性场的一组完整的基向量。其中有 48 个。还生成全零消息的校验值。您已经开始了,全零给出 2020,最后一位设置给出 22b5 等。独占或全零的检查值 (2020 )与其他人。您现在有 49 个值,其中 48 个用于基向量,一个是零向量的校正(由于 CRC 和前缀字节的预处理和后处理,该值可能为非零)。例如,最后一位设置的基向量的值为0295

现在您可以使用这 49 个值来计算任何六字节消息的校验值。该消息中设置为 1 的所有相应位的值进行异或运算。异或检查值为零。结果将是该消息的检查值。

关于windows-ce - 确定 Windows CE 可执行文件使用的 16 位 CRC/校验和算法的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12438495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com