GPT parte 2. O papel do cabeçalho GPT na integridade do disco.

Introdução

Na primeira parte desta série do blogue, explorámos o MBR Protetor e o seu papel na salvaguarda da compatibilidade de discos modernos com partições GPT com sistemas antigos. Nós nos aprofundamos em como o MBR de proteção serve como uma barreira para evitar que sistemas mais antigos interpretem mal os discos GPT, garantindo assim que todo o disco seja marcado como em uso pelo GPT. Essa compreensão básica prepara o terreno para um mergulho mais profundo no coração da própria Tabela de partição GUID (GPT) - o Cabeçalho GPT.

Nesta segunda parte, vamos desvendar o Cabeçalho GPT, um componente crucial do esquema GPT que fornece informações vitais sobre a estrutura do disco. Examinaremos cada campo do Cabeçalho GPT, explicando seu significado e como ele contribui para a funcionalidade geral e a integridade do disco. No final desta publicação, terá uma compreensão abrangente do Cabeçalho GPT, permitindo-lhe analisar e manipular com confiança os discos particionados GPT em investigações forenses ou cenários de recuperação de dados.

Visão geral do cabeçalho GPT

O Cabeçalho GPT (GUID Partition Table) é um componente crucial do sistema de particionamento do disco. Divide o disco em secções separadas, cada uma das quais pode armazenar diferentes tipos de dados, como o sistema operativo, ficheiros pessoais, dados de aplicações ou jogos. Estas secções podem ser unidades diferentes (como a unidade C:, a unidade D:, a unidade E:, etc.).

O Cabeçalho GPT inclui uma cópia de segurança no final do disco, semelhante a ter uma chave sobresselente para o catálogo da biblioteca, caso a principal se perca ou fique danificada. Isto garante que podemos encontrar e aceder aos nossos dados, mesmo que algo corra mal.

O Cabeçalho GPT fornece a localização do seu backup e a localização do GUID Partition Table Entry Array, que é uma lista de entradas de partição GPT que indicam onde essas secções (partições) estão localizadas no disco.

Figura 1: Esquema de uma instalação hipotética do Windows 10 com um volume (n = último sector da unidade)

O cabeçalho GPT começa com a sua assinatura, EFI PART. O resto dos valores são discriminados na tabela abaixo:

Estrutura do cabeçalho GPT

O Cabeçalho GPT começa com a sua assinatura, 'EFI PART.' Os restantes valores estão discriminados na tabela abaixo:

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

Até agora, os primeiros 16 bytes do Cabeçalho GPT permanecerão constantes em diferentes discos GPT.

CRC do cabeçalho GPT

Abaixo está um exemplo de como calcular o CRC32 para o cabeçalho GPT:

É possível utilizar um script Python para calcular o CRC de bytes isolados:

O script Python pode ser encontrado em: https://github.com/eichbaumj/Python

O script Python pegará o valor CRC32 resultante e o converterá no formato necessário para o Cabeçalho GPT. O valor calculado, neste caso, é 0x1B2C37BC. Mas para armazená-lo no campo dentro do cabeçalho GPT, o valor é lido como little endian: 0xBC372C1B. 

GUID do disco

A captura de ecrã abaixo mostra o GUID destacado no Cabeçalho GPT:

O GUID é um valor hexadecimal de 16 bytes, mas se pensar que pode simplesmente copiar os valores e separá-los adequadamente com hífenes e colocar chavetas à volta deles, está enganado. Acabaria por obter o valor errado.

Pode ver que o HxD fornece a conversão GUID no inspetor de dados à direita. Mas como é que isso acontece? Como é que isso acontece:
55 BA 55 51 2B D8 59 41 BC 1F C4 17 80 0F D7 63

Tornar-se:

{5155BA55-D82B-4159-BC1F-C417800FD763}

O formato GUID

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

O primeiro conjunto de quatro bytes é convertido para hexadecimal pequeno: 51 55 BA 55

O segundo conjunto de 2 bytes é convertido em hexadecimais pequenos: D8 2B

O terceiro conjunto de 2 bytes é convertido para hexadecimal pequeno: 59 41

Os restantes dois conjuntos de valores hexadecimais são deixados como estão, big-endian: BC 1F | C4 17 80 0F D7 63

Quando todas as conversões estiverem concluídas, podemos juntá-las todas, colocando hífenes onde for necessário e colocando-as entre chavetas:

{5155BA55-D82B-4159-BC1F-C417800FD763}

