Skip to content
Back to Blog
informational

Como os Computadores Detectam Tipos de Arquivo: Explicando os Magic Bytes

2026-05-17 9 min read

Por que as Extensões de Arquivo São Apenas Metade da História

A maioria das pessoas assume que um computador sabe que um arquivo é um JPEG porque termina em .jpg. É uma suposição razoável, mas que está errada na metade das vezes. Extensões de arquivo são apenas uma convenção de nomenclatura. Elas são uma dica para o sistema operacional, não uma garantia do que está dentro. Renomeie um arquivo PNG para .txt, e o Windows tentará abri-lo alegremente no Bloco de Notas, mostrando uma tela cheia de caracteres sem sentido. Tente abrir um documento do Word que você renomeou para .pdf, e o Adobe Acrobat se recusará categoricamente. Isso é extremamente importante para a conversão de arquivos. Quando você envia um arquivo para um serviço como o CocoConvert, o sistema não pode simplesmente confiar na extensão. Alguém poderia renomear um executável malicioso (.exe) para .jpg para passá-lo por um manipulador de arquivos ingênuo. Ou, mais comumente, um usuário pode simplesmente salvar um arquivo com a extensão errada por acidente. Todos nós já vimos downloads corrompidos que perdem completamente seus metadados de extensão. A solução, estabelecida décadas atrás, é ignorar o nome do arquivo e ler o conteúdo binário real do arquivo. Especificamente, um programa lê os primeiros bytes e os compara com um banco de dados conhecido de assinaturas. Essas assinaturas são chamadas de magic bytes ou, mais formalmente, assinaturas de arquivo. Elas são a verdade absoluta sobre o conteúdo de um arquivo, independentemente do seu nome.

O que Realmente São os Magic Bytes

Todo formato de arquivo padronizado reserva seus primeiros bytes para um identificador único. Esses bytes, escritos em hexadecimal, são incorporados na especificação do próprio formato — eles não são adicionados pelo sistema operacional posteriormente. Você pode ver isso por si mesmo com um editor hexadecimal. Veja alguns tipos de arquivo comuns: - **Imagens JPEG** sempre começam com FF D8 FF. Os dois primeiros bytes (FF D8) marcam o início do fluxo de dados, e o terceiro (FF) inicia o primeiro segmento marcador. - **Imagens PNG** começam com uma assinatura de 8 bytes: 89 50 4E 47 0D 0A 1A 0A. Note que a parte 50 4E 47 é o código ASCII para 'PNG'. - **Arquivos PDF** começam com 25 50 44 46, que é o ASCII para '%PDF'. Você pode abrir qualquer PDF em um editor de texto simples e ver isso logo no topo. - **Arquivos ZIP** começam com 50 4B 03 04. Isso é 'PK' em ASCII, de Phil Katz, o criador do formato. Como arquivos DOCX, XLSX, PPTX e JAR são todos baseados em ZIP, eles compartilham essa assinatura. - **Arquivos de áudio MP3** geralmente começam com FF FB ou FF F3, que é a palavra de sincronização MPEG. - **Arquivos EXE** no Windows começam com 4D 5A — 'MZ' em ASCII, de Mark Zbikowski, um dos arquitetos originais do MS-DOS. O nome 'magic bytes' vem do utilitário `file` do Unix, que usa um banco de dados chamado `/etc/magic` (ou `/usr/share/misc/magic` em sistemas modernos) desde a década de 1970. Quando você executa `file foto.jpg` em um terminal, o utilitário lê os bytes iniciais, consulta seu banco de dados e informa o tipo de arquivo real, ignorando completamente a extensão .jpg.

Como o Software de Detecção Lê a Assinatura

Em princípio, ler magic bytes é simples. Na prática, os casos extremos podem ser complicados. O processo básico envolve abrir o arquivo como um fluxo binário bruto, ler um pequeno buffer — geralmente os primeiros 512 bytes — e comparar esse buffer com uma lista de assinaturas conhecidas. Alguns formatos, no entanto, exigem a leitura de muito mais dados. A comparação nem sempre é uma simples correspondência de prefixo. Alguns formatos colocam sua assinatura em um deslocamento fixo. O formato de imagem de disco ISO, por exemplo, tem sua assinatura 'CD001' começando no byte 32.769. Arquivos ZIP podem ter seu diretório central no final do arquivo, forçando alguns detectores a verificar a partir do final em vez do começo. Bibliotecas modernas como Apache Tika (Java), python-magic (Python) e libmagic (C) lidam com essa complexidade. Só o Apache Tika conhece mais de 1.300 tipos de arquivo, detectando tipos MIME, codificações de caracteres e até metadados incorporados. No CocoConvert, usamos a detecção de assinatura no lado do servidor como nossa primeira linha de defesa. Se o tipo MIME que seu navegador declara não corresponder ao que a assinatura binária diz, o arquivo é sinalizado para uma análise mais detalhada antes de qualquer conversão começar. Formatos de contêiner tornam as coisas ainda mais complicadas. Um arquivo DOCX e um arquivo JAR ambos começam com 50 4B 03 04 porque ambos são arquivos ZIP. Para diferenciá-los, o software precisa olhar mais fundo dentro do arquivo em busca de arquivos específicos, como [Content_Types].xml para DOCX ou META-INF/MANIFEST.MF para um JAR. Essa detecção em duas passagens é prática padrão para qualquer pipeline sério de manipulação de arquivos.

Quando os Magic Bytes Falham (E Eles Falham)

Magic bytes são confiáveis, mas não são infalíveis. Vários cenários do mundo real podem enganar a detecção baseada em assinatura e fornecer respostas erradas ou ambíguas. **Arquivos truncados** são uma dor de cabeça constante. Se um download for interrompido, você pode ter um arquivo com um cabeçalho JPEG válido, mas sem dados de imagem reais. A verificação da assinatura passa, mas a conversão falha mais tarde, quando o decodificador espera uma imagem completa e encontra apenas um fragmento. **Arquivos intencionalmente criados** podem explorar o fato de que os magic bytes cobrem apenas o cabeçalho. Um arquivo pode ter um cabeçalho PNG válido seguido por um payload malicioso. Este é um vetor de ataque conhecido chamado de arquivo poliglota — um único binário que é simultaneamente válido como dois tipos de arquivo diferentes. Pesquisadores criaram poliglotas JPEG/JavaScript que um navegador executará como um script enquanto um visualizador de imagens o exibe como uma foto. A detecção de assinatura por si só não pegará isso. **Conflitos de versão de formato** criam outra camada de ambiguidade. Antes de 2007, os arquivos do Microsoft Office (DOC, XLS, PPT) usavam o Compound Document Binary Format, que começa com D0 CF 11 E0 A1 B1 1A E1. Todos os três formatos compartilham exatamente a mesma assinatura. Você não pode distinguir um .doc de um .xls de um .ppt usando magic bytes; você precisa analisar a estrutura interna. **Formatos de texto simples** como CSV, JSON, XML, HTML e Markdown não têm magic bytes. Eles são apenas sequências de caracteres. A detecção aqui depende de análise heurística: procurar por padrões como colchetes angulares (HTML/XML) ou chaves (JSON). Essas heurísticas podem estar erradas. Qualquer um que já batalhou com um 'CSV' que usa ponto e vírgula em vez de vírgulas conhece essa dor muito bem. Se o CocoConvert não consegue identificar com confiança um tipo de arquivo, ele informa você. Achamos que retornar um erro claro é muito mais útil do que adivinhar e produzir um arquivo corrompido.

Implicações Práticas para a Conversão de Arquivos

Então, como isso ajuda você? Muda completamente a forma como você soluciona falhas de conversão. Quando um serviço relata um 'formato de arquivo não suportado ou não reconhecido', o problema quase nunca é a extensão do nome do arquivo. É o conteúdo. Aqui estão os culpados mais comuns e o que fazer a respeito: **O arquivo é de um formato diferente do que você pensa.** Isso acontece muito com exportações de ferramentas de design. O Figma, por exemplo, pode exportar um arquivo rotulado como .jpg que na verdade é um PNG. O melhor a fazer é abrir o arquivo em um editor hexadecimal (como o HxD no Windows ou o Hex Fiend no macOS) e verificar os primeiros bytes. Se você vir 89 50 4E 47, é um PNG, independentemente do nome. Renomeie e tente novamente. **O arquivo está protegido por senha ou com DRM.** Documentos do Office criptografados ainda começam com D0 CF 11 E0, então a verificação da assinatura passa. Mas o conteúdo interno é texto cifrado. O CocoConvert não pode descriptografar arquivos protegidos por senha. Não confunda isso com uma limitação do serviço; é uma característica de segurança fundamental da própria criptografia. **O arquivo é um contêiner com o conteúdo errado.** Um arquivo criado ao renomear um .zip genérico para .docx terá a assinatura correta (50 4B), mas falhará na conversão porque não possui a estrutura XML de processamento de texto do Word necessária internamente. O conversor abre o arquivo, não encontra nada com que trabalhar e desiste. **Incompatibilidades de codec em arquivos de vídeo.** Um contêiner MKV (começa com 1A 45 DF A3) pode conter vídeo codificado em H.264, H.265, AV1, VP9 ou dezenas de outros. Os magic bytes confirmam o contêiner MKV, não o codec do fluxo de vídeo. Se o CocoConvert suporta MKV, mas seu arquivo usa um codec obscuro como o RealVideo 4, a detecção inicial passará, mas a etapa de transcodificação falhará.

