Reparo de Cabeçalho: Encontrando o Byte Errado em uma Assinatura PNG

Engenharia Reversa & Exploração Binária Nível 3/4 ~4 min 5 de setembro de 2026

O desafio

Um arquivo recuperado de um disco apagado tem nome de PNG e quase certamente é um PNG, mas todos os decodificadores se recusam a abri-lo. O restante da estrutura sobreviveu intacto: você consegue ver os nomes de bloco IHDR, gAMA e cHRM na coluna ASCII, então o dano se limita ao início. Exatamente um byte dentro da assinatura de oito bytes foi alterado durante a recuperação. Compare os bytes iniciais do arquivo com a referência de bytes mágicos, e encontre o único byte que não pertence ali. Envie esse byte em hexadecimal: tanto o valor errado que o arquivo contém atualmente quanto o valor correto que ele deveria conter são aceitos, porque nomear qualquer um dos dois prova que você localizou a corrupção. O que não é aceito é o deslocamento.

O que você vai aprender

  • Comparar o cabeçalho de um arquivo com uma assinatura de bytes mágicos conhecida, posição por posição
  • Usar a coluna ASCII como uma leitura mais rápida de uma assinatura imprimível
  • Entender que bytes mágicos são um contrato de correspondência exata, não uma heurística
  • Distinguir dano no cabeçalho de corrupção total do arquivo usando a estrutura posterior
  • Recuperar o valor pretendido de um byte danificado, em vez de apenas localizá-lo

Habilidades testadas

Análise de dump hexadecimalAssinaturas de formato de arquivoRaciocínio de recuperação de dados

Pré-requisitos

  • Leitura de valores de byte em hexadecimal
  • Conhecimento de que arquivos começam com uma assinatura de tipo

Como funciona

Quase todo formato binário começa com uma assinatura fixa, e um decodificador trata isso como um contrato. Ele compara os bytes exatamente e recusa o arquivo em qualquer divergência. Essa rigidez é uma característica, porque impede que um parser leia com confiança um tipo de dado errado, mas também significa que um único byte danificado pode tornar um arquivo completamente íntegro impossível de abrir.

A assinatura PNG tem oito bytes: 89 50 4E 47 0D 0A 1A 0A. Ela é deliberadamente superdimensionada. 0x89 tem o bit mais significativo ativado para que uma transferência que descarta o oitavo bit seja detectada, 50 4E 47 soletra PNG em ASCII para que um humano consiga ler, e o trecho final 0D 0A 1A 0A detecta a tradução de fim de linha e o tratamento prematuro de fim de arquivo.

Este arquivo contém 89 51 4E 47 0D 0A 1A 0A. Sete bytes coincidem. O byte no deslocamento 0x01 é 0x51, quando o exigido é 0x50, o que corresponde a um único bit invertido transformando P em Q, e a coluna ASCII mostra isso como .QNG em vez de .PNG. Tudo depois da assinatura está intacto, e é por isso que IHDR, gAMA e cHRM ainda são legíveis mais abaixo. O arquivo é genuinamente um PNG; apenas sua porta de entrada está quebrada. O byte corrigido é 0x50.

Erros comuns

  • Enviar o deslocamento em vez do valor. O byte danificado está no deslocamento 0x01, mas a pergunta pede o valor que deveria estar ali, que é 50.
  • Comparar com a linha de referência errada. A assinatura ZIP 50 4B 03 04 também começa com 50, então passar o olho pela tabela pode ancorar você no formato errado. Compare a linha completa do PNG.
  • Responder PNG. O tipo já é dado no enunciado. Este hack é uma tarefa de reparo, não de identificação.
  • Suspeitar de 0x89. Ele parece anômalo por não ser imprimível, mas é o primeiro byte correto de uma assinatura PNG.
  • Presumir que o arquivo inteiro está corrompido. Os nomes de bloco posteriores provam que o dano está confinado à assinatura.

Como se proteger

Para quem constrói ferramentas que processam arquivos, a lição é que a verificação de assinatura deve ser rígida na borda e informativa nos logs.

  • Valide a assinatura completa e rejeite em caso de divergência. Nunca recorra a confiar na extensão do arquivo quando os bytes mágicos discordarem.
  • Registre qual posição de byte falhou e qual era o valor esperado, para que um engenheiro de recuperação possa reparar um cabeçalho sem um diff manual.
  • Armazene um checksum junto aos ativos arquivados para que a corrupção seja detectada na gravação, em vez de descoberta anos depois durante uma restauração.
  • Mantenha cópias verificadas das assinaturas de formato em suas ferramentas em vez de fixar prefixos parciais no código, já que uma verificação de PNG com apenas quatro bytes teria aceitado várias variantes danificadas.
  • Lembre-se do outro lado da moeda: como as assinaturas são apenas os primeiros bytes, um atacante pode prefixar um cabeçalho válido a conteúdo hostil. Verificações de assinatura estabelecem o formato, não a segurança.

Solução completa

Membros Pro e Max desbloqueiam o passo a passo completo.

Assinar Pro

Estatísticas da comunidade

138 resoluções
87% taxa de sucesso
Hodanalo Primeiro sangue

Hacks de hoje relacionados

28.000+ Hackers 100+ Labs & Cursos Grátis
Comece Grátis