07.09.2026
Как определить настоящий формат файла, если расширение изменено
Расширение файла — это всего лишь подсказка для операционной системы, а не гарантия того, что внутри действительно находится тот тип данных, который обещает имя. Пользователь может переименовать документ report.pdf в report.jpg, архив с вредоносным содержимым выдать за картинку, а старую базу данных сохранить под названием vacation.mp4. Система поверит названию и попытается открыть файл соответствующим приложением, а в результате получит ошибку, повреждение данных или, что хуже, выполнит код, который не должен был запускаться. Проблема особенно актуальна при работе с материалами из внешних источников, в журналистике, цифровых расследованиях и аудите, где важна именно техническая достоверность, а не внешний вид имени. Часто расширение меняется случайно при передаче через мессенджеры, при неправильной распаковке или сознательно для маскировки. В таких случаях полагаться на иконку и окончание имени нельзя, нужно смотреть внутрь файла, на его сигнатуру, то есть на последовательность байтов в начале, которая однозначно задаётся форматом.
Каждый формат имеет так называемый magic number — набор байтов в заголовке файла, который создаётся спецификацией и не зависит от имени. У JPEG это FF D8 FF, у PNG — 89 50 4E 47 0D 0A 1A 0A, у PDF — %PDF, у ZIP — 50 4B 03 04. Эти маркеры читаются даже если файл переименован в .txt, .doc или вообще лишён расширения. После заголовка следуют структуры, специфичные для типа: таблицы секций у DOCX, атомы у MP4, чанки у PNG. Именно поэтому определение по сигнатуре надёжнее, чем по имени. Операционные системы и многие программы сначала проверяют сигнатуру, а потом уже расширение, но в пользовательском интерфейсе ошибка в имени всё равно приводит к путанице. Важно понимать, что сигнатура говорит о формате контейнера, а не о содержании в юридическом смысле. Она подтверждает, что файл технически является JPEG, но не гарантирует, откуда он взялся и не был ли изменён.
На практике встречаются типовые случаи маскировки. Фотография с камеры, сохранённая как IMG_1234.JPG, переименованная в secret.txt, всё равно открывается как изображение, потому что первые байты FF D8 FF остаются на месте. Архив ZIP, переименованный в photo.jpg, при попытке открыть как картинку вызывает ошибку декодера, но утилита архиваторов распознаёт его по 50 4B 03 04. Документ Word в формате Office Open XML — это на самом деле ZIP-пакет с набором XML внутри, поэтому его сигнатура начинается как у архива 50 4B, а расширение .docx — лишь соглашение. Видео MP4 и MOV используют похожие атомы ftyp и moov, но отличаются деталями, и путаница возникает именно из-за одинаковых расширений. RAW-файлы камер имеют свои уникальные заголовки, которые не совпадают с JPEG, даже если они визуально похожи. Понимание этих различий помогает быстро понять, что файл не тот, за кого себя выдаёт, и принять решение о дальнейшем анализе.
Проверить сигнатуру вручную можно несколькими способами, но все они требуют аккуратности. В Linux и macOS команда file определяет тип по содержимому, а не по имени, и обычно достаточно выполнить file имя_файла. В Windows PowerShell можно прочитать первые байты командой Get-Content -Encoding Byte -TotalCount 8 и сравнить их с таблицей magic numbers. Hex-редакторы вроде HxD позволяют открыть файл и увидеть заголовок в шестнадцатеричном виде. Для быстрой проверки небольших файлов подойдёт онлайн-сервис, но для конфиденциальных материалов это нежелательно. Ещё один способ — попытаться открыть файл в нескольких программах, но это ненадёжно и может быть опасно при подозрительном исполняемом содержимом. Ручные методы дают ответ, но не фиксируют процесс, не сохраняют хеши и не документируют метаданные, что критично для аудита.
Ограничение ручных проверок в том, что они не дают воспроизводимой доказательной базы. Вы можете увидеть, что файл начинается с FF D8 FF, но не зафиксируете, когда это было проверено, какой был полный хеш и какие метаданные содержались внутри. При изменении даже одного байта сигнатура может остаться прежней, а содержимое — иным. Для журналиста, юриста или инженера важна цепочка: что именно было загружено, какие технические характеристики у него были на момент проверки и совпадает ли файл сейчас с тем, что проверялся раньше. Именно поэтому в профессиональных процессах используют инструменты, которые автоматически определяют реальный формат по сигнатуре, извлекают встроенные метаданные, считают криптографические отпечатки и формируют отчёт.
На этом уровне удобно работать с решениями, которые делают всю техническую часть прозрачной. FilesAudit при загрузке сначала анализирует сигнатуру и определяет реальный тип независимо от расширения, а затем извлекает всю доступную техническую информацию. Платформа считает SHA-256, MD5 и CRC32, фиксирует временные метки загрузки и формирует профессиональный PDF-отчёт, который можно использовать в документации. Поддержка охватывает более двухсот форматов, от изображений и видео до CAD и исходного кода, и полный перечень можно посмотреть в списке поддерживаемых форматов. Для регулярной работы, в том числе с конфиденциальными данными без загрузки в облако, есть десктопное приложение для локального анализа с пакетной обработкой. Такой подход не устанавливает юридическую подлинность, он фиксирует технический факт: что файл содержит, какой у него отпечаток и не менялся ли он после проверки.
Сравнить подходы просто. Ручная проверка в hex-редакторе быстра для одного файла, но не масштабируется и не оставляет аудит-трейла. Команда file удобна в терминале, но не даёт отчёта и не извлекает EXIF, XMP, IPTC или структуру документа. Онлайн-просмотрщики могут раскрыть формат, но требуют передачи данных третьей стороне. Инструменты вроде FilesAudit объединяют определение по сигнатуре, извлечение метаданных, хеширование и документирование в одном процессе, что экономит время при десятках файлов и снижает риск ошибки. При этом важно помнить, что техническое совпадение формата и хеша подтверждает идентичность копии, но не говорит о происхождении, авторстве или правомерности использования.
На практике оптимальный порядок действий такой. Сначала