ZIPファイルが次のバイトで始まることを読みました。
50 4B 03 04
参照:http ://www.garykessler.net/library/file_sigs.html
質問:ZIPファイルがパスワードで保護されていることを示す特定のバイトシーケンスはありますか?
ZIPファイルが次のバイトで始まることを読みました。
50 4B 03 04
参照:http ://www.garykessler.net/library/file_sigs.html
質問:ZIPファイルがパスワードで保護されていることを示す特定のバイトシーケンスはありますか?
ZIP ファイルが必ず先頭にあるというのは正しくありません
50 4B 03 04
zip ファイル内のエントリ50 4B 03 04...
は .. で始まり、 多くの場合、純粋な zip ファイルはファイルの最初にある zip エントリで始まります。ただし、zip ファイルがこれらのバイトで始まる必要はありません。これらのバイトで始まるすべてのファイルはおそらくzip ファイルですが、すべての zip ファイルがそれらのバイトで始まるわけではありません。
たとえば、PE-COFF ファイルである通常の EXE である自己解凍型アーカイブを作成できます。このファイルには、実際にはファイルの署名があり、4D 5A ...
. その後、exe ファイルの後半に、.zip で始まる zip エントリを保存できます50 4B 03 04...
。ファイルは .exe と .zip の両方です。
で始まらない zip ファイルのクラスは、自己解凍型アーカイブだけではありません50 4B 03 04
。この方法で、zip ファイル内の任意のデータを「隠す」ことができます。WinZip やその他のツールは、この方法でフォーマットされた zip ファイルを問題なく読み取ることができます。
ファイル内に署名が見つかった場合50 4B 03 04
は、ファイルの先頭または別の場所にある場合、次の数バイトを調べて、その特定のエントリが暗号化されているかどうかを判断できます。通常は次のようになります。
50 4B 03 04 14 00 01 00 08 00 ...
最初の 4 バイトはエントリ署名です。次の 2 バイトは、「抽出に必要なバージョン」です。この場合は 0x0014 で、これは 20 です。pkware 仕様によると、これは、エントリを抽出するために pkzip 仕様のバージョン 2.0 が必要であることを意味します。(エントリで使用されている最新の zip "機能" は、仕様の v2.0 で説明されています)。zip ファイルでより高度な機能が使用されている場合は、より高い数値を見つけることができます。AES 暗号化には v5.1 の仕様が必要であるため、そのヘッダーに 0x0033 が含まれているはずです。(すべての zip ツールがこれを尊重するわけではありません)。
次の 2 バイトは、汎用ビット フラグを表します (仕様ではビット フィールドですが、「ビット フラグ」と呼ばれています)。この場合は 0x0001 です。これにはビット 0 が設定されており、エントリが暗号化されていることを示します。
そのビットフラグの他のビットには意味があり、設定することもできます。たとえば、ビット 6 は、強力な暗号化 (AES またはその他のより強力な暗号化) が使用されたことを示します。ビット 11 は、エントリがファイル名とコメントに UTF-8 エンコーディングを使用していることを示しています。
この情報はすべて、PKWare AppNote.txt 仕様で入手できます。
パスワードで保護されているのは、zipアーカイブ内の基になるファイルです。一連のパスワードで保護されたファイルとパスワードで保護されていないファイルをアーカイブに含めることができます(たとえば、readmeファイルとその内容)。
参照するURLのZIPファイルを説明するリンクをたどると、ZIPアーカイブ内のファイルが暗号化されているかどうかを示すビットについて説明していることがわかります。アーカイブ内の各ファイルは、個別に暗号化できるかどうかはわかりません。