Detetor de tipo de ficheiro

A extensão de um ficheiro é apenas um rótulo — renomear virus.exe para photo.jpg não muda nada lá dentro. Esta página lê os primeiros bytes de cada ficheiro carregado e compara-os com mais de 60 assinaturas mágicas reais: imagens, documentos, arquivos, áudio/vídeo, tipos de letra, executáveis, bases de dados e chaves. Obtém o tipo detetado, o tipo MIME, as extensões que esse tipo normalmente usa, um aviso quando a extensão contradiz o conteúdo, e onde o formato o transporta (dimensões da imagem, versão do PDF, marca do MP4). Tudo é inspecionado localmente no seu navegador.
Largue os ficheiros aqui, ou clique para os escolher
Um ficheiro ou muitos. Só os primeiros 512 bytes de cada um são lidos; os ficheiros nunca saem desta máquina.
Nenhum ficheiro selecionado.
A tabela de deteção aparece aqui depois de escolher ficheiros e carregar em Detetar.
O que significa "correspondência": consistente — a extensão coincide com o formato detetado; incompatível — o conteúdo é um formato diferente do que a extensão afirma (um ficheiro renomeado, ou pior); "sem assinatura" — os primeiros bytes não correspondem a nenhuma assinatura conhecida, o que é normal em texto simples, CSV e na maioria dos formatos de dados que simplesmente não têm cabeçalho. Privacidade: os ficheiros são lidos com o FileReader do próprio navegador; nada é enviado.

O que é uma assinatura de ficheiro?

Quase todos os formatos binários começam com uma sequência fixa de bytes — o número mágico — colocada ali para que um programa reconheça os seus próprios ficheiros sem confiar no nome. Um PNG começa sempre pelos oito bytes 89 50 4E 47 0D 0A 1A 0A ("\x89PNG\r\n\x1a\n"), um PDF pelo texto ASCII %PDF, um ZIP por PK\x03\x04 (as iniciais de Phil Katz, que concebeu o formato). Os sistemas operativos ignoram em grande parte estes bytes e olham para a extensão em vez disso — razão exata pela qual um ficheiro renomeado não "abre bem" em lado nenhum, e por que as ferramentas de segurança farejam o conteúdo.

Os primeiros bytes famosos

BytesFormatoNota
89 50 4E 47 0D 0A 1A 0AImagem PNGo \r\n protege contra corrupção de terminações de linha
FF D8 FFImagem JPEGcada frame JPEG começa com um marcador SOI
25 50 44 46 2DDocumento PDF"%PDF-1.7" — a versão segue-se
50 4B 03 04Arquivo ZIPdocx/xlsx/odt/epub são ZIPs com uma extensão
D0 CF 11 E0Office antigodoc/xls/ppt/msi — o ficheiro composto OLE2
4D 5AEXE do Windows"MZ", em homenagem a Mark Zbikowski, da Microsoft
7F 45 4C 46ELF do Linux\x7fELF — programas e bibliotecas partilhadas
1A 45 DF A3Matroska/WebMinício de contentor EBML
75 73 74 61 72 no deslocamento 257Arquivo TARa assinatura está escondida no fundo do cabeçalho

Como o detetor decide

Os primeiros 512 bytes de cada ficheiro são comparados com uma tabela de assinaturas por ordem de especificidade: as marcas de contentores (RIFF…WAVE vs RIFF…AVI vs RIFF…WEBP, caixas de marca ISO no deslocamento 8) são verificadas antes dos seus contentores genéricos, e os formatos baseados em ZIP (EPUB, ODF, OOXML) antes do ZIP simples. Quando um formato transporta metadados que se descrevem a si próprios, a página vai um nível mais fundo: as dimensões de PNG/GIF/BMP/JPEG/WebP são lidas dos seus cabeçalhos, a versão do PDF do byte 5, a marca do MP4 e a versão de classe Java nos seus deslocamentos padrão. Os ficheiros que não correspondem a nada passam por uma heurística de texto (BOM, <?xml, <html, shebang, rácio de imprimíveis) antes de serem considerados desconhecidos.

Erros comuns

"Diz ZIP mas o ficheiro é .docx" — isso está correto: um .docx é um arquivo ZIP cuja primeira entrada é [Content_Types].xml; o detetor reconhece esse caso e indica especificamente Office Open XML. "Diz que não há assinatura mas o ficheiro abre bem" — CSV, a maioria do código-fonte e inúmeros formatos científicos não têm bytes mágicos de todo; "sem assinatura" não é uma acusação. "Pode dizer-me se o ficheiro é seguro?" — não. A análise do conteúdo diz o que um ficheiro é, e não o que faz; um EXE é um EXE, seja um instalador ou malware.

Perguntas frequentes

Porque só 512 bytes? — todas as assinaturas suportadas vivem nos primeiros 512 bytes (a mais profunda é o ustar do TAR no deslocamento 257); ler mais abrandaria os lotes grandes sem qualquer ganho.
Deteta a duração do vídeo? — não, apenas o contentor e a sua marca; a duração exige analisar o índice completo, o que é trabalho de um leitor.
Vários ficheiros de uma vez? — sim, arraste uma seleção inteira; cada linha é detetada de forma independente.
Página relacionada: para o sentido inverso — extensão para tipo MIME — use a Consulta de tipos MIME; para calcular o hash dos mesmos ficheiros, use o Hash de ficheiros em lote.