Como Verificar o Tipo Real de um Arquivo Sem Software Especializado

Você não precisa instalar software especializado para verificar a identidade real de um arquivo. Estes métodos funcionam em todos os principais sistemas operacionais usando ferramentas que você já tem. **No Windows:** Abra o PowerShell e execute `Format-Hex -Path 'C:\caminho\para\seu\arquivo.ext' | Select-Object -First 3`. Este comando imprime os primeiros 48 bytes em hexadecimal. Compare a primeira linha de bytes com as assinaturas listadas anteriormente neste artigo. **No macOS e Linux:** Abra o Terminal e execute `xxd seuarquivo | head -3`. Isso mostra o deslocamento de bytes, os valores hexadecimais e a representação ASCII. Melhor ainda, apenas execute `file seuarquivo`. O utilitário `file` é integrado e oferece uma resposta limpa e legível imediatamente. **Em um navegador, sem nenhuma ferramenta:** Se você estiver em uma máquina com restrições onde não pode executar comandos, acesse a página de detecção do CocoConvert em cocoConvert.com/detect. Envie o arquivo, e nosso serviço informará o tipo MIME detectado, os bytes de assinatura correspondentes e seu nível de confiança. **Em Python (para desenvolvedores):** Após `pip install python-magic`, você pode executar `import magic; print(magic.from_file('seuarquivo', mime=True))`. Isso retorna um tipo MIME padrão como `image/jpeg`. Meu conselho para código Python em produção, no entanto, é usar a biblioteca `filetype`. Ela não tem dependências de sistema, o que a torna muito mais fácil de implantar no Windows sem batalhar com as DLLs do libmagic. Saber o verdadeiro tipo MIME antes de enviar economiza muito tempo. Se o tipo detectado de um arquivo não estiver na lista de entradas suportadas de um serviço, você sabe imediatamente que a conversão falhará.

Os Limites do que Qualquer Serviço de Conversão Pode Prometer

A detecção por magic bytes é um problema resolvido para os cerca de 200 formatos de arquivo que cobrem 99% do uso diário. Mas para a cauda longa de formatos especializados, proprietários ou legados, nenhum serviço — incluindo o CocoConvert — pode prometer cobertura completa. Formatos como Autodesk DWG para desenhos CAD, variantes proprietárias de imagens médicas de marcas específicas de scanners ou formatos de áudio de nicho de sintetizadores antigos geralmente têm documentação pobre ou inexistente. Mesmo que os magic bytes sejam conhecidos, a estrutura interna pode ser uma caixa-preta. Um conversor pode produzir um resultado com dados ausentes, cores incorretas ou camadas de metadados perdidas. No momento em que escrevo, o CocoConvert suporta cerca de 300 formatos de entrada. Embora pareça muito, o registro PRONOM da Biblioteca do Congresso documenta mais de 2.000 formatos de arquivo distintos. Essa lacuna representa formatos que são muito obscuros para justificar o esforço de engenharia, estão legalmente sobrecarregados por patentes ou são tão mal documentados que qualquer tentativa de conversão seria uma aposta arriscada. Minha recomendação é esta: se você trabalha em setores como imagens médicas, dados geoespaciais ou vídeo profissional, você deve verificar o suporte ao formato antes de se comprometer com um fluxo de trabalho de conversão. Verifique a página de suporte de formatos do CocoConvert. Ela lista todas as entradas e saídas suportadas, juntamente com notas sobre limitações conhecidas. É melhor verificar primeiro do que enviar um arquivo mestre de transmissão de 4GB apenas para descobrir que sua variante específica de MXF não é suportada. Os magic bytes dizem a um computador o que um arquivo *é*. Eles não dizem se a conversão desse arquivo produzirá algo *útil*. Essa segunda e mais importante questão depende de boa documentação, licenciamento claro e trabalho de engenharia dedicado que nenhuma quantidade de detecção inteligente de bytes pode substituir.

Como os Computadores Detectam Tipos de Arquivo: Explicando os Magic Bytes | CocoConvert Blog