パート3
はじめに
前回の記事では、保護MBRとGPTヘッダーを調べることで、GUIDパーティションテーブル(GPT)を理解するための基礎を築きました。さて、パート3では、GPTパーティションエントリアレイに焦点を当てます。このGPTスキーマの重要なコンポーネントは、ディスク上のすべてのパーティションの詳細なマップを提供し、各エントリは特定のパーティションに関する重要な情報を保持します。GPTパーティションエントリアレイの構造と機能を理解することで、GPTがどのようにパーティションを管理しているかを包括的に把握できるようになり、より効果的な分析、トラブルシューティング、データ復旧が可能になります。
GPT(GUIDパーティションテーブル)パーティションエントリーの配列
GUIDパーティションテーブル(GPT)エントリーアレイは、ハードディスク上のパーティションを定義・管理するために使用されるGPTパーティションシステムの重要な部分です。GPTエントリー・アレイは、ハードディスク上のパーティションを定義・管理するために使用されるGPTパーティション・システムの重要な部分であり、ディスク上の各パーティションの詳細を記録する詳細なリストであると考えてください。
GPTエントリー配列の主な構成要素:
パーティションGUID:各パーティションにはパーティションGUIDと呼ばれる一意の識別子があり、異なるシステム間でも各パーティションを一意に識別できるようになっています。
ユニークID:これは各パーティションに固有のもう1つのユニークな識別子で、ユニークな識別の追加レイヤーを提供する。
パーティションのLBA(論理ブロックアドレス)の開始:ディスク上のパーティションの開始点を示します。パーティションがどこから始まるかをシステムに知らせます。
パーティションの終了LBA:開始LBAと同様、パーティションがディスク上のどこで終わるかを示します。
属性ビット:パーティションがブート可能かどうか、特別な属性を持っているかどうかなど、パーティションに関する追加情報を提供するフラグです。
パーティション名:各パーティションには人間が読める名前を付けることができ、パーティションの目的や内容を簡単に識別できるようにします。この名前は文字列の終わりを示すヌル文字で終端されます。
配列の各エントリーを完全に理解するために、これらすべてを詳しく説明しよう。


ディスクがGPTディスクとしてセットアップされると、最初に作成されるパーティションはEFIシステムパーティション(ESP)です。このパーティションはユーザーには利用しにくい隠しパーティションです。このパーティションはセクター2048にあり、すべてのシステム(Windows、Linux、MacOS)との互換性のためにFAT32としてフォーマットされます。
上のスクリーンショットは、Microsoft Reservedパーティションと、インストール時にユーザーが指定した1つのBasic Dataパーティションが作成された、標準的なWindows 10のインストールを示しています。

以下は、ウィキペディアのGUIDパーティションテーブルのページにある表からのGUIDの抜粋である:

ソース https://en.wikipedia.org/wiki/GUID_Partition_Table#Partition_type_GUIDs
もちろん、GUIDは、16進ビューア内で値を表示するときにGUIIDフォームに保存されません。

GUIDは前回のブログ記事で行ったのと同様に変換されるが、HxDで表示すると簡単に見ることもできる:

ボリューム・パーティションのGUIDは、mountvol.exeコマンドで確認できる。


開始LBAと終了LBAがわかれば、パーティションの大きさを計算できます。例えば、EFIパーティション:
開始LBA:2048
終了LBA: 534527
全長:532479セクタ×512バイト/セクタ=272629248バイトで260MB。


バックアップGPTパーティションエントリーの配列
バックアップGPTパーティションエントリアレイは、ディスクの最後、GPTヘッダーの前、具体的にはディスクの最後(LBA (n - 33)、nはディスクの最後のセクタ)の33セクタ前にあります。なぜディスクの最後の33セクタ前なのか、なぜBackup GPT Headerの32セクタ前なのかを計算することもできます。
各パーティション・エントリーは128バイトで、エントリー・アレイには合計128のエントリーがあります。つまり、アレイには16,384セクタ、または32セクタ(16384/512)が存在することになります。
バックアップGPTヘッダーは、バックアップGPTパーティションエントリーの配列の場所を指します。


バックアップGPTパーティションエントリーのディスク終端付近の配列
GPTパーティションエントリアレイの修復
GPTパーティションエントリアレイの修復は、16,384バイトのバックアップが見つかった33セクタをディスクの端からコピーし、LBA 2から3に貼り付けるだけです。正確なコピーなので、16進数の値を変更/修正する必要はありません。
ディスクの最後の方にあるバックアップGPTは、プライマリと同じです。実際、それぞれのセクタを切り出してハッシュ化すると、完全に一致することがわかる。

結論
この第3回では、GPTスキーマの重要なコンポーネントであるGPTパーティション・エントリ・アレイを徹底的に調べました。GUIDから属性ビット、パーティション名まで、パーティションエントリーの各フィールドを分解することで、GPTがディスクデータを整理しアクセスするための強固なフレームワークを提供することを見てきました。この知識は、フォレンジック調査やデータ復旧、システム管理に不可欠であり、GPTパーティションで構成されたディスクを効果的に操作するスキルを身につけることができます。次回は、実践的なアプリケーションとケーススタディについて掘り下げ、理論を実践に結びつける予定です。
This post concludes our 3-part series on GPT partition structures.
If you missed the earlier posts, start with Part 1 – The Protective MBR, where we explore how legacy compatibility is maintained, and continue with Part 2 – The GPT Header, which defines the disk layout and ensures integrity.
Want to go deeper? Subscribe to our newsletter for upcoming content on partition recovery, disk-level hashing, and CTF challenges based on real-world forensic scenarios.
1件のフィードバック