Introducción
En la primera parte de esta serie de blogs, exploramos el MBR protector y su papel a la hora de salvaguardar la compatibilidad de los modernos discos con particiones GPT con los sistemas heredados. Profundizamos en cómo el MBR protector sirve de barrera para evitar que los sistemas antiguos malinterpreten los discos GPT, asegurando así que todo el disco esté marcado como en uso por GPT. Estos conocimientos básicos sientan las bases para una inmersión más profunda en el corazón de la propia tabla de particiones GUID (GPT): el encabezado GPT.
En esta segunda parte, desmenuzaremos el encabezado GPT, un componente crucial del esquema GPT que proporciona información vital sobre la estructura del disco. Examinaremos cada campo del encabezado GPT, explicando su importancia y cómo contribuye a la funcionalidad e integridad general del disco. Al final de este post, usted tendrá una comprensión completa de la cabecera GPT, lo que le permite analizar con confianza y manipular los discos particionados GPT en las investigaciones forenses o escenarios de recuperación de datos.
Visión general de la cabecera GPT
La cabecera GPT (GUID Partition Table) es un componente crucial del sistema de particionamiento del disco. Divide el disco en secciones separadas, cada una de las cuales puede almacenar distintos tipos de datos, como el sistema operativo, archivos personales, datos de aplicaciones o juegos. Estas secciones pueden ser unidades diferentes (como la unidad C:, la unidad D:, la unidad E:, etc.).
La cabecera GPT incluye una copia de seguridad al final del disco, algo así como tener una llave de repuesto del catálogo de la biblioteca en caso de que la principal se pierda o se dañe. Esto garantiza que podamos encontrar y acceder a nuestros datos aunque algo vaya mal.
La cabecera GPT proporciona la ubicación de su copia de seguridad y la ubicación de la matriz de entradas de tabla de particiones GUID, que es una lista de entradas de partición GPT que indican dónde se encuentran esas secciones (particiones) en el disco.

Figura 1: Disposición de una instalación hipotética de Windows 10 con un volumen (n = último sector de la unidad)
La cabecera GPT comienza con su firma, EFI PART. El resto de valores se desglosan en la siguiente tabla:
Estructura de la cabecera GPT
La cabecera GPT comienza con su firma, 'EFI PART.' El resto de los valores se desglosan en la siguiente tabla:


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

Hasta ahora, los primeros 16 bytes del encabezado GPT permanecerán constantes en los diferentes discos GPT.
Cabecera GPT CRC

A continuación se muestra un ejemplo de cómo calcular el CRC32 para la cabecera GPT:

Puedes utilizar un script de Python para calcular el CRC de bytes aislados:

El script de Python se puede encontrar en: https://github.com/eichbaumj/Python

El script de Python tomará el valor CRC32 resultante y lo convertirá al formato requerido para la cabecera GPT. El valor calculado, en este caso, es 0x1B2C37BC. Pero para almacenarlo en el campo dentro de la cabecera GPT, el valor se lee little endian: 0xBC372C1B.

GUID del disco

La siguiente captura de pantalla muestra el GUID resaltado en la cabecera GPT:

El GUID es un valor hexadecimal de 16 bytes, pero si pensara que puede copiar los valores y separarlos adecuadamente con guiones y ponerles llaves, se equivocaría. Obtendrías un valor erróneo.
Puedes ver que HxD proporciona la conversión GUID en el Inspector de Datos a la derecha. ¿Pero cómo sucede eso? Como lo hace:
55 BA 55 51 2B D8 59 41 BC 1F C4 17 80 0F D7 63
Conviértete:
{5155BA55-D82B-4159-BC1F-C417800FD763}
El 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
El primer conjunto de cuatro bytes se convierte a hexadecimal little-endian: 51 55 BA 55
El segundo conjunto de 2 bytes se convierte a hexadecimal little-endian: D8 2B
El tercer conjunto de 2 bytes se convierte a hexadecimal little-endian: 59 41
Los otros dos conjuntos de valores hexadecimales se dejan tal cual, big-endian: BC 1F | C4 17 80 0F D7 63
Una vez completadas todas las conversiones, podemos juntarlas, colocando guiones donde sea necesario y encerrándolas entre llaves:
{5155BA55-D82B-4159-BC1F-C417800FD763}
Podemos confirmar que esta es la codificación correcta del GUID ejecutando diskpart desde la línea de comandos y comprobando el uniqueid del disco:


