Визначення типу файлу

Розширення файлу — лише мітка: перейменування 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Архів ZIPdocx/xlsx/odt/epub — це ZIP з чужим розширенням
D0 CF 11 E0Застарілий Officedoc/xls/ppt/msi — складений файл OLE2
4D 5AWindows EXE“MZ”, на честь Марка Збіковскі з Microsoft
7F 45 4C 46Linux ELF\x7fELF — програми і спільні бібліотеки
1A 45 DF A3Matroska/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, незалежно від того, інсталятор це чи шкідливе ПЗ.

Часті запитання (FAQ)

Чому лише 512 байтів? — кожна підтримувана сигнатура міститься в перших 512 байтах (найглибша — ustar у TAR на зсуві 257); читання більшого сповільнило б великі пакети без жодної користі.
Чи визначає він тривалість відео? — ні, лише контейнер і його бренд; тривалість потребує розбору всього індексу, це робота програвача.
Кілька файлів одночасно? — так, перетягніть цілий вибір; кожен рядок визначається незалежно.
Пов'язана сторінка: щоб піти у зворотний бік — від розширення до MIME-типу — скористайтеся Пошуком MIME-типу; щоб хешувати ті самі файли, використовуйте Пакетний хеш файлів.