Перейти к содержимому
BouseMuttonBouseMutton

Что такое магическое число?

Магическое число это короткая фиксированная последовательность байт в начале каждого файла. Она определяет формат до того, как будет прочитано любое расширение. На этой странице мы расскажем, как они работают, как выглядят наиболее распространённые сигнатуры и почему проверка магических байт всегда побеждает проверку по имени файла.

  • Простое объяснение
  • Охвачено 14 форматов
  • Байты никогда не покидают ваш браузер

Ключевые факты

  • Что это такое?

    Магическое число это фиксированная последовательность байт (обычно от 2 до 8 байт) в начале файла, которая определяет формат.

  • Где оно находится?

    Почти всегда по смещению 0 байт. Образы дисков ISO 9660 это известное исключение: их сигнатура CD001 находится по смещению 32769 (сектор 16).

  • Расширение или байты?

    Байты побеждают. Переименование report.exe в report.pdf меняет метку, а не содержимое. Магические байты по-прежнему читаются как 4D 5A.

  • Что вы получаете в ответ

    Наша проверка типа файла сообщает один из четырёх вердиктов: MATCH, MISMATCH, AMBIGUOUS или UNKNOWN. Каждый это детерминированный ответ о принадлежности к формату, а не о безопасности.

  • Приватность

    Бесплатный режим одиночного файла работает полностью в вашем браузере. Байты никогда не покидают ваше устройство.

  • Область безопасности

    Проверка магических байт определяет формат, а не вредоносное ПО. Используйте её как первый сигнал, а не как вердикт о вирусе.

Магическое число (также называемое сигнатурой магических байт или сигнатурой файла) это короткая фиксированная последовательность байт, записанная в самом начале файла, которая определяет его истинный формат. Операционная система использует её до любого расширения файла. Расширение это лишь подсказка; магическое число это истина.

Справочник сигнатур магических байт