Suma de comprobación de la tabla de particiones GPT CRC

Podemos utilizar el mismo script de Python pero sustituyendo los valores hexadecimales por los que se encuentran en la Matriz de Entradas de Partición.



Y podemos ver que el valor corresponde a lo que se encuentra en el encabezado GPT.
Reparación de una cabecera GPT
Bien, ahora que sabemos cómo está estructurada la cabecera GPT y que hay una copia de seguridad situada en el último sector del disco, ¿cómo podemos reparar la cabecera GPT si se corrompe o se borra?
Para reparar la cabecera GPT, copie los últimos 512 bytes del final del disco y péguelos en el LBA 1 (sector #2). Tenga en cuenta que son necesarias algunas modificaciones.
A continuación se muestra un ejemplo de cómo se ve el encabezado GPT de copia de seguridad al final de un disco:

Podemos ver que algunos valores permanecen constantes en comparación con el encabezado GPT original. Estas constantes se resaltan en rojo a continuación:

Hay cuatro valores que deben modificarse.
El primero es el CRC del encabezado GPT, al que volveremos. Por ahora, esos valores pueden ponerse a cero, ya que necesitaríamos utilizar el CRC calculado después de haber modificado los otros valores para volver a obtener el correcto.

El siguiente es el valor MyLBA localizado en el offset 24 de 4 bytes. Este valor apunta a la ubicación del encabezado GPT (donde se encuentra actualmente) y su posición actual es LBA 1 o 0x01000000000000000.

El valor de 8 bytes en el offset 32 es el valor que nos señala la ubicación de la copia de seguridad del encabezado GPT. El respaldo actualmente apunta al original, pero necesitamos cambiar este valor para que represente el último sector del disco. Esto ocurrió con los valores hexadecimales que acabamos de cambiar en el paso anterior. En este ejemplo, el valor tendría que ser cambiado a 0xAFD23B7700000000.

El valor de 8 bytes localizado en el offset 72 necesita reflejar la localización y el inicio de la matriz de entrada de particiones GPT. Actualmente, el encabezado GPT de respaldo está apuntando al respaldo de ese arreglo. La Partición GPT actual debe estar en el LBA 2. Este valor necesita ser cambiado a 0x0200000000000000.

Con esos tres valores cambiados, es hora de calcular el valor CRC32.
La suma de comprobación resultante es:

Así que ahora podemos reemplazar los valores 0x00000000 en el offset 16 con 0xBC372C1B:

HxD tiene una calculadora de sumas de comprobación CRC32 integrada en Análisis -> Sumas de comprobación. El valor resultante sólo tiene que ser añadido como un valor little-endian.
Por curiosidad, si aislamos esos 512 bytes del original y de la copia de seguridad que hemos restaurado, los valores hash coinciden, lo que indica que hemos reproducido correctamente el encabezado GPT original utilizando la copia de seguridad.

Conclusión
Comprender los entresijos de la cabecera GPT es esencial para cualquiera que se dedique al análisis forense digital, la recuperación de datos o la administración de sistemas. La cabecera GPT no sólo define el diseño y la estructura del disco, sino que también garantiza la integridad de los datos mediante mecanismos como las sumas de comprobación CRC32 y las cabeceras de copia de seguridad. Si dominas los detalles de la cabecera GPT, estarás mejor preparado para solucionar y reparar los problemas del disco, garantizando la fiabilidad y accesibilidad de los datos críticos.
A medida que continuamos con esta serie, nuestro próximo enfoque será en la matriz de entradas de la tabla de particiones GPT. Exploraremos cómo están estructuradas las entradas de partición y cómo trabajan en conjunto con el encabezado GPT para mantener la organización e integridad de las particiones de disco. Manténgase en sintonía para una guía completa sobre el análisis y la reparación de la GPT Partition Table Entry Array, que le proporcionará los conocimientos necesarios para manejar con confianza los discos con particiones GPT.
¿Se ha perdido la primera parte?
Empezar desde el principio: Entendiendo el MBR protector en discos particionados GPT (Parte 1) - donde explicamos cómo GPT garantiza la compatibilidad con sistemas heredados.
¿Listo para el siguiente paso?
Continuar Parte 3: Navegación por la matriz de entrada de particiones GPT - donde exploramos cómo se estructuran las entradas de partición y cómo se complementan con el encabezado GPT.
2 respuestas
Grandes páginas (esa y la parte 1).
Muchas gracias.