Урок 4. Как понять настоящий тип файла
Определяем формат по содержимому и безопасно просматриваем ZIP и JAR без запуска.
Расширение — часть имени, а не гарантия содержимого. Файл photo.jpg может оказаться архивом, traffic.txt — записью сетевого обмена, а файл без расширения — изображением. В олимпиадной задаче неправильное расширение часто оставляют специально: участник должен проверить данные, а не поверить названию.
Задача урока сводится к двум результатам:
- чем файл является на самом деле;
- какой инструмент применять дальше.
Первый проход строится на утилитах file, binwalk, unzip и xxd, уже установленных в олимпиадном образе Kali. Конкретный инструмент выбирается после определения типа файла и чтения вопроса.
Почему расширению нельзя доверять
Расширение помогает операционной системе выбрать программу. Его можно изменить обычным переименованием:
mv archive.zip archive.jpg
Содержимое от этого не станет изображением. Поэтому различайте:
- заявленный тип — то, что следует из имени;
- фактический тип — то, что следует из содержимого.
Если эти типы не совпадают, ответ обычно строится по фактическому типу.
Первый инструмент — file
Команда file смотрит на служебные признаки внутри данных:
file suspicious.txt
file --mime-type suspicious.txt
Возможный вывод:
suspicious.txt: PNG image data, 640 x 360, 8-bit/color RGB
suspicious.txt: image/png
Первая команда даёт удобное описание, вторая — MIME-тип вида type/subtype. Если условие просит MIME, сдавать нужно именно image/png, а не весь вывод первой команды.
file хорошо подходит для первого прохода. Он часто распознаёт изображения, архивы, PDF, сетевые записи, исполняемые файлы и образы дисков. Но это не оракул: сильно повреждённый или редкий формат может быть определён слишком общо.
Что такое сигнатура
У многих форматов есть характерные байты в начале. Их называют сигнатурой или magic bytes.
| Формат | Начало файла | Что означает |
|---|---|---|
| PNG | 89 50 4e 47 0d 0a 1a 0a |
вероятно, изображение PNG |
| ZIP/JAR | 50 4b 03 04 |
вероятно, ZIP-контейнер |
%PDF- |
вероятно, документ PDF | |
| ELF | 7f 45 4c 46 |
исполняемый файл или другой объект ELF |
Посмотреть первые байты можно так:
xxd -l 32 suspicious.txt
Сигнатура создаёт обоснованную версию, но одной короткой последовательности иногда мало. Она может случайно встретиться в других данных. Следующий шаг — дать подходящей программе прочитать внутреннее устройство файла.
Как подтвердить результат
Для разных форматов проверка выглядит по-разному:
- ZIP или JAR:
unzip -tиunzip -l; - PNG и JPEG:
file,exiftool, обычное открытие копии; - вложенный объект в большом файле:
binwalk; - PDF:
pdfinfoили открытие копии в просмотрщике; - сетевой захват:
file, затем Wireshark в сетевом модуле.
Например:
file strange.jpg
unzip -t strange.jpg
unzip -l strange.jpg
Если file сообщает ZIP, а unzip успешно проверяет архив и показывает его содержимое, вывод уже хорошо подтверждён. Переименовывать файл для этого не обязательно.
Архив и JAR — контейнеры
Контейнер — файл, внутри которого лежат другие файлы. JAR — это ZIP с принятой в Java структурой. Его можно исследовать без запуска:
file plugin.jar
unzip -l plugin.jar
unzip -p plugin.jar META-INF/MANIFEST.MF
Внутри JAR часто находятся:
META-INF/MANIFEST.MF;- файлы
.classс Java-кодом; - конфигурации
.json,.ini,.conf,.properties; - изображения и другие ресурсы.
Не запускайте неизвестный JAR. Если условие просит путь конфигурации, достаточно списка архива. Если позже потребуется понять Java-код, на олимпиадной Kali уже установлен jadx; он понадобится в отдельном уроке по анализу программ.
Важно не перепутать уровни. Хеш всего plugin.jar и хеш файла Stealer.class внутри него — разные значения. Всегда считайте сумму именно того объекта, который назван в вопросе.
PCAP — запись сетевого обмена
PCAP хранит сетевые пакеты. На первом проходе фиксируются:
- распознать такой файл;
- записать его точное имя;
- связать его с вопросом о сети.
Глубокий разбор протоколов будет позже. Если вопрос просит только имя сетевого файла, не нужно сразу исследовать каждый пакет.
Что означает слово «дамп»
Дамп — сохранённая копия каких-либо данных. Это может быть:
- память одного процесса;
- образ оперативной памяти всей системы;
- участок необработанных данных;
- образ диска;
- текстовая выгрузка базы.
Для них нужны разные инструменты. Например, Volatility предназначен прежде всего для образов оперативной памяти системы; его не следует запускать на любом файле только потому, что тот назван dump.bin. Сначала примените file, прочитайте условие и определите класс объекта.
Практический набор урока
В l4_unknowns.zip находятся семь файлов с неинформативными именами и README.txt. Сначала распакуйте архив в отдельную папку:
unzip -l l4_unknowns.zip
mkdir -p work/l4
unzip l4_unknowns.zip -d work/l4
file work/l4/*
Если file показывает, что один из объектов является ZIP или JAR, посмотрите его содержимое:
unzip -t work/l4/<ИМЯ-ФАЙЛА>
unzip -l work/l4/<ИМЯ-ФАЙЛА>
Задания проверяют три самостоятельных результата:
- C10 — определить MIME изображения с неправильным расширением;
- C11 — назвать файл, который на самом деле является PCAP;
- C12 — найти полный путь конфигурации внутри JAR.
Каждый ответ получается на новых данных. Имена из примеров выше не являются ответами.
Реальная задача ВСОШ: «Заражённый лаунчер Pinecraft»
В региональной задаче ВСОШ 2025–2026 для 9 класса участнику выдавали zlauncher-premium.jar и launcher_process.dmp. Открыть исходное условие и разбор.
Подробный разбор JAR и дампа процесса
Нужно было найти:
- MD5 вредоносного файла внутри лаунчера;
- адрес отправки украденных паролей;
- ключ шифрования журнала.
Сначала JAR исследуется как архив, без запуска:
file zlauncher-premium.jar launcher_process.dmp
unzip -l zlauncher-premium.jar
unzip -Z1 zlauncher-premium.jar | grep -E '(^|/)Stealer\.class$'
Команда показывает полный путь к Stealer.class. Его можно извлечь под безопасным именем в рабочую папку:
mkdir -p work/launcher
unzip -p zlauncher-premium.jar <ПОЛНЫЙ-ПУТЬ>/Stealer.class \
> work/launcher/Stealer.class
md5sum work/launcher/Stealer.class
В опубликованном решении получена сумма:
9b7dab9e88563c2ea2211165a2a463c9
Это сумма извлечённого .class, а не всего JAR.
launcher_process.dmp — снимок памяти одного процесса. Для первого поиска достаточно предустановленной команды strings, которая печатает читаемые строки и ничего не запускает:
strings -a launcher_process.dmp | grep -E 'https?://'
strings -a launcher_process.dmp | grep -iE 'xor|key'
Так в авторском разборе находились:
POST http://steal.darkmc.ru/collect
XOR_KEY = "MC2026"
Ответами становились http://steal.darkmc.ru/collect и MC2026.
Название Stealer.class само по себе не доказывает вредоносность. Для полного технического заключения потребовался бы анализ Java-кода. Но в рамках вопроса олимпиады список архива точно указывает требуемый файл, а строки дампа дают два остальных значения.
Расширение — только предположение
Результат первого прохода может быть коротким: «unknown.txt является PCAP» или «photo.png читается как ZIP/JAR». Этого достаточно, если вопрос просит тип или путь внутри контейнера. Расширение помогло выбрать кандидата, а вывод подтвердили содержимое и подходящая утилита.
Распознанный файл не всегда нужно разбирать глубже. Граница определяется вопросом: для имени PCAP достаточно типа, для конфигурации JAR нужен список архива, а выполнение неизвестного кода не требуется ни в одном из этих случаев.
C10. Изображение без правильного имени
Определите фактический MIME-тип файла artifact_k.log. Сдайте значение в формате type/subtype.
C11. Где сетевой захват
Какой файл набора является сетевой записью PCAP? Сдайте только имя файла с расширением.
C12. Конфигурация внутри JAR
Файл artifact_q.png является JAR/ZIP. Сдайте полный путь JSON-конфигурации агента внутри него, не запуская содержимое.