Ir para o conteúdo
BouseMuttonBouseMutton

O que é um número mágico?

Um número mágico é a pequena sequência de bytes fixa no início de cada ficheiro. Identifica o formato antes de qualquer extensão ser lida. Esta página explica como funcionam, como são as assinaturas mais comuns e porque uma verificação por bytes mágicos vence sempre uma verificação por nome de ficheiro.

  • Explicação em português simples
  • 14 formatos cobertos
  • Os bytes nunca saem do seu navegador

Factos principais

  • O que é?

    Um número mágico é uma sequência de bytes fixa (normalmente entre 2 e 8 bytes) no início de um ficheiro que identifica o formato.

  • Onde fica?

    Quase sempre no byte de posição 0. As imagens de disco ISO 9660 são a exceção conhecida: a sua assinatura CD001 fica na posição 32769 (setor 16).

  • Extensão ou bytes?

    Os bytes ganham. Renomear report.exe para report.pdf muda o rótulo, não o conteúdo. Os bytes mágicos continuam a ser 4D 5A.

  • O que recebe de volta

    O nosso Verificador de Tipo de Ficheiro devolve um de quatro veredictos: CORRESPONDE, DIVERGE, AMBÍGUO ou DESCONHECIDO. Cada um é uma resposta determinística sobre a identidade do formato, não sobre segurança.

  • Privacidade

    O fluxo gratuito para ficheiro único é executado integralmente no seu navegador. Os bytes nunca saem do seu dispositivo.

  • Âmbito de segurança

    Uma verificação por bytes mágicos identifica o formato, não malware. Use-a como primeiro sinal, não como veredicto antivírus.

Um número mágico (também chamado assinatura de bytes mágicos ou assinatura de ficheiro) é uma pequena sequência de bytes fixa, escrita logo no início de um ficheiro, que identifica o seu formato verdadeiro. O sistema operativo usa-a antes de qualquer extensão. A extensão é apenas uma pista; o número mágico é a verdade.

Referência de assinaturas de bytes mágicos

