/Разборы задач
27 октября 2026
Райтап на задачу «496 отличий»
Разбор задачи «496 отличий»: двоичная подсказка в изображении, поиск иконки и извлечение скрытых данных.5
10

Stegano
Задача «Шахматы с Момо»
Я хотел спрятать флаг на самом видном месте, а спрятал на невидимом
Начнём решение с визуального осмотра, главное — не переусердствуйте ;). Ничего необычного, впрочем, глазами не видим. Отправим картинку в https://aperi.bug-makers.ru/ и тут уже интереснее:
Альфа-канал выглядит не совсем обычно, а конкретно — как шахматная доска:
Объясняет название. Но что нам даёт такой паттерн? Это не похоже на сами данные (хотя и можно предположить, что в каких-то местах альфы он ломается и прячет в себе нагрузку). Тут сделаем небольшое отступление. Что вообще представляет собой альфа-канал? По сути, это слой изображения, отвечающий за его прозрачность. Если у нас RGBA-изображение и при этом его пиксели полностью непрозрачны, то значение альфы для каждого пикселя равно 255. Задача, очевидно, завязана на альфа-канале, поэтому изучим его внимательнее, начнём с общей статистики, для чего воспользуемся набором утилит ImageMagick:
identify -verbose LovelyMomo.pngЗдесь уже видим за счёт чего альфа получает такой паттерн — значения примерно половины пикселей выставлены в 254. Но это всё ещё не данные. А что, если это указатели? Если альфа выступает в задаче в роли указателя на конкретные пиксели, проверим самые незаметные данные этих пикселей — младшие биты RGB. Допустим, А=254 — извлекаем значение из LSB RGB, А=255 — пропускаем. Тут уже не обойтись без питона, накидаем небольшой скрипт, который будет идти по изображению слева направо, сверху вниз, извлекать из пикселей, где значение альфы = 254, LSB и сшивать их:
Запустим скрипт и в самом начале потока получим:
Сдаём флаг. И грустим по кроссоверу, которого мы так и не дождались :(