Naar inhoud springen

Wat is een magisch getal?

Een magisch getal is de korte vaste bytereeks aan het begin van elk bestand. Het identificeert het formaat voordat een extensie wordt gelezen. Deze pagina behandelt hoe ze werken, hoe de meest voorkomende handtekeningen eruitzien en waarom een magic-byte-controle elke keer een bestandsnaamcontrole verslaat.

  • Uitleg in gewoon Nederlands
  • 14 formaten behandeld
  • Bytes verlaten je browser nooit

Belangrijkste feiten

  • Wat is het?

    Een magisch getal is een vaste bytereeks (meestal 2 tot 8 bytes) aan het begin van een bestand die het formaat identificeert.

  • Waar staat het?

    Bijna altijd op byte-offset 0. ISO 9660-schijfimages zijn de bekende uitzondering: hun CD001-handtekening staat op offset 32769 (sector 16).

  • Extensie of bytes?

    De bytes winnen. Het hernoemen van report.exe naar report.pdf verandert het label, niet de inhoud. De magische bytes lezen nog steeds 4D 5A.

  • Wat krijg je terug

    Onze Bestandstype-controle rapporteert een van vier oordelen: KOMT OVEREEN, KOMT NIET OVEREEN, DUBBELZINNIG of ONBEKEND. Elk is een deterministisch antwoord over de identiteit van het formaat, niet over veiligheid.

  • Privacy

    De gratis enkel-bestand-stroom loopt volledig in je browser. De bytes verlaten je apparaat nooit.

  • Veiligheidsscope

    Een magic-byte-controle identificeert het formaat, niet malware. Gebruik het als eerste signaal, niet als virusoordeel.

Een magisch getal (ook wel magic-byte-handtekening of bestandshandtekening genoemd) is een korte, vaste bytereeks die helemaal aan het begin van een bestand wordt geschreven en het ware formaat identificeert. Het besturingssysteem gebruikt het voordat er een bestandsextensie wordt bekeken. De extensie is slechts een hint; het magische getal is de waarheid.

Magic-byte-handtekeningreferentie

