Урок 3. Файл внутри файла и хвост после конца

binwalk -e и -D, данные после конца картинки, испорченная сигнатура, картинка и звук.

Один файл может прятать другой: картинку внутри «прошивки», архив в середине «мусора», строку после конца изображения. Программы-просмотрщики этого не покажут — картинка откроется как обычно. В этом уроке ищем такие вложения, достаём их и чиним файлы с испорченным началом.

binwalk: что спрятано внутри

binwalk проходит по всему файлу и ищет знакомые сигнатуры не только в начале, но и в середине:

binwalk podarok.bin
DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
1337          0x539           bzip2 compressed data, block size = 900k

Первая колонка — смещение от начала файла в обычных (десятичных) числах, вторая — то же число в шестнадцатеричной записи. Если вопрос спрашивает смещение, сдавайте десятичное, если не сказано иначе.

Достать: binwalk -e и binwalk -Me

Найденное обычно сразу вытаскивают:

binwalk -e podarok.bin       # вырезать и распаковать то, что нашлось
binwalk -Me podarok.bin      # то же, но слоями: архив в архиве в архиве

Результат лежит в папке _podarok.bin.extracted/, имя каждого файла — смещение находки в шестнадцатеричной записи: для bzip2 со смещения 0x539 это 539. Ключ -M («матрёшка») нужен, когда внутри сжатого потока лежит ещё один — binwalk сам распакует все слои.

Важная тонкость: в binwalk второй версии (на нашей Kali стоит 2.4.3, проверить — binwalk --help | head -1) ключ -e распаковывает архивы и сжатые потоки (zip, gzip, bzip2, xz, 7z), а картинки и документы не вырезает. Для них нужен ключ -D с названием формата:

binwalk -D 'png image:png' fragment.raw      # вырезать все PNG
binwalk -D 'pdf document:pdf' evidence.bin   # вырезать все PDF
binwalk --dd='.*' fragment.raw               # вырезать вообще всё, что нашлось

После любого извлечения проверьте результат командой file, а картинку просто откройте.

Если binwalk недоступен

То же самое делается вручную. Зная смещение из binwalk или из xxd, отрежьте всё до него:

dd if=fragment.raw of=found.png bs=1 skip=68357
tail -c +68358 fragment.raw > found.png      # то же: tail считает с единицы

Если после вырезанного файла идут лишние байты, картинка обычно всё равно откроется: просмотрщик останавливается на маркере конца.

binwalk fragment.raw нашёл PNG со смещения 68357, но после binwalk -e картинки в папке нет. Что делать? · 4 б.
Скачать файлы задания: l6_fragment.raw
C16

C16. Где начинается картинка

10 б.

Найдите, с какого смещения внутри l6_fragment.raw начинается PNG. Сдайте смещение обычным (десятичным) числом.

C17

C17. Метка на вырезанной картинке

10 б.

Вырежьте PNG из l6_fragment.raw и сдайте значение поля Case-ID в его метаданных.

Задача ВСОШ: «Подарок»

Муниципальный этап 2025–2026, 9 класс. «Дед Мороз уже положил под ёлочку подарок, но в коробке, кажется, что-то виднеется… сам подарок за чем-то спрятан». Рекомендуемые утилиты: binwalk, tail.

Файл задачи: podarok.bin

ВСОШ-313

ВСОШ: «Подарок», 9 класс

5 б.

Муниципальный этап 2025–2026, 9 класс.

Найдите подарок и сдайте флаг.

Файлы задачи: podarok.bin.

Флаг сдаётся в поле ниже и засчитывается и в карточке задачи на платформе. Число попыток общее с платформой, как на олимпиаде. Полный разбор открывается кнопкой с ключом под заданием.

Хвост после конца файла

У многих форматов есть маркер конца: PNG заканчивается блоком IEND, JPEG — байтами FF D9. Всё, что дописано после, просмотрщик молча пропускает. Это самый простой тайник, и проверяется он одной командой:

tail -c 200 image.png | strings
strings -n 8 image.png | tail -5

Если в конце видна строка из латиницы и цифр, скорее всего, это Base64 (echo … | base64 -d). Если раскодировать не выходит — поищите в задаче, чем её закодировали: в архиве может лежать скрипт с алфавитом кодировки. Тогда декодер пишется в несколько строк, обратным ходом к скрипту.

Задача ВСОШ: «Флешка возможностей»

Региональный этап 2023–2024 (вариант 9 класса повторяет задачу 2022–2023). Лютик нашёл флешку загадочного чародея. Внутри — картинки, файлы-приманки и подсказка «Истина скрыта не в словах, а в видах». Рекомендуемые утилиты: bash, python.

Файлы: вариант 9 класса — simplified_wizard_legacy.tar-9.gz, вариант 10 класса — simplified_wizard_legacy-10.tar.gz, вариант 11 класса — simplified_wizard_legacy-11.tar.gz

ВСОШ-84

ВСОШ: «Флешка возможностей», 9 класс, региональный этап 2022–2023

5 б.

9 класс, региональный этап 2022–2023.

Найдите ключ доступа и сдайте флаг.

Файлы задачи: simplified_wizard_legacy.tar-9.gz.

Флаг сдаётся в поле ниже и засчитывается и в карточке задачи на платформе. Число попыток общее с платформой, как на олимпиаде. Полный разбор открывается кнопкой с ключом под заданием.

