O que são estruturas de arquivos?
As estruturas de arquivos especificam como um formato organiza cabeçalhos, metadados, dados de conteúdo, índices, somas de verificação e outras sequências de bytes. Suas regras determinam como o software localiza e interpreta os dados armazenados.
Como funcionam as estruturas de arquivos
A estrutura de um formato de arquivo é sua gramática de análise no nível dos bytes, muitas vezes composta por registros ordenados, blocos aninhados, caixas delimitadas por comprimento ou segmentos separados por marcadores. PNG, por exemplo, consiste em uma assinatura de oito bytes seguida por blocos que contêm, cada um, um comprimento, um tipo de quatro bytes, dados e um CRC. Arquivos da família MP4 aninham caixas tipadas. ZIP coloca um cabeçalho local antes de cada arquivo armazenado e um diretório central após os dados dos arquivos. O TIFF clássico (TIFF 6.0) começa com um cabeçalho de oito bytes que aponta para um diretório, que pode começar em qualquer limite de palavra (um deslocamento par em bytes) após esse cabeçalho. Os cabeçalhos estabelecem a interpretação, enquanto índices e deslocamentos permitem o acesso não sequencial a dados de conteúdo em outras partes do arquivo. Isso é diferente de um codec, que define como um fluxo de mídia individual é comprimido. O conhecimento da estrutura é usado por demultiplexadores, validadores, ferramentas de reparo, leitores de metadados e ferramentas de varredura de segurança.
Informações essenciais
- Uma assinatura inicial restringe a família de formatos, mas muitas vezes não determina o formato. As assinaturas de detecção MIME do WHATWG para WAVE, AVI e WebP começam todas com
RIFF, e os bytes a partir do deslocamento 8 permitem distingui-las. Um relato público de bug em uma biblioteca de detecção de tipos de arquivo mostra arquivos.docx,.pptxe.xlsxde uma suíte de escritório sendo identificados simplesmente comoapplication/zip, em vez de seus tipos de documento. A correção explica o motivo: essa suíte armazena[Content_Types].xml, que a biblioteca lê para identificar o tipo, após as entradas de conteúdo, além da amostra que o modo de fluxo da biblioteca lê por padrão. Uma assinatura também não diz nada sobre o restante do arquivo: a especificação PNG prevê que os decodificadores obtenham maior certeza na identificação a partir do blocoIHDRque vem em seguida e do CRC de cada bloco. - Saiba a partir de onde cada deslocamento é medido antes de mover bytes. Os deslocamentos de TIFF são contados a partir do início do arquivo, e seu diretório pode vir após os dados de imagem que descreve. Os leitores de ZIP encontram as entradas por meio de um diretório central armazenado após os dados dos arquivos, cujos registros indicam o deslocamento de cada cabeçalho local. Nos arquivos da família MP4, a caixa
stcocontém deslocamentos absolutos de blocos, enquanto um fragmento de filme pode endereçar seus dados em relação à caixamoofque o contém. Os deslocamentos absolutos se tornam incorretos quando seus alvos se movem ou quando dados anteriores a esses alvos são inseridos ou removidos, a menos que o programa que grava o arquivo os recalcule. - A ordem dos bytes é uma propriedade do formato, não da máquina que o lê. PNG armazena inteiros de múltiplos bytes com o byte mais significativo primeiro, OpenEXR os armazena em little-endian, ZIP faz o mesmo, exceto quando sua especificação determina outra ordem para um campo, e TIFF declara sua ordem nos dois primeiros bytes (
IIpara little-endian,MMpara big-endian), portanto um leitor de TIFF precisa lidar com ambas. Decodifique explicitamente cada campo de comprimento e deslocamento na ordem de bytes que o formato especifica para ele, em vez de converter diretamente bytes brutos em inteiros nativos. - Registros prefixados por comprimento permitem que um leitor pule o que não entende, mas o formato determina quando isso é seguro. PNG codifica essa regra no nome do bloco: um bloco auxiliar desconhecido pode ser ignorado, enquanto um bloco crítico desconhecido é uma condição fatal para um decodificador que tenta extrair a imagem. Pular blocos também depende de confiar no campo de comprimento. A especificação PNG alerta que, quando os CRCs não são verificados, um comprimento de bloco incorreto pode dessincronizar um decodificador, fazendo com que ele interprete dados posteriores como um cabeçalho de bloco, e que um decodificador mal implementado pode causar um estouro de buffer porque os blocos podem ter até 2^31-1 bytes de comprimento. Verifique cada comprimento e deslocamento em relação aos bytes realmente disponíveis antes de usá-lo; a escrita e a leitura fora dos limites ocupam, respectivamente, o quinto e o oitavo lugar no CWE Top 25 da MITRE de 2025.
Quando as estruturas de arquivos são importantes
Desenvolvedores examinam estruturas de arquivos ao criar analisadores, validar uploads, reparar dados corrompidos ou extrair dados incorporados. Ignorar deslocamentos ou a ordem dos bytes pode gerar leituras inválidas e falhas de segurança.
Fontes
- Especificação Portable Network Graphics (PNG) do W3C (terceira edição): assinatura, organização dos blocos, convenções de nomenclatura dos blocos e tratamento de erros
- Padrão de detecção MIME do WHATWG: padrões de bytes para tipos de imagem, áudio ou vídeo e contêineres de arquivos
- Issue 785 de file-type no GitHub: arquivos docx, pptx e xlsx salvos com LibreOffice detectados como application/zip (relato de bug, encerrado como concluído em março de 2026)
- Commit d4a975c de file-type no GitHub: correção da issue 785; sua mensagem informa a causa (ordem das entradas e a amostra padrão do fluxo)
- Especificação TIFF, versão 6.0: cabeçalho do arquivo de imagem, ordem dos bytes e deslocamentos
- Especificação do formato de arquivo .ZIP da PKWARE (APPNOTE.TXT): formato geral do arquivo e diretório central
- Organização de arquivos OpenEXR: tipos de dados básicos e tabelas de deslocamentos
- Especificação do formato de arquivo Adobe Flash Video, versão 10.1: definições de caixas de mídia base ISO (caixa de deslocamentos de blocos, cabeçalho de fragmento de faixa)
- MITRE: CWE Top 25 de 2025, as fraquezas de software mais perigosas