Расширение файла — лишь ярлык: переименование virus.exe в photo.jpg ничего внутри не меняет. Эта страница читает первые байты каждого загруженного файла и сверяет их с более чем 60 настоящими магическими сигнатурами: изображения, документы, архивы, аудио и видео, шрифты, исполняемые файлы, базы данных и ключи. Вы получаете определённый тип, MIME-тип, расширения, которые обычно использует этот тип, предупреждение, когда расширение противоречит содержимому, и, где формат это содержит, сведения (размеры изображения, версию PDF, бренд MP4). Всё проверяется локально в вашем браузере.
Выберите файлы
Перетащите файлы сюда, или нажмите, чтобы выбрать их Один файл или много. Читаются только первые 512 байт каждого; файлы никогда не покидают этот компьютер.
Файлы не выбраны.
Результаты
Таблица определения появится здесь после выбора файлов и нажатия «Определить».
Что значит «совпадение»:согласованно — расширение совпадает с определённым форматом; несовпадение — содержимое относится к другому формату, чем утверждает расширение (переименованный файл или хуже); «нет сигнатуры» — первые байты не совпадают ни с одной известной сигнатурой, что нормально для простого текста, CSV и большинства форматов данных без заголовка. Приватность: файлы читаются встроенным FileReader браузера; ничего не загружается.
Что такое сигнатура файла?
Почти каждый двоичный формат начинается с фиксированной последовательности байтов — магического числа — которое туда поставили, чтобы программа могла узнать свои файлы, не доверяя имени. PNG всегда начинается с восьми байтов 89 50 4E 47 0D 0A 1A 0A («\x89PNG\r\n\x1a\n»), PDF — с ASCII-текста %PDF, ZIP — с PK\x03\x04 (инициалы Фила Каца, который придумал формат). Операционные системы в основном игнорируют эти байты и смотрят на расширение — именно поэтому переименованный файл нигде не «открывается нормально», и именно поэтому инструменты безопасности проверяют содержимое.
Известные первые байты
Байты
Формат
Примечание
89 50 4E 47 0D 0A 1A 0A
Изображение PNG
\r\n защищает от порчи окончаний строк
FF D8 FF
Изображение JPEG
каждый кадр JPEG начинается с маркера SOI
25 50 44 46 2D
Документ PDF
«%PDF-1.7» — далее следует версия
50 4B 03 04
Архив ZIP
docx/xlsx/odt/epub — это ZIP с расширением
D0 CF 11 E0
Старый Office
doc/xls/ppt/msi — составной файл OLE2
4D 5A
Windows EXE
«MZ», по имени Марка Збиковски из Microsoft
7F 45 4C 46
Linux ELF
\x7fELF — программы и разделяемые библиотеки
1A 45 DF A3
Matroska/WebM
начало контейнера EBML
75 73 74 61 72со смещения 257
Архив TAR
сигнатура спрятана глубоко в заголовке
Как определитель решает
Первые 512 байт каждого файла сравниваются с таблицей сигнатур в порядке специфичности: бренды контейнеров (RIFF…WAVE против RIFF…AVI против RIFF…WEBP, бренд-боксы ISO со смещения 8) проверяются раньше своих общих контейнеров, а форматы на основе ZIP (EPUB, ODF, OOXML) — раньше обычного ZIP. Где формат несёт самоописывающие метаданные, страница заглядывает на уровень глубже: размеры PNG/GIF/BMP/JPEG/WebP читаются из их заголовков, версия PDF — с байта 5, бренд MP4 и версия класса Java — с их стандартных смещений. Файлы, которые ничему не соответствуют, проходят текстовую эвристику (BOM, <?xml, <html, shebang, доля печатных символов), прежде чем быть признаны неизвестными.
Частые ошибки
«Говорит ZIP, но файл .docx» — это верно: .docx — это ZIP-архив, первая запись которого [Content_Types].xml; определитель распознаёт этот случай и сообщает именно Office Open XML. «Говорит, что сигнатуры нет, но файл открывается нормально» — у CSV, большинства исходного кода и бесчисленных научных форматов вообще нет магических байтов; «нет сигнатуры» — не обвинение. «Может ли он сказать, безопасен ли файл?» — нет. Проверка содержимого говорит, что файл собой представляет, а не что он делает; EXE остаётся EXE, будь это установщик или вредонос.
Частые вопросы
Почему только 512 байт? — каждая поддерживаемая сигнатура лежит в первых 512 байтах (самая глубокая — ustar в TAR со смещения 257); чтение большего замедлило бы большие пакеты без пользы. Определяет ли он длительность видео? — нет, только контейнер и его бренд; длительность требует разбора всего индекса, а это работа проигрывателя. Сразу несколько файлов? — да, перетащите всю выборку; каждая строка определяется независимо. Связанная страница: чтобы пойти в обратную сторону — от расширения к MIME-типу — используйте Поиск MIME-типов; чтобы хешировать те же файлы, используйте Пакетный хеш файлов.