Einführung
Im ersten Teil dieser Blogserie haben wir uns mit dem Protective MBR und seiner Rolle bei der Sicherstellung der Kompatibilität moderner GPT-partitionierter Festplatten mit älteren Systemen beschäftigt. Wir haben uns damit befasst, wie der Protective MBR ältere Systeme daran hindert, GPT-Festplatten falsch zu interpretieren, und dadurch sicherstellt, dass die gesamte Festplatte als von GPT verwendet gekennzeichnet ist. Dieses grundlegende Verständnis bildet die Grundlage für einen tieferen Einblick in das Herzstück der GUID-Partitionstabelle (GPT) selbst - den GPT-Header.
In diesem zweiten Teil werden wir den GPT-Header auspacken, eine entscheidende Komponente des GPT-Schemas, die wichtige Informationen über die Struktur der Festplatte liefert. Wir werden jedes Feld im GPT-Header untersuchen, seine Bedeutung erklären und erläutern, wie es zur Gesamtfunktionalität und Integrität der Festplatte beiträgt. Am Ende dieses Beitrags werden Sie über ein umfassendes Verständnis des GPT-Headers verfügen, das Sie in die Lage versetzt, GPT-partitionierte Festplatten bei forensischen Untersuchungen oder Datenwiederherstellungsszenarien sicher zu analysieren und zu manipulieren.
GPT-Header Übersicht
Der GPT-Header (GUID Partition Table) ist eine wichtige Komponente des Partitionierungssystems der Festplatte. Er unterteilt die Festplatte in einzelne Abschnitte, von denen jeder verschiedene Datentypen speichern kann, z. B. Ihr Betriebssystem, persönliche Dateien, Anwendungsdaten oder Spiele. Diese Abschnitte können verschiedene Laufwerke sein (z. B. Laufwerk C:, Laufwerk D:, Laufwerk E:, usw.).
Der GPT-Header enthält eine Sicherungskopie am Ende des Datenträgers, so als hätte man einen Ersatzschlüssel für den Bibliothekskatalog, falls der Hauptschlüssel verloren geht oder beschädigt wird. So ist sichergestellt, dass wir unsere Daten auch dann noch finden und darauf zugreifen können, wenn etwas schiefgeht.
Der GPT-Header gibt den Ort der Sicherung und den Ort des GUID Partition Table Entry Array an, das eine Liste von GPT-Partitionseinträgen ist, die angeben, wo sich diese Abschnitte (Partitionen) auf der Festplatte befinden.

Abbildung 1: Layout einer hypothetischen Windows 10-Installation mit einem Volume (n = letzter Sektor des Laufwerks)
Der GPT-Header beginnt mit seiner Signatur, EFI PART. Die übrigen Werte sind in der nachstehenden Tabelle aufgeführt:
GPT-Kopfstruktur
Der GPT-Header beginnt mit seiner Signatur "EFI PART", die restlichen Werte sind in der folgenden Tabelle aufgeführt:


Quelle: https://uefi.org/specs/UEFI/2.10/05_GUID_Partition_Table_Format.html

Bislang bleiben die ersten 16 Bytes des GPT-Headers bei verschiedenen GPT-Festplatten konstant.
GPT-Header CRC

Nachfolgend finden Sie ein Beispiel für die Berechnung des CRC32 für den GPT-Header:

Sie können ein Python-Skript verwenden, um den CRC-Wert der isolierten Bytes zu berechnen:

Das Python-Skript finden Sie unter: https://github.com/eichbaumj/Python

Das Python-Skript nimmt den resultierenden CRC32-Wert und konvertiert ihn in das für den GPT-Header erforderliche Format. Der berechnete Wert ist in diesem Fall 0x1B2C37BC. Um ihn jedoch im Feld des GPT-Headers zu speichern, wird der Wert in Little Endian gelesen: 0xBC372C1B.

Festplatten-GUID

In der Abbildung unten ist die GUID im GPT-Header hervorgehoben:

Die GUID ist ein 16-Byte-Hexadezimalwert, aber wenn Sie glauben, Sie könnten die Werte einfach herauskopieren und sie durch Bindestriche und geschweifte Klammern voneinander trennen, dann liegen Sie falsch. Sie würden am Ende den falschen Wert erhalten.
Sie können sehen, dass HxD die GUID-Konvertierung im Dateninspektor auf der rechten Seite anbietet. Aber wie geschieht das? Wie geht das?
55 BA 55 51 2B D8 59 41 BC 1F C4 17 80 0F D7 63
Werden:
{5155BA55-D82B-4159-BC1F-C417800FD763}
Das GUID-Format
XX XX XX XX | XX XX | XX XX | XX XX | XX XX XX XX XX XX XX
55 BA 55 51 | 2B D8 | 59 41 | BC 1F | C4 17 80 0F D7 63
Der erste Satz von vier Bytes wird in Little-Endian-Hex umgewandelt: 51 55 BA 55
Der zweite Satz von 2 Bytes wird in Little-Endian-Hex umgewandelt: D8 2B
Der dritte Satz von 2 Bytes wird in Little-Endian-Hex umgewandelt: 59 41
Die verbleibenden zwei Gruppen von Hex-Werten werden so belassen, wie sie sind (Big-Endian): BC 1F | C4 17 80 0F D7 63
Sobald alle Konvertierungen abgeschlossen sind, können wir sie zusammenfügen, indem wir Bindestriche an den richtigen Stellen einfügen und in geschweifte Klammern einschließen:
{5155BA55-D82B-4159-BC1F-C417800FD763}
Wir können bestätigen, dass dies die korrekte Kodierung der GUID ist, indem wir diskpart von der Befehlszeile aus starten und nach der uniqueid der Festplatte suchen:


GPT-Partitionstabelle Prüfsumme CRC

Wir können dasselbe Python-Skript verwenden, aber die Hex-Werte durch die im Partition Entry Array gefundenen Werte ersetzen.



Und wir können sehen, dass der Wert dem entspricht, was im GPT-Header steht.
Reparieren eines GPT-Headers
Ok, jetzt, da wir wissen, wie der GPT-Header strukturiert ist und dass sich im letzten Sektor der Festplatte ein Backup befindet, wie können wir den GPT-Header reparieren, falls er beschädigt oder gelöscht wird?
Um den GPT-Header zu reparieren, kopieren Sie die letzten 512 Bytes vom Ende der Platte und fügen sie in LBA 1 (Sektor #2) ein. Beachten Sie, dass ein paar Änderungen erforderlich sind.
Unten sehen Sie ein Beispiel dafür, wie der Backup-GPT-Header am Ende einer Festplatte aussieht:

Wir können sehen, dass einige Werte im Vergleich zum ursprünglichen GPT-Header konstant bleiben. Diese Konstanten sind im Folgenden rot hervorgehoben:

Es gibt vier Werte, die geändert werden müssen.
Der erste ist der GPT-Header-CRC, auf den wir noch zurückkommen werden. Im Moment können diese Werte auf Null gesetzt werden, da wir den CRC, der nach der Änderung der anderen Werte berechnet wurde, verwenden müssen, um wieder den richtigen Wert zu erhalten.

Der nächste Wert ist der MyLBA-Wert, der sich an Offset 24 für 4 Bytes befindet. Dieser Wert zeigt auf die Position des GPT-Headers (wo er sich gerade befindet) und seine aktuelle Position ist LBA 1 oder 0x01000000000000000.

Der 8-Byte-Wert bei Offset 32 ist der Wert, der auf den Speicherort des Backup-GPT-Headers verweist. Die Sicherung verweist derzeit auf das Original, aber wir müssen diesen Wert ändern, damit er den letzten Sektor der Festplatte darstellt. Dies geschah mit den Hex-Werten, die wir im vorherigen Schritt geändert haben. In diesem Beispiel müsste der Wert in 0xAFD23B7700000000 geändert werden.

Der 8-Byte-Wert an Offset 72 muss die Position und den Beginn des GPT-Partition Entry Array wiedergeben. Derzeit verweist der Backup-GPT-Header auf das Backup dieses Arrays. Das eigentliche GPT-Partitions-Array sollte sich bei LBA 2 befinden. Dieser Wert muss auf 0x0200000000000000 geändert werden.

Nachdem diese drei Werte geändert wurden, ist es an der Zeit, den CRC32-Wert zu berechnen.
Die resultierende Prüfsumme lautet:

Jetzt können wir also die 0x00000000-Werte an Offset 16 durch 0xBC372C1B ersetzen:

HxD hat einen CRC32-Prüfsummenrechner unter Analyse -> Prüfsummen eingebaut. Der resultierende Wert muss nur als Little-Endian-Wert hinzugefügt werden.
Wenn wir diese 512 Bytes für das Original und das wiederhergestellte Backup isolieren, stimmen die Hash-Werte tatsächlich überein, was darauf hindeutet, dass wir den ursprünglichen GPT-Header mithilfe des Backups erfolgreich reproduziert haben.

Schlussfolgerung
Das Verständnis der Feinheiten des GPT-Headers ist für jeden, der sich mit digitaler Forensik, Datenwiederherstellung oder Systemadministration beschäftigt, unerlässlich. Der GPT-Header definiert nicht nur das Layout und die Struktur der Festplatte, sondern gewährleistet auch die Datenintegrität durch Mechanismen wie CRC32-Prüfsummen und Backup-Header. Wenn Sie die Details des GPT-Headers beherrschen, sind Sie besser in der Lage, Fehler zu beheben und Festplattenprobleme zu reparieren und die Zuverlässigkeit und Zugänglichkeit wichtiger Daten zu gewährleisten.
In der Fortsetzung dieser Serie werden wir uns als nächstes mit dem GPT Partition Table Entry Array befassen. Wir werden untersuchen, wie Partitionseinträge strukturiert sind und wie sie zusammen mit dem GPT-Header die Organisation und Integrität von Festplattenpartitionen gewährleisten. Bleiben Sie dran für einen umfassenden Leitfaden zur Analyse und Reparatur des GPT Partition Table Entry Array, der Ihnen das nötige Wissen vermittelt, um mit GPT-partitionierten Festplatten sicher umzugehen.
Haben Sie Teil 1 verpasst?
Beginnen Sie von Anfang an: Der schützende MBR in GPT-partitionierten Festplatten verstehen (Teil 1) - wo wir beschreiben, wie GPT die Abwärtskompatibilität mit Altsystemen sicherstellt.
Sind Sie bereit für den nächsten Schritt?
Weiter zu Teil 3: Navigieren durch das GPT-Partitionseingabe-Array - wo wir untersuchen, wie Partitionseinträge strukturiert sind und wie sie den GPT-Header ergänzen.
2 Antworten
Tolle Seiten (diese und Teil 1).
Vielen Dank!