我有一个客户的损坏的应用程序正在尝试修复,但是原始代码已丢失,我正在尝试对其进行重新设计。它涉及将140个数据块(每个块768字节)下载到设备。数据中有一个“校验和”,由16个字节的数据组成,大概覆盖了所有140个块或可能覆盖了一些小子集(无法得知)。
如果我仅更改数据中的1位,则“校验和”的整个16个字节都会更改。我要寻找的是有关如何计算“校验和”的想法。
示例:
在块24中,偏移量为0x116
,我将两个字节从0xe001
更改为0xe101
,并且“校验和”数据从以下位置更改:
53 20 5a 20 3e f5 38 72 eb d7 f4 3c d9 0a 3f c5
对此:
7f fe ad 1f cc c3 1e 3c 22 0a bf 6a 6d 03 ad 97
如果有一些线索,我可以尝试一下,他们可能如何计算此“校验和”。
正在寻找使我入门的任何想法。
答案 0 :(得分:0)
部分答案:
大概覆盖了所有140个块或一个小子集(无法 知道)
如果我只更改数据中的1位,则整个16个字节 “校验和”发生了变化。
遍历数据的每个位,依次修改每个位,并查看校验和是否更改。然后,您可以找出要散列的子集(如果有)。
一旦知道了这一点,便可以提出已知的输入/输出对。您可以将已知输入插入工具,该工具将使用众所周知的哈希算法(例如,http://www.toolsvoid.com/multi-hash-generator-这是我从Google获得的第一笔收入,不一定是最全面的)来生成输出。
编辑:根据对问题的评论,如果有盐,这将不起作用。但是至少它将很快排除最简单的情况。