Windows ce 确定Windows CE可执行文件使用的16位CRC/校验和算法的方法?
我需要对windows CE可执行文件实现的CRC/校验和算法进行反向工程。作为专有协议,它没有提到任何关于CRC/校验和算法的内容。但是,有一个控制台接口报告正确/计算的校验和,如果消息协议正确,我可以用随机位构造自己的消息: 我注意到,Windows ce 确定Windows CE可执行文件使用的16位CRC/校验和算法的方法?,windows-ce,reverse-engineering,checksum,crc,disassembly,Windows Ce,Reverse Engineering,Checksum,Crc,Disassembly,我需要对windows CE可执行文件实现的CRC/校验和算法进行反向工程。作为专有协议,它没有提到任何关于CRC/校验和算法的内容。但是,有一个控制台接口报告正确/计算的校验和,如果消息协议正确,我可以用随机位构造自己的消息: 我注意到, 更改消息中的单个位会完全更改校验和字节 算法似乎是位置相关的,因为我在不同的消息数据位置提供了一些单1位消息,其余的位为零,并且控制台一直报告不同的校验和。若它是简单的加法校验和,那个么校验和应该是相同的 我应用了常见的异或、LRC、加法校验和算法、常见
- 更改消息中的单个位会完全更改校验和字节
- 算法似乎是位置相关的,因为我在不同的消息数据位置提供了一些单1位消息,其余的位为零,并且控制台一直报告不同的校验和。若它是简单的加法校验和,那个么校验和应该是相同的
2020
,最后一个位集给出了22b5
,等等。互斥或所有零(2020
)的检查值与其他每个零的检查值。现在有49个值,其中48个是基向量,一个是零向量的校正值(这很可能是由于CRC和前缀字节的预处理和后处理导致的非零)。例如,最后一位设置的基向量的值为0295
现在,您可以使用这49个值来计算任何六字节消息的检查值。异或将该消息中设置为1的所有对应位的值加在一起。异或,检查值为零。结果将是该消息的检查值。我认为这也应该标记为[反向工程]。将“算法”标记替换为“反向工程”我需要一些帮助,请您详细说明,我是否需要按位位置保留检查值的查找表?下面是checksum.txt中前5条消息的基本向量;最后一个位集,第二个最后一个位集等等…(1):2020^22b5=0295(2):2020^2421=0401(3):2020^2822=0802(4):2020^3024=1004(5):2020^0028=2008是。您需要一个包含48个检查值的表,每个位位置一个。当您将该表中对应于消息中1位的条目排他或组合在一起时,您将使用0x2020对答案执行另一个排他或操作。
00000000000122b5 ^ 0000000000022421 = 0000000000030694
0447080a300130A1 ^ 0447080a30023635 = 0000000000030694
0447080a300130A1 ^ 0447080a30043A36 = 0000000000050a97
00000000000122b5 ^ 0000000000042822 = 0000000000050a97