14 широко используемых сигнатур, взятых из спецификаций форматов. Шестнадцатеричные байты в верхнем регистре, разделены пробелами. В ASCII-предпросмотре непечатаемые байты заменяются точкой.

  • PDF

    Магические байты (hex):
    25 50 44 46
    ASCII:
    %PDF
    Расширения:
    .pdf
    MIME-тип:
    application/pdf
    Смещение:
    байт 0
  • PNG

    Магические байты (hex):
    89 50 4E 47 0D 0A 1A 0A
    ASCII:
    .PNG....
    Расширения:
    .png
    MIME-тип:
    image/png
    Смещение:
    байт 0
  • JPEG

    Магические байты (hex):
    FF D8 FF
    ASCII:
    ...
    Расширения:
    .jpg, .jpeg
    MIME-тип:
    image/jpeg
    Смещение:
    байт 0
  • GIF

    Магические байты (hex):
    47 49 46 38 39 61
    ASCII:
    GIF89a
    Расширения:
    .gif
    MIME-тип:
    image/gif
    Смещение:
    байт 0
  • BMP

    Магические байты (hex):
    42 4D
    ASCII:
    BM
    Расширения:
    .bmp
    MIME-тип:
    image/bmp
    Смещение:
    байт 0
  • ZIP

    Магические байты (hex):
    50 4B 03 04
    ASCII:
    PK..
    Расширения:
    .zip
    MIME-тип:
    application/zip
    Смещение:
    байт 0
  • RAR (v5)

    Магические байты (hex):
    52 61 72 21 1A 07 01 00
    ASCII:
    Rar!....
    Расширения:
    .rar
    MIME-тип:
    application/vnd.rar
    Смещение:
    байт 0
  • 7-Zip

    Магические байты (hex):
    37 7A BC AF 27 1C
    ASCII:
    7z....
    Расширения:
    .7z
    MIME-тип:
    application/x-7z-compressed
    Смещение:
    байт 0
  • DOCX (Office Open XML)

    Магические байты (hex):
    50 4B 03 04
    ASCII:
    PK..
    Расширения:
    .docx
    MIME-тип:
    application/vnd.openxmlformats-officedocument.wordprocessingml.document
    Смещение:
    байт 0
  • XLSX (Office Open XML)

    Магические байты (hex):
    50 4B 03 04
    ASCII:
    PK..
    Расширения:
    .xlsx
    MIME-тип:
    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
    Смещение:
    байт 0
  • APK (Android package)

    Магические байты (hex):
    50 4B 03 04
    ASCII:
    PK..
    Расширения:
    .apk
    MIME-тип:
    application/vnd.android.package-archive
    Смещение:
    байт 0
  • MP4 (ISO BMFF)

    Магические байты (hex):
    00 00 00 20 66 74 79 70
    ASCII:
    ....ftyp
    Расширения:
    .mp4, .m4v
    MIME-тип:
    video/mp4
    Смещение:
    байт 0
  • Windows PE / EXE

    Магические байты (hex):
    4D 5A
    ASCII:
    MZ
    Расширения:
    .exe, .dll, .sys
    MIME-тип:
    application/vnd.microsoft.portable-executable
    Смещение:
    байт 0
  • ISO 9660

    Магические байты (hex):
    43 44 30 30 31
    ASCII:
    CD001
    Расширения:
    .iso
    MIME-тип:
    application/x-iso9660-image
    Смещение:
    байт (сектор 16)
  • PDF

    Эти четыре байта пишутся как %PDF. Сразу за ними идёт версия PDF, например %PDF-1.7.

  • PNG

    Восемь байт, включая маркеры конца строки PNG (0D 0A 1A 0A), чтобы ошибки передачи были обнаруживаемы.

  • JPEG

    Маркер начала изображения. Четвёртый байт отличает JFIF (E0) от EXIF (E1).

  • GIF

    GIF89a это современный вариант. GIF87a (47 49 46 38 37 61) это устаревшее написание, оно также допустимо.

  • BMP

    Два байта. Легко подделать; для уточнения используйте заголовок размера файла со смещением 2.

  • ZIP

    Заголовок локального файла. Пустые архивы вместо этого используют 50 4B 05 06 (конец центрального каталога).

  • RAR (v5)

    Сигнатура RAR 5. Более старые файлы RAR 1.5 - 4.x используют 7-байтовую сигнатуру, заканчивающуюся на 00.

  • 7-Zip

    Шесть байт, в которых читается 7z, за которыми следуют три магических байта.

  • DOCX (Office Open XML)

    DOCX это ZIP-контейнер. По одной только сигнатуре нельзя отличить документ Word от обычного ZIP. Смотрите на внутренний [Content_Types].xml.

  • XLSX (Office Open XML)

    Та же оговорка, что и для DOCX. Проверьте манифест OOXML, чтобы подтвердить, что это таблица.

  • APK (Android package)

    APK это ZIP-контейнер с манифестом Android внутри. Одной только сигнатуры ZIP недостаточно для подтверждения.

  • MP4 (ISO BMFF)

    Бокс ftyp со смещением 4 содержит идентификатор бренда. Распространённые бренды: isom, mp42, iso5.

  • Windows PE / EXE

    Два байта (Марк Збиковски). Смещение заголовка PE считывается из байта 0x3C; там расположена реальная магия PE\0\0.

  • ISO 9660

    ISO 9660 размещает дескриптор тома в секторе 16, поэтому сигнатура находится в байте 32769 (16 * 2048 + 1).

Как работает проверка магических байт

  1. 1

    Прочитайте первые байты

    Откройте файл как бинарный поток и прочитайте первые 8 - 16 байт. Этого достаточно, чтобы распознать каждую сигнатуру в таблице выше.

  2. 2

    Сверьте с известными сигнатурами

    Сопоставьте байты с базой известных форматов. Несколько форматов могут иметь общий префикс (каждый документ Office это ZIP), поэтому проверка возвращает самое точное совпадение.

  3. 3

    Сверьте с расширением файла

    Если обнаруженный формат не совпадает с тем, что заявляет расширение, вердикт MISMATCH. Если подходит несколько форматов, AMBIGUOUS. Если ничего не подходит, UNKNOWN.

Почему это важно?

Переименование файла из invoice.exe в invoice.pdf не меняет его байты. Первые два байта по-прежнему читаются как 4D 5A. Проверка магического числа сразу это распознаёт. Полезно, когда вложение выглядит легитимным, но расширение было изменено перед отправкой.

Проверка магических байт работает и в обратную сторону: файл вообще без расширения, но с правильными байтами PNG, остаётся PNG, и ваш просмотрщик изображений сможет его открыть. Принадлежность к формату живёт в байтах, а не в имени файла.

Словарь

Часто задаваемые вопросы

Попробуйте на своём файле

Бросьте любой файл. Проверка работает локально и сообщает вердикт меньше чем за секунду. Байты никогда не покидают ваш браузер.

Открыть проверку типа файла