RAR回復レコードのヘッダーにある crc32 フィールドがどのデータに基づいているかを調べようとしています。以前の RAR ボリュームと抽出した内容に基づいて RAR ボリュームを再作成しようとしています。正しい/元のボリュームとは 12 バイトしか違わないところまで来ています。
名前はunrar ソース コード(arcread.cpp) またはRAR 技術情報に基づいています。
RAR ファイルはブロックで構成されています。ヘッダーと本文があります。
[header][body]
ヘッダーには、本文を説明するメタデータが含まれています。これらのブロックの 1 つが HEAD_TYPE=0x74ファイル ヘッダー(アーカイブ内のファイル) です。
[header:a...FILE_CRC...z][body]
フィールド FILE_CRC (4 バイト) は、保存または圧縮されたファイルである [本体] で使用可能なすべてのデータで計算されます。
Recovery Recordのブロック(HEAD_TYPE=0x7a サブブロック) はファイル ブロックに非常に似ていますが、ヘッダーに 3 つの追加フィールドが含まれています。
[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+ ectから始めます。続いて体
- RR サブブロックの開始前のすべて
- 小さなRARファイルで可能なすべての範囲をブルートフォースしました。