Урок 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 считает с единицы
Если после вырезанного файла идут лишние байты, картинка обычно всё равно откроется: просмотрщик останавливается на маркере конца.
C16. Где начинается картинка
Найдите, с какого смещения внутри l6_fragment.raw начинается PNG. Сдайте смещение обычным (десятичным) числом.
C17. Метка на вырезанной картинке
Вырежьте PNG из l6_fragment.raw и сдайте значение поля Case-ID в его метаданных.
Задача ВСОШ: «Подарок»
Муниципальный этап 2025–2026, 9 класс. «Дед Мороз уже положил под ёлочку подарок, но в коробке, кажется, что-то виднеется… сам подарок за чем-то спрятан». Рекомендуемые утилиты: binwalk, tail.
Файл задачи: podarok.bin
ВСОШ: «Подарок», 9 класс
Муниципальный этап 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
ВСОШ: «Флешка возможностей», 9 класс, региональный этап 2022–2023
9 класс, региональный этап 2022–2023.
Найдите ключ доступа и сдайте флаг.
Файлы задачи: simplified_wizard_legacy.tar-9.gz.
Флаг сдаётся в поле ниже и засчитывается и в карточке задачи на платформе. Число попыток общее с платформой, как на олимпиаде. Полный разбор открывается кнопкой с ключом под заданием.
ВСОШ: «Флешка возможностей», 9 класс, региональный этап 2023–2024
9 класс, региональный этап 2023–2024.
Найдите ключ доступа и сдайте флаг.
Файлы задачи: simplified_wizard_legacy.tar-9.gz.
Флаг сдаётся в поле ниже и засчитывается и в карточке задачи на платформе. Число попыток общее с платформой, как на олимпиаде. Полный разбор открывается кнопкой с ключом под заданием.
ВСОШ: «Флешка возможностей», 10 класс, региональный этап 2023–2024
10 класс, региональный этап 2023–2024.
Найдите ключ доступа и сдайте флаг.
Файлы задачи: simplified_wizard_legacy-10.tar.gz.
Флаг сдаётся в поле ниже и засчитывается и в карточке задачи на платформе. Число попыток общее с платформой, как на олимпиаде. Полный разбор открывается кнопкой с ключом под заданием.
ВСОШ: «Флешка возможностей», 11 класс, региональный этап 2023–2024
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 байт самого маркера и контрольной суммы).
Задача ВСОШ: «Порча модуля памяти Коллектора»
Заключительный этап 2024–2025, 10 класс. Робот-уборщик сбросил аварийный дамп памяти, в нём остались данные о местоположении образцов. Рекомендуемые утилиты: foremost, photorec, testdisk, binwalk — но, как сказано выше, при испорченной сигнатуре они молчат.
Файл задачи: collector_memory.img
ВСОШ: «Порча модуля памяти Коллектора», 10 класс
Заключительный этап 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
ВСОШ: «Скрытая мелодия», 11 класс
Заключительный этап 2024–2025, 11 класс.
Найдите пароль, спрятанный в звуке, и сдайте флаг.
Файлы задачи: task.wav.
Флаг сдаётся в поле ниже и засчитывается и в карточке задачи на платформе. Число попыток общее с платформой, как на олимпиаде. Полный разбор открывается кнопкой с ключом под заданием.
Самостоятельное дело «Ночная смена»
Последнее задание модуля собирает всё вместе. В архиве несколько файлов с неправильными расширениями: среди них запись трафика, картинка с данными в метаданных, архив программы и вложенный документ. Начните с file case/* — дальше станет ясно, за что браться.
C19. Где запись трафика
В l7_night_shift.zip найдите файл, который на самом деле является записью сетевого трафика (PCAP). Сдайте его путь внутри архива.
C20. Адрес из картинки ночной смены
В том же наборе найдите картинку, прочитайте её метаданные и сдайте спрятанный адрес в виде host:port.