Introduzione
Nella prima parte di questa serie di blog, abbiamo esplorato il Protective MBR e il suo ruolo nel salvaguardare la compatibilità dei moderni dischi partizionati GPT con i sistemi legacy. Abbiamo approfondito il modo in cui il Protective MBR funge da barriera per impedire ai sistemi più vecchi di interpretare erroneamente i dischi GPT, garantendo così che l'intero disco sia contrassegnato come in uso da GPT. Questa conoscenza di base pone le basi per un'immersione più profonda nel cuore della tabella di partizione GUID (GPT) stessa: l'intestazione GPT.
In questa seconda parte, esamineremo l'intestazione GPT, un componente cruciale dello schema GPT che fornisce informazioni vitali sulla struttura del disco. Esamineremo ogni campo dell'intestazione GPT, spiegandone il significato e il modo in cui contribuisce alla funzionalità e all'integrità complessiva del disco. Alla fine di questo post, avrete una comprensione completa dell'intestazione GPT, che vi permetterà di analizzare e manipolare con sicurezza i dischi partizionati GPT nelle indagini forensi o negli scenari di recupero dei dati.
Panoramica dell'intestazione GPT
L'intestazione GPT (GUID Partition Table) è un componente fondamentale del sistema di partizionamento del disco. Divide il disco in sezioni separate, ognuna delle quali può contenere diversi tipi di dati, come il sistema operativo, i file personali, i dati delle applicazioni o i giochi. Queste sezioni possono essere unità diverse (come l'unità C:, D:, E: e così via).
L'intestazione GPT include una copia di backup alla fine del disco, un po' come avere una chiave di riserva per il catalogo della biblioteca nel caso in cui quella principale venga persa o danneggiata. Questo ci garantisce di poter trovare e accedere ai nostri dati anche se qualcosa va storto.
L'intestazione GPT fornisce la posizione del suo backup e la posizione del GUID Partition Table Entry Array, che è un elenco di voci di partizione GPT che indicano dove si trovano le sezioni (partizioni) sul disco.

Figura 1: Layout di un'ipotetica installazione di Windows 10 con un volume (n = ultimo settore dell'unità)
L'intestazione GPT inizia con la sua firma, EFI PART. Il resto dei valori è suddiviso nella tabella seguente:
Struttura dell'intestazione GPT
L'intestazione GPT inizia con la sua firma, "EFI PART." Il resto dei valori è suddiviso nella tabella seguente:


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

Finora, i primi 16 byte dell'intestazione GPT rimarranno costanti tra i diversi dischi GPT.
CRC intestazione GPT

Di seguito è riportato un esempio di calcolo del CRC32 per l'intestazione GPT:

È possibile utilizzare uno script Python per calcolare il CRC dei byte isolati:

Lo script Python è disponibile all'indirizzo: https://github.com/eichbaumj/Python

Lo script Python prenderà il valore CRC32 risultante e lo convertirà nel formato richiesto per l'intestazione GPT. Il valore calcolato, in questo caso, è 0x1B2C37BC. Ma per memorizzarlo nel campo dell'intestazione GPT, il valore viene letto in formato little endian: 0xBC372C1B.

GUID del disco

La schermata seguente mostra il GUID evidenziato nell'intestazione GPT:

Il GUID è un valore esadecimale di 16 byte, ma se si pensa di poter copiare i valori e separarli adeguatamente con dei trattini e delle parentesi graffe, ci si sbaglia. Si otterrebbe il valore sbagliato.
Si può vedere che HxD fornisce la conversione GUID nel Data Inspector a destra. Ma come avviene? Come avviene:
55 BA 55 51 2B D8 59 41 BC 1F C4 17 80 0F D7 63
Diventare:
{5155BA55-D82B-4159-BC1F-C417800FD763}
Il formato GUID
XX 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
Il primo gruppo di quattro byte viene convertito in esadecimale piccolo-endiano: 51 55 BA 55
Il secondo gruppo di 2 byte viene convertito in esadecimale piccolo-endiano: D8 2B
La terza serie di 2 byte viene convertita in esadecimale piccolo-endiano: 59 41
Le altre due serie di valori esadecimali sono lasciate così come sono, big-endian: BC 1F | C4 17 80 0F D7 63
Una volta completate tutte le conversioni, possiamo metterle insieme, mettendo i trattini dove è necessario e racchiudendole tra parentesi graffe:
{5155BA55-D82B-4159-BC1F-C417800FD763}
È possibile confermare la corretta codifica del GUID lanciando diskpart dalla riga di comando e verificando l'uniqueid del disco:


