我试图找出 RAR恢复记录标题中的 crc32 字段基于哪些数据。我正在尝试根据以前的 RAR 卷和提取的内容重新创建 RAR 卷。我已经到了只有 12 个字节与正确/原始卷不同的程度。
这些名称基于unrar 源代码(arcread.cpp) 或RAR 技术说明。
RAR 文件由块组成。它们有一个标题和一个正文:
[header][body]
标头包含描述正文的元数据。这些块之一是 HEAD_TYPE=0x74文件头(档案中的文件)。
[header:a...FILE_CRC...z][body]
字段 FILE_CRC(4 个字节)是根据 [body] 中的所有可用数据计算的,它是一个存储或压缩文件。
恢复记录的块(HEAD_TYPE=0x7a 子块)与文件块非常相似,但它在标头中包含三个额外的字段:
[header:a...FILE_CRC...z, "Protect+", rsc, dsc][body]
rsc: recovery sector count (4 bytes)
dsc: data sector count (8 bytes)
assert dsc*2 + rsc*512 == size([body])
你会认为这个块的 FILE_CRC 是基于正文中的数据,就像文件块一样,但事实并非如此。(由其他人独立验证)所以我的问题是,用什么数据来计算这个 crc32?
我已经尝试过的一些事情:
- 从 Protect+ 等开始。其次是身体
- RR 子块开始之前的所有内容
- 我在一个小 RAR 文件中强制使用了所有可能的范围。