14 assinaturas amplamente utilizadas, retiradas das especificações dos formatos. Os bytes hexadecimais estão em maiúsculas, separados por espaços. As pré-visualizações ASCII substituem os bytes não imprimíveis por um ponto.

  • PDF

    Bytes mágicos (hex):
    25 50 44 46
    ASCII:
    %PDF
    Extensões:
    .pdf
    Tipo MIME:
    application/pdf
    Posição:
    byte 0
  • PNG

    Bytes mágicos (hex):
    89 50 4E 47 0D 0A 1A 0A
    ASCII:
    .PNG....
    Extensões:
    .png
    Tipo MIME:
    image/png
    Posição:
    byte 0
  • JPEG

    Bytes mágicos (hex):
    FF D8 FF
    ASCII:
    ...
    Extensões:
    .jpg, .jpeg
    Tipo MIME:
    image/jpeg
    Posição:
    byte 0
  • GIF

    Bytes mágicos (hex):
    47 49 46 38 39 61
    ASCII:
    GIF89a
    Extensões:
    .gif
    Tipo MIME:
    image/gif
    Posição:
    byte 0
  • BMP

    Bytes mágicos (hex):
    42 4D
    ASCII:
    BM
    Extensões:
    .bmp
    Tipo MIME:
    image/bmp
    Posição:
    byte 0
  • ZIP

    Bytes mágicos (hex):
    50 4B 03 04
    ASCII:
    PK..
    Extensões:
    .zip
    Tipo MIME:
    application/zip
    Posição:
    byte 0
  • RAR (v5)

    Bytes mágicos (hex):
    52 61 72 21 1A 07 01 00
    ASCII:
    Rar!....
    Extensões:
    .rar
    Tipo MIME:
    application/vnd.rar
    Posição:
    byte 0
  • 7-Zip

    Bytes mágicos (hex):
    37 7A BC AF 27 1C
    ASCII:
    7z....
    Extensões:
    .7z
    Tipo MIME:
    application/x-7z-compressed
    Posição:
    byte 0
  • DOCX (Office Open XML)

    Bytes mágicos (hex):
    50 4B 03 04
    ASCII:
    PK..
    Extensões:
    .docx
    Tipo MIME:
    application/vnd.openxmlformats-officedocument.wordprocessingml.document
    Posição:
    byte 0
  • XLSX (Office Open XML)

    Bytes mágicos (hex):
    50 4B 03 04
    ASCII:
    PK..
    Extensões:
    .xlsx
    Tipo MIME:
    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
    Posição:
    byte 0
  • APK (Android package)

    Bytes mágicos (hex):
    50 4B 03 04
    ASCII:
    PK..
    Extensões:
    .apk
    Tipo MIME:
    application/vnd.android.package-archive
    Posição:
    byte 0
  • MP4 (ISO BMFF)

    Bytes mágicos (hex):
    00 00 00 20 66 74 79 70
    ASCII:
    ....ftyp
    Extensões:
    .mp4, .m4v
    Tipo MIME:
    video/mp4
    Posição:
    byte 0
  • Windows PE / EXE

    Bytes mágicos (hex):
    4D 5A
    ASCII:
    MZ
    Extensões:
    .exe, .dll, .sys
    Tipo MIME:
    application/vnd.microsoft.portable-executable
    Posição:
    byte 0
  • ISO 9660

    Bytes mágicos (hex):
    43 44 30 30 31
    ASCII:
    CD001
    Extensões:
    .iso
    Tipo MIME:
    application/x-iso9660-image
    Posição:
    byte (setor 16)
  • PDF

    Os quatro bytes formam %PDF. A versão do PDF surge logo a seguir, por exemplo %PDF-1.7.

  • PNG

    Oito bytes que incluem os marcadores de fim de linha do PNG (0D 0A 1A 0A), o que permite detetar erros de transmissão.

  • JPEG

    Marcador de Início de Imagem. O quarto byte distingue JFIF (E0) de EXIF (E1).

  • GIF

    GIF89a é a variante moderna. GIF87a (47 49 46 38 37 61) é a escrita antiga e também é válida.

  • BMP

    Dois bytes. Fácil de falsificar; combine com o cabeçalho de tamanho do ficheiro na posição 2 para esclarecer.

  • ZIP

    Cabeçalho de ficheiro local. Os arquivos vazios usam 50 4B 05 06 (fim do diretório central) em vez disso.

  • RAR (v5)

    Assinatura do RAR 5. Os ficheiros RAR 1.5 a 4.x mais antigos usam uma assinatura de 7 bytes terminada em 00.

  • 7-Zip

    Seis bytes que formam 7z seguidos de três bytes mágicos.

  • DOCX (Office Open XML)

    O DOCX é um recipiente ZIP. A assinatura por si só não distingue um documento Word de um ZIP genérico. Veja o ficheiro interno [Content_Types].xml.

  • XLSX (Office Open XML)

    Mesma ressalva que o DOCX. Inspecione o manifesto OOXML para confirmar a variante de folha de cálculo.

  • APK (Android package)

    O APK é um recipiente ZIP com um manifesto Android lá dentro. A assinatura ZIP só por si não é prova suficiente.

  • MP4 (ISO BMFF)

    A caixa ftyp na posição 4 transporta o identificador da marca. Marcas comuns: isom, mp42, iso5.

  • Windows PE / EXE

    Dois bytes (Mark Zbikowski). A posição do cabeçalho PE é lida no byte 0x3C; é aí que se encontra a assinatura PE\0\0.

  • ISO 9660

    O ISO 9660 coloca o descritor de volume no setor 16, pelo que a assinatura fica no byte 32769 (16 * 2048 + 1).

Como funciona uma verificação por bytes mágicos

  1. 1

    Ler os primeiros bytes

    Abra o ficheiro como um fluxo binário e leia os primeiros 8 a 16 bytes. Isso chega para reconhecer todas as assinaturas da tabela acima.

  2. 2

    Comparar com assinaturas conhecidas

    Compare os bytes com uma base de dados de formatos conhecidos. Vários formatos podem partilhar o mesmo prefixo (todo o documento do Office é um ZIP), por isso a verificação devolve a correspondência mais específica.

  3. 3

    Confrontar com a extensão do ficheiro

    Se o formato detetado não coincidir com o que a extensão indica, o veredicto é DIVERGE. Se vários formatos se ajustarem, AMBÍGUO. Se nenhum se ajustar, DESCONHECIDO.

Porque é que isto importa?

Renomear um ficheiro de invoice.exe para invoice.pdf não muda os seus bytes. Os primeiros dois bytes continuam a ser 4D 5A. A verificação do número mágico apanha isso de imediato. Útil quando um anexo parece legítimo mas a extensão foi alterada antes de ser enviado.

As verificações por bytes mágicos também apanham o inverso: um ficheiro sem qualquer extensão mas com bytes PNG válidos continua a ser um PNG e o seu visualizador de imagens pode abri-lo. A identidade do formato está nos bytes, não no nome do ficheiro.

Glossário

Perguntas frequentes

Experimente no seu próprio ficheiro

Largue qualquer ficheiro. A verificação corre localmente e devolve um veredicto em menos de um segundo. Os bytes nunca saem do seu navegador.

Abrir o Verificador de Tipo de Ficheiro