14 veelgebruikte handtekeningen afkomstig uit de formaatspecificaties. Hex-bytes zijn hoofdletters, gescheiden door spaties. ASCII-voorbeelden vervangen niet-afdrukbare bytes door een punt.

  • PDF

    Magische bytes (hex):
    25 50 44 46
    ASCII:
    %PDF
    Extensies:
    .pdf
    MIME-type:
    application/pdf
    Offset:
    byte 0
  • PNG

    Magische bytes (hex):
    89 50 4E 47 0D 0A 1A 0A
    ASCII:
    .PNG....
    Extensies:
    .png
    MIME-type:
    image/png
    Offset:
    byte 0
  • JPEG

    Magische bytes (hex):
    FF D8 FF
    ASCII:
    ...
    Extensies:
    .jpg, .jpeg
    MIME-type:
    image/jpeg
    Offset:
    byte 0
  • GIF

    Magische bytes (hex):
    47 49 46 38 39 61
    ASCII:
    GIF89a
    Extensies:
    .gif
    MIME-type:
    image/gif
    Offset:
    byte 0
  • BMP

    Magische bytes (hex):
    42 4D
    ASCII:
    BM
    Extensies:
    .bmp
    MIME-type:
    image/bmp
    Offset:
    byte 0
  • ZIP

    Magische bytes (hex):
    50 4B 03 04
    ASCII:
    PK..
    Extensies:
    .zip
    MIME-type:
    application/zip
    Offset:
    byte 0
  • RAR (v5)

    Magische bytes (hex):
    52 61 72 21 1A 07 01 00
    ASCII:
    Rar!....
    Extensies:
    .rar
    MIME-type:
    application/vnd.rar
    Offset:
    byte 0
  • 7-Zip

    Magische bytes (hex):
    37 7A BC AF 27 1C
    ASCII:
    7z....
    Extensies:
    .7z
    MIME-type:
    application/x-7z-compressed
    Offset:
    byte 0
  • DOCX (Office Open XML)

    Magische bytes (hex):
    50 4B 03 04
    ASCII:
    PK..
    Extensies:
    .docx
    MIME-type:
    application/vnd.openxmlformats-officedocument.wordprocessingml.document
    Offset:
    byte 0
  • XLSX (Office Open XML)

    Magische bytes (hex):
    50 4B 03 04
    ASCII:
    PK..
    Extensies:
    .xlsx
    MIME-type:
    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
    Offset:
    byte 0
  • APK (Android package)

    Magische bytes (hex):
    50 4B 03 04
    ASCII:
    PK..
    Extensies:
    .apk
    MIME-type:
    application/vnd.android.package-archive
    Offset:
    byte 0
  • MP4 (ISO BMFF)

    Magische bytes (hex):
    00 00 00 20 66 74 79 70
    ASCII:
    ....ftyp
    Extensies:
    .mp4, .m4v
    MIME-type:
    video/mp4
    Offset:
    byte 0
  • Windows PE / EXE

    Magische bytes (hex):
    4D 5A
    ASCII:
    MZ
    Extensies:
    .exe, .dll, .sys
    MIME-type:
    application/vnd.microsoft.portable-executable
    Offset:
    byte 0
  • ISO 9660

    Magische bytes (hex):
    43 44 30 30 31
    ASCII:
    CD001
    Extensies:
    .iso
    MIME-type:
    application/x-iso9660-image
    Offset:
    byte (sector 16)
  • PDF

    De vier bytes spellen %PDF. De PDF-versie volgt direct, bijv. %PDF-1.7.

  • PNG

    Acht bytes inclusief de PNG-einderegelmarkeringen (0D 0A 1A 0A) zodat transmissiefouten detecteerbaar zijn.

  • JPEG

    Start-of-Image-marker. De vierde byte onderscheidt JFIF (E0) van EXIF (E1).

  • GIF

    GIF89a is de moderne variant. GIF87a (47 49 46 38 37 61) is de oudere spelling en is ook geldig.

  • BMP

    Twee bytes. Makkelijk te spoofen; combineer met de bestandsgrootteheader op offset 2 om verwarring weg te nemen.

  • ZIP

    Lokale bestandsheader. Lege archieven gebruiken in plaats daarvan 50 4B 05 06 (end-of-central-directory).

  • RAR (v5)

    RAR 5-handtekening. Oudere RAR 1.5 tot 4.x-bestanden gebruiken een 7-byte-handtekening die eindigt op 00.

  • 7-Zip

    Zes bytes die 7z spellen gevolgd door drie magische bytes.

  • DOCX (Office Open XML)

    DOCX is een ZIP-container. De handtekening alleen kan een Word-document niet onderscheiden van een algemene ZIP. Kijk naar de interne [Content_Types].xml.

  • XLSX (Office Open XML)

    Hetzelfde voorbehoud als bij DOCX. Inspecteer het OOXML-manifest om de spreadsheetvariant te bevestigen.

  • APK (Android package)

    APK is een ZIP-container met een Android-manifest erin. De ZIP-handtekening alleen is geen voldoende bewijs.

  • MP4 (ISO BMFF)

    Het ftyp-vak op offset 4 draagt de merkidentificatie. Veelvoorkomende merken: isom, mp42, iso5.

  • Windows PE / EXE

    Twee bytes (Mark Zbikowski). De PE-header-offset wordt gelezen vanaf byte 0x3C; daar zit het werkelijke PE\0\0-magische getal.

  • ISO 9660

    ISO 9660 plaatst de volumebeschrijving op sector 16, dus de handtekening staat op byte 32769 (16 * 2048 + 1).

Hoe een magic-byte-controle werkt

  1. 1

    Lees de eerste bytes

    Open het bestand als binaire stroom en lees de eerste 8 tot 16 bytes. Dat is genoeg om elke handtekening in bovenstaande tabel te herkennen.

  2. 2

    Vergelijk met bekende handtekeningen

    Vergelijk de bytes met een database van bekende formaten. Meerdere formaten kunnen een prefix delen (elk Office-document is een ZIP), dus de controle retourneert de meest specifieke overeenkomst.

  3. 3

    Kruiscontroleer met de bestandsextensie

    Als het gedetecteerde formaat niet overeenkomt met wat de extensie beweert, is het oordeel KOMT NIET OVEREEN. Als meerdere formaten passen, DUBBELZINNIG. Als niets past, ONBEKEND.

Waarom is dit belangrijk?

Een bestand hernoemen van factuur.exe naar factuur.pdf verandert de bytes niet. De eerste twee bytes lezen nog steeds 4D 5A. De magic-number-controle vangt dat direct op. Handig wanneer een bijlage er legitiem uitziet maar de extensie voor het verzenden is gewijzigd.

Magic-byte-controles vangen ook het omgekeerde op: een bestand zonder enige extensie maar met geldige PNG-bytes is nog steeds een PNG en je viewer kan het openen. Formaatidentiteit zit in de bytes, niet in de bestandsnaam.

Woordenlijst

Veelgestelde vragen

Probeer het op je eigen bestand

Sleep een willekeurig bestand. De controle loopt lokaal en rapporteert een oordeel binnen een seconde. De bytes verlaten je browser nooit.

Bestandstype-controle openen