Podemos confirmar que esta é a codificação correta do GUID lançando o diskpart a partir da linha de comandos e verificando o uniqueid do disco:

Checksum CRC da tabela de partição GPT

Podemos usar o mesmo script Python, mas substituir os valores hexadecimais pelos encontrados na matriz de entrada de partição. 

E podemos ver que o valor corresponde de facto ao que se encontra no Cabeçalho GPT.

Reparação de um cabeçalho GPT

Agora que sabemos como o Cabeçalho GPT está estruturado e que existe uma cópia de segurança localizada no último sector do disco, como podemos reparar o Cabeçalho GPT se este ficar corrompido ou apagado?

Para reparar o Cabeçalho GPT, copie os últimos 512 bytes do final do disco e cole-os no LBA 1 (sector #2). Observe que são necessárias algumas modificações.

Abaixo está um exemplo do aspeto do Cabeçalho GPT de backup no final de um disco:

Podemos ver que alguns valores permanecem constantes em comparação com o Cabeçalho GPT original. Essas constantes estão destacadas em vermelho abaixo:

Há quatro valores que precisam de ser alterados.

O primeiro é o CRC do Cabeçalho GPT, ao qual voltaremos. Por enquanto, esses valores podem ser zerados, pois precisaríamos usar o CRC calculado depois de modificarmos os outros valores para obter o correto novamente.

O próximo é o valor MyLBA localizado no deslocamento 24 para 4 bytes. Esse valor aponta para a localização do Cabeçalho GPT (onde ele está atualmente) e sua posição atual é LBA 1 ou 0x01000000000000000. 

O valor de 8 bytes no deslocamento 32 é o valor que nos aponta para o local do Cabeçalho GPT de backup. Atualmente, o backup aponta para o original, mas precisamos de alterar este valor para representar o último sector do disco. Isso aconteceu com os valores hexadecimais que acabamos de alterar na etapa anterior. Neste exemplo, o valor precisaria ser alterado para 0xAFD23B7700000000.

O valor de 8 bytes localizado no deslocamento 72 precisa refletir a localização e o início da matriz de entrada de partição GPT. Atualmente, o cabeçalho GPT de backup está a apontar para o backup dessa matriz. A matriz de partição GPT real deve estar no LBA 2. Esse valor precisa ser alterado para 0x0200000000000000.

Com esses três valores alterados, é hora de calcular o valor CRC32. 

A soma de controlo resultante é:

Assim, agora podemos substituir os valores 0x00000000 no offset 16 por 0xBC372C1B:

O HxD tem uma calculadora de soma de controlo CRC32 integrada em Analysis -> Checksums. O valor resultante só precisa de ser adicionado como um valor little-endian.

A título de curiosidade, se isolarmos esses 512 bytes para o original e para a cópia de segurança que restaurámos, os valores de hash correspondem de facto, indicando que reproduzimos com êxito o Cabeçalho GPT original utilizando a cópia de segurança.

Conclusão

Compreender os meandros do Cabeçalho GPT é essencial para qualquer pessoa envolvida em perícia digital, recuperação de dados ou administração de sistemas. O Cabeçalho GPT não só define o layout e a estrutura do disco, mas também garante a integridade dos dados através de mecanismos como somas de verificação CRC32 e cabeçalhos de backup. Ao dominar os detalhes do Cabeçalho GPT, estará melhor equipado para resolver e reparar problemas do disco, garantindo a fiabilidade e acessibilidade de dados críticos.

Ao continuarmos esta série, nosso próximo foco será a Matriz de entradas da tabela de partição GPT. Exploraremos como as entradas de partição são estruturadas e como elas funcionam em conjunto com o Cabeçalho GPT para manter a organização e a integridade das partições de disco. Fique atento a um guia abrangente sobre como analisar e reparar a matriz de entradas da tabela de partição GPT, capacitando-o ainda mais com o conhecimento para lidar com discos particionados GPT com confiança.

Perdeu a Parte 1?

Começar do início: Entendendo o MBR de proteção em discos particionados GPT (Parte 1) - onde abordamos como o GPT garante a compatibilidade com sistemas antigos.

Pronto para o próximo passo?

Continuar para Parte 3: Navegando na matriz de entrada de partição GPT - onde exploramos a forma como as entradas de partição são estruturadas e como complementam o Cabeçalho GPT.

Facebook
Twitter
Correio eletrónico
Imprimir

2 Respostas

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *