Райтап на задачу «Современный формат»

lol

Автор:

lol

6 ноября 2026

5

06.11.2026
Современный формат
Категория:

Misc

Задача «Современный формат»

LastTeamLead

Автор:

LastTeamLead

Первая кровь:
Term1nal
Сложность:
hard
Дата публикации:
25.10.2025
Решений:
38
Рейтинг:
4.6/5
Ссылка:
Решать

Итак, предлагаю зайти на сам сайт и посмотреть, что там вообще находится:

Решение задачи «Современный формат»: иллюстрация 1

Вообще суперская статейка про Мегумина, но меня смущает это пустое поле. Тем более в описании задания было сказано, что AVIF не кроссбраузерный. Смотрим на этот моментик через код страницы (Ctrl+U):

Решение задачи «Современный формат»: иллюстрация 2

Прекрасно, ещё и написано flag, значит, мы на правильном пути. Перейдём-ка на этот авиф:

Решение задачи «Современный формат»: иллюстрация 3

Ага, негусто… Ну, значит, придётся решать таск. Первым делом предлагаю скачать этот AVIF и удостовериться, что это точно он и нас не обманывают:

Решение задачи «Современный формат»: иллюстрация 4

Опа! Прошу обратить внимание на вывод команды file. AVIF Image Sequence — это не просто статичная картинка, а целая последовательность кадров (фреймов). По сути, это аналог гифки, только оно упаковано всё под AVIF. Ну что же, давайте дальше копать в эту сторону. Предлагаю посмотреть ffprobe (утилита, входящая в ffmpeg, которая только собирает метаданные):

Решение задачи «Современный формат»: иллюстрация 5

Тут важно обратить внимание всего на несколько моментов:

  1. AVIS — это прямое подтверждение нашей догадки: это не просто статичная AVIF-картинка, а целая последовательность кадров.

  2. STREAM 0:0 — та самая статичная картинка, то есть первый кадр;

  3. STREAM 0:1 — то, что нам нужно, это дорожка анимации, и в ней ровно два кадра;

  4. Наш ffprobe ругается на то, что одна служебная табличка ему говорит, что кадров 2, а другая говорит, что кадр всего 1. Именно по этой причине браузер и ffmpeg показывают только 1-й кадр.

Ну и когда мы поняли, что наш заветный флажок лежит на втором кадре, нам остаётся лишь заставить ffmpeg прочитать второй кадр. Лишь… Мы плавно перешли к моменту осознания, почему это hard task, теперь нужно будет разобраться в этом прекрасном формате поподробнее, я постараюсь сделать это максимально кратко и понятно для всех:

Решение задачи «Современный формат»: иллюстрация 6

Вот после того, как мы вычитаем тонну информации про то, какие разновидности боксов бывают, мы придём к тому, что мы имеем дело с avis — то есть анимацией. Тут на помощь приходит такой замечательный бокс, как Sample Size Box — stsz, он выполняет весьма важную роль, сообщая плееру, ну или же декодеру, точный размер каждого кадра (сэмпла) в БАЙТАХ. Теперь давайте поищем его в нашем файле с помощью команды grep:

Решение задачи «Современный формат»: иллюстрация 7

Мы получили 925 в десятичной → переводим в hex (шестнадцатеричную систему исчисления) и получаем 0x39d. НО мы вспоминаем, что не зря прочитали уйму информации про эти боксы, и осознаём, что stsz — это поле типа бокса. А сам наш бокс начинается на 4 байта раньше, то есть 0x39d − 4 = 0x399. Теперь мы точно знаем, где начинается наш stsz box. Проверим это:

Решение задачи «Современный формат»: иллюстрация 8

Вывод xxd в очередной раз доказывает нашу правоту. Для примера ниже будет структура stsz-бокса:

Решение задачи «Современный формат»: иллюстрация 9

Теперь сравниваем его с нашим дампом и смотрим сюда:

Решение задачи «Современный формат»: иллюстрация 10

Это sample_count, и он состоит из 4 байт, но по какой-то причине там сейчас один кадр (т. к. в конце 01). НО мы знаем, что на самом деле там физически лежат два размера. Поэтому нам нужно пропатчить этот моментик и изменить младший бит на +1 для того, чтобы посмотреть на наш второй кадр:

printf '\x02' | dd of=patched.avif bs=1 seek=$((0x3ac)) conv=notrunc status=none
xdg-open frame_002.png
Решение задачи «Современный формат»: иллюстрация 11

Теперь смотрим на наш шедевр:

Решение задачи «Современный формат»: иллюстрация 12

Вуаля, всего лишь часик-другой вашего времени на изучение боксов AVIF, и мы забираем наш заветный флажок!

Если вы нашли опечатку или ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter

Также по теме:

Райтап на задачу «Морзянка на Arduino»

/Разборы задач

Райтап на задачу «Морзянка на Arduino»

Считываем мигание светодиода на видео и автоматизируем расшифровку азбуки Морзе.
Прочитать

4

Райтап на задачу «Побег с помощью Brainfuck»

/Разборы задач

Райтап на задачу «Побег с помощью Brainfuck»

Разбираем интерпретатор Brainfuck, обходим ограничение ввода и читаем флаг с помощью исполнения Python-кода.
Прочитать

4