PDFファイルシグネチャ — マジックバイト

PDFファイルシグネチャ(%PDF-)と、hexヘッダーバイトを調べてPDFファイルを識別する方法を理解します。バージョン検出と構造の概要を含みます。

File Signatures

Hex

25 50 44 46 2D

ASCII

%PDF-

詳細な説明

すべての有効なPDFファイルは、ASCII文字列%PDF-で始まるヘッダーから始まります。その後にバージョン番号が続きます。16進数では、シグネチャバイトは25 50 44 46 2Dで、このヘッダープレフィックスの5文字に直接マッピングされます。

バイトごとの内訳:

オフセット Hex ASCII 目的
0 25 % PostScript/PDF構文のコメント指示子
1 50 P
2 44 D
3 46 F
4 2D - バージョン番号前のセパレータ
5-7 可変 1.x or 2.0 PDFバージョン(例: 31 2E 37 で "1.7")

ヘッダー内のPDFバージョン:

%PDF-の直後に、ASCII テキストとしてバージョン番号が表示されます。一般的なバージョン:

  • %PDF-1.425 50 44 46 2D 31 2E 34(Acrobat 5時代)
  • %PDF-1.5 → オブジェクトおよびクロスリファレンスストリームをサポート
  • %PDF-1.7 → 最も広く使用されている現代のバージョン(ISO 32000-1)
  • %PDF-2.0 → 最新仕様(ISO 32000-2)

2行目 — バイナリコメント:

ヘッダー行の直後に、適切に構成されたPDFには、127を超える値のバイトを少なくとも4つ含むコメント行が含まれます(例: 25 E2 E3 CF D3)。これはファイル転送プログラムに、ファイルにバイナリデータが含まれており、プレーンテキストとして扱うべきではないことを伝えます。

PDF内部構造:

ヘッダーの後、PDFファイルは4つのセクションで構成されます:

  1. ボディ — オブジェクト(テキスト、フォント、画像、ページ記述)を含む
  2. クロスリファレンステーブル — すべてのオブジェクトのバイトオフセットインデックス
  3. トレーラー — ルートオブジェクトとクロスリファレンステーブルを指す
  4. EOFマーカー — ファイルは%%EOF25 25 45 4F 46)で終了

セキュリティへの影響:

PDFファイルにはJavaScript、埋め込みファイル、外部リンクを含めることができます。ファイルが実際にPDFであることを(拡張子に関係なく)識別することは、セキュリティスキャンにおいて重要です。一部のマルウェアは.pdf拡張子で実行可能ファイルを偽装しますが、hexシグネチャチェックで真のファイルタイプが即座に明らかになります。

ユースケース

PDFマジックバイト検出は、メールセキュリティゲートウェイでのPDF添付ファイルの識別、ドキュメント管理システムでのファイル検証、ディスクイメージからのPDFドキュメントの復元のためのフォレンジック分析に使用されます。

試してみる — Hex Editor

フルツールを開く