Tabella delle partizioni GPT Checksum CRC

È possibile utilizzare lo stesso script Python, ma sostituendo i valori esadecimali con quelli presenti nella matrice delle voci della partizione.



E possiamo vedere che il valore corrisponde a quello trovato nell'intestazione GPT.
Riparazione di un'intestazione GPT
Ok, ora che sappiamo come è strutturata l'intestazione GPT e che c'è un backup situato nell'ultimo settore del disco, come si fa a riparare l'intestazione GPT nel caso in cui sia danneggiata o cancellata?
Per riparare l'intestazione GPT, copiare gli ultimi 512 byte dalla fine del disco e incollarli nell'LBA 1 (settore #2). È necessario apportare alcune modifiche.
Di seguito è riportato un esempio dell'aspetto dell'intestazione GPT di backup alla fine di un disco:

Si può notare che alcuni valori rimangono costanti rispetto all'intestazione GPT originale. Queste costanti sono evidenziate in rosso qui sotto:

I valori da modificare sono quattro.
Il primo è il CRC dell'intestazione GPT, su cui torneremo. Per il momento, questi valori possono essere azzerati, poiché per ottenere di nuovo il CRC corretto, dovremo utilizzare quello calcolato dopo aver modificato gli altri valori.

Il successivo è il valore MyLBA situato all'offset 24 per 4 byte. Questo valore punta alla posizione dell'intestazione GPT (dove si trova attualmente) e la sua posizione attuale è LBA 1 o 0x010000000000000.

Il valore a 8 byte con offset 32 è il valore che indica la posizione dell'intestazione GPT di backup. Attualmente il backup punta all'originale, ma è necessario modificare questo valore per rappresentare l'ultimo settore del disco. Questo è avvenuto con i valori esadecimali che abbiamo appena modificato nel passaggio precedente. In questo esempio, il valore deve essere modificato in 0xAFD23B7700000000.

Il valore di 8 byte situato all'offset 72 deve riflettere la posizione e l'inizio dell'array di voci di partizione GPT. Attualmente, l'intestazione GPT di backup punta al backup di tale array. L'array di partizioni GPT effettivo dovrebbe trovarsi a LBA 2. Questo valore deve essere modificato in 0x0200000000000000.

Con questi tre valori modificati, è il momento di calcolare il valore CRC32.
Il checksum risultante è:

Ora possiamo sostituire i valori 0x00000000 all'offset 16 con 0xBC372C1B:

HxD ha un calcolatore di checksum CRC32 integrato in Analisi -> Checksum. Il valore risultante deve solo essere aggiunto come valore little-endian.
Per curiosità, se isoliamo quei 512 byte per l'originale e il backup che abbiamo ripristinato, i valori hash corrispondono effettivamente, indicando che abbiamo riprodotto con successo l'intestazione GPT originale usando il backup.

Conclusione
La comprensione delle complessità dell'intestazione GPT è essenziale per chiunque si occupi di digital forensics, recupero dati o amministrazione di sistema. L'intestazione GPT non solo definisce il layout e la struttura del disco, ma garantisce anche l'integrità dei dati grazie a meccanismi quali le checksum CRC32 e le intestazioni di backup. Imparando a conoscere i dettagli dell'intestazione GPT, sarete meglio attrezzati per risolvere e riparare i problemi del disco, garantendo l'affidabilità e l'accessibilità dei dati critici.
Per continuare questa serie, la prossima attenzione sarà rivolta all'array di voci della tabella di partizione GPT. Esploreremo come sono strutturate le voci della partizione e come lavorano di concerto con l'intestazione GPT per mantenere l'organizzazione e l'integrità delle partizioni del disco. Rimanete sintonizzati per una guida completa sull'analisi e la riparazione dell'array di voci della tabella di partizione GPT, che vi permetterà di acquisire le conoscenze necessarie per gestire con sicurezza i dischi con partizioni GPT.
Missed Part 1?
Start from the beginning: Understanding the Protective MBR in GPT-Partitioned Disks (Part 1) – where we cover how GPT ensures backward compatibility with legacy systems.
Ready for the next step?
Continue to Part 3: Navigating the GPT Partition Entry Array – where we explore how partition entries are structured and how they complement the GPT Header.
Una risposta
Grandi pagine (questa e la prima parte).
Grazie mille!