ВСОШ-131

ВСОШ: «Флешка возможностей», 9 класс, региональный этап 2023–2024

5 б.

9 класс, региональный этап 2023–2024.

Найдите ключ доступа и сдайте флаг.

Файлы задачи: simplified_wizard_legacy.tar-9.gz.

Флаг сдаётся в поле ниже и засчитывается и в карточке задачи на платформе. Число попыток общее с платформой, как на олимпиаде. Полный разбор открывается кнопкой с ключом под заданием.

ВСОШ-139

ВСОШ: «Флешка возможностей», 10 класс, региональный этап 2023–2024

5 б.

10 класс, региональный этап 2023–2024.

Найдите ключ доступа и сдайте флаг.

Файлы задачи: simplified_wizard_legacy-10.tar.gz.

Флаг сдаётся в поле ниже и засчитывается и в карточке задачи на платформе. Число попыток общее с платформой, как на олимпиаде. Полный разбор открывается кнопкой с ключом под заданием.

ВСОШ-150

ВСОШ: «Флешка возможностей», 11 класс, региональный этап 2023–2024

5 б.

11 класс, региональный этап 2023–2024.

Найдите ключ доступа и сдайте флаг.

Файлы задачи: simplified_wizard_legacy-11.tar.gz.

Флаг сдаётся в поле ниже и засчитывается и в карточке задачи на платформе. Число попыток общее с платформой, как на олимпиаде. Полный разбор открывается кнопкой с ключом под заданием.

Когда начало файла испорчено

Иногда первые байты нарочно затирают нулями. Тогда file пишет data, а binwalk и программы восстановления (foremost, photorec) ничего не находят: они ищут как раз сигнатуру. Выручает взгляд на первые строки:

xxd broken.img | head -1
00000000: 0000 0000 0000 0000 0000 000d 4948 4452  ............IHDR

IHDR на своём месте — значит, это PNG без первых восьми байт. Вписываем их обратно, не трогая остальное:

cp broken.img fixed.png
printf '\x89PNG\r\n\x1a\n' | dd of=fixed.png bs=1 conv=notrunc
file fixed.png

Если после картинки идут посторонние данные, обрежьте файл по маркеру IEND (его смещение покажет grep -boa IEND fixed.png; к нему прибавьте 8 байт самого маркера и контрольной суммы).

file dump.img пишет data, а в xxd dump.img | head -1 видно восемь нулевых байт и затем IHDR. Что это? · 4 б.

Задача ВСОШ: «Порча модуля памяти Коллектора»

Заключительный этап 2024–2025, 10 класс. Робот-уборщик сбросил аварийный дамп памяти, в нём остались данные о местоположении образцов. Рекомендуемые утилиты: foremost, photorec, testdisk, binwalk — но, как сказано выше, при испорченной сигнатуре они молчат.

Файл задачи: collector_memory.img

ВСОШ-284

ВСОШ: «Порча модуля памяти Коллектора», 10 класс

5 б.

Заключительный этап 2024–2025, 10 класс.

Восстановите данные из дампа и сдайте флаг.

Файлы задачи: collector_memory.img.

Флаг сдаётся в поле ниже и засчитывается и в карточке задачи на платформе. Число попыток общее с платформой, как на олимпиаде. Полный разбор открывается кнопкой с ключом под заданием.

Если ничего не нашлось: картинка и звук

Когда метаданные пусты, хвоста нет и binwalk молчит, данные могут быть спрятаны в самом изображении или звуке — это называется стеганография. Два частых случая:

  • младшие биты пикселей: глазом не видно, а утилита zsteg для PNG перебирает типовые схемы и печатает найденный текст (ставится командой sudo gem install zsteg, запускается как zsteg image.png);
  • спектрограмма звука: текст «нарисован» частотами. В Audacity дорожку переключают в режим «Спектрограмма» (меню названия дорожки), и надпись читается глазами.

Порядок осмотра всегда от дешёвого к дорогому: file → exiftool → хвост и binwalk → пиксели и звук.

Задача ВСОШ: «Скрытая мелодия»

Заключительный этап 2024–2025, 11 класс. Инженер «преобразует пароли в звуковые файлы и анализирует спектрограмму». Рекомендуемая утилита: Audacity.

Файл задачи: task.wav

ВСОШ-287

ВСОШ: «Скрытая мелодия», 11 класс

5 б.

Заключительный этап 2024–2025, 11 класс.

Найдите пароль, спрятанный в звуке, и сдайте флаг.

Файлы задачи: task.wav.

Флаг сдаётся в поле ниже и засчитывается и в карточке задачи на платформе. Число попыток общее с платформой, как на олимпиаде. Полный разбор открывается кнопкой с ключом под заданием.

Самостоятельное дело «Ночная смена»

Последнее задание модуля собирает всё вместе. В архиве несколько файлов с неправильными расширениями: среди них запись трафика, картинка с данными в метаданных, архив программы и вложенный документ. Начните с file case/* — дальше станет ясно, за что браться.

Скачать файлы задания: l7_night_shift.zip
C19

C19. Где запись трафика

10 б.

В l7_night_shift.zip найдите файл, который на самом деле является записью сетевого трафика (PCAP). Сдайте его путь внутри архива.

C20

C20. Адрес из картинки ночной смены

10 б.

В том же наборе найдите картинку, прочитайте её метаданные и сдайте спрятанный адрес в виде host:port.