ZIPファイルシグネチャ — マジックバイト
ZIPファイルのマジックバイト(PKヘッダー)と、hexダンプでZIPアーカイブを識別する方法を学びます。ローカルファイルヘッダー、セントラルディレクトリ、関連フォーマットをカバーします。
File Signatures
Hex
50 4B 03 04
ASCII
PK..
詳細な説明
ZIPファイルはシグネチャ50 4B 03 04で始まります。これは"PK"に続いてバイト03 04が来ます。"PK"はZIP形式とPKZIP圧縮ユーティリティの作成者Phil Katzの名前を表します。この4バイトシグネチャはローカルファイルヘッダーの先頭をマークし、ZIPアーカイブの最初の構造です。
PKシグネチャファミリー:
ZIP形式は、異なる内部構造をマークするために複数の"PK"シグネチャを使用します:
| Hex | ASCII | 構造 |
|---|---|---|
50 4B 03 04 |
PK.. | ローカルファイルヘッダー(ファイルエントリの開始) |
50 4B 01 02 |
PK.. | セントラルディレクトリファイルヘッダー |
50 4B 05 06 |
PK.. | セントラルディレクトリの終了レコード |
50 4B 07 08 |
PK.. | データディスクリプタ |
50 4B 06 06 |
PK.. | ZIP64セントラルディレクトリの終了 |
ローカルファイルヘッダーの構造:
4バイトシグネチャの後、ローカルファイルヘッダーには以下が含まれます:
- バイト4-5: 展開に必要なバージョン
- バイト6-7: 汎用ビットフラグ
- バイト8-9: 圧縮方法(
08 00= Deflate、00 00= 無圧縮) - バイト10-13: 最終更新日時(MS-DOS形式)
- バイト14-17: CRC-32チェックサム
- バイト18-21: 圧縮サイズ
- バイト22-25: 非圧縮サイズ
- バイト26-27: ファイル名の長さ
- バイト28-29: 拡張フィールドの長さ
内部的にZIPを使用するフォーマット:
多くの現代のファイル形式は、実際には異なる拡張子のZIPアーカイブです:
- .docx, .xlsx, .pptx — Microsoft Office Open XMLドキュメント
- .odt, .ods, .odp — OpenDocument形式ファイル
- .jar — Javaアーカイブファイル
- .apk — Androidアプリケーションパッケージ
- .epub — 電子出版書籍
これらすべてが50 4B 03 04シグネチャで始まります。これらのいずれかを.zipにリネームして、標準ZIPユーティリティで開くことができます。
hexエディタでの検出:
未知のバイナリデータを分析する際、50 4B 03 04の検索は最も一般的な操作の1つです。非常に多くの形式がZIPベースであるため、このシグネチャはフォレンジック調査、マルウェア分析、データ復旧のシナリオで頻繁に現れます。
ユースケース
ZIPシグネチャ検出は、ファイルアップロードセキュリティ(アップロードされたファイルが宣言されたタイプと一致するかの確認)、ディスクイメージからのフォレンジックデータカービング、アーティファクトの整合性を検証するビルドパイプラインにおいて重要です。