Райтап на задачу «Мозаика внутри PNG»

8 ноября 2026
Мозаика внутри PNG
Категория:

Stegano

Задача «Мозаика внутри PNG»

AlexB

Автор:

AlexB

Первая кровь:
broken_reality
Сложность:
Medium
Дата публикации:
04.10.2025
Решений:
113
Рейтинг:
4.5/5
Ссылка:
Решать

Отличный таск, так ещё и стега) Нам дана картинка, сразу же проверяем её формат:

Определение формата файла утилитой file

Ага, это PNG. А после того, как мы видим PNG в стеге, сразу чешутся ручки посмотреть вывод утилиты pngcheck:

Вывод pngcheck с ошибкой в имени чанка pT69

Или через https://aperi.bug-makers.ru/:

Проверка PNG в AperiSolve

В любом случае мы натыкаемся на ошибку, которая говорит нам о том, что тут есть чанк с невалидным именем «pT69». Теперь, вспоминая слова автора, что флаг где-то внутри файла, мы открываем его через xxd и смотрим начало:

Начало PNG в выводе xxd

Видим «flag into bugctf» и т. д. Теперь мы поняли, куда копать, можно и посмотреть вывод strings:

Вывод strings для файла PNG

Вот и наш bugctf{}. Теперь слегка расширим границы наших поисков и посмотрим через od:

Просмотр фрагментов флага с помощью od

Видим первую часть нашего флага, понимаем, что придётся парсить чанки вручную, т. к. строгие валидаторы по типу pngcheck не пропускают невалидные чанки. Поэтому пишем небольшой парсер прямиком в терминале:

import struct

d = open("dabro_bro(1).png", "rb").read()
i = 8
c = []
while i < len(d):
    l = struct.unpack(">I", d[i:i + 4])[0]
    t = d[i + 4:i + 8]
    c.append((t, d[i + 8:i + 8 + l]))
    i += 12 + l
    if t == b"IEND":
        break

print(b"".join(
    x[1] for x in sorted(
        (x for x in c if x[0][:2] == b"pT"), key=lambda x: x[0]
    )
).decode("utf-8", "replace"))
Склеенные фрагменты PNG и части флага

Теперь читаем увлекательную статью из Википедии и собираем по частям флажок)

Вариант номер 2 (для ленивых):

Т. к. вся суть задания в том, чтобы прочитать чанки, то мы можем воспользоваться утилитой zsteg. Тут тоже есть разнообразие: мы можем это делать либо в терминале, либо зайти на любимый https://aperi.bug-makers.ru/ и посмотреть вывод этой утилиты там.

Извлечение содержимого pT-чанков утилитой zsteg

Это уже более извращённый способ, но, возможно, есть любители ломать.

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

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

Райтап на задачу «Мозаика внутри PNG»

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

Райтап на задачу «Мозаика внутри PNG»

Исследуем некорректные чанки PNG, находим спрятанные части флага и собираем их в правильном формате.
Прочитать

42

Райтап на задачу «Мозаика внутри PNG»

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

Райтап на задачу «Мозаика внутри PNG»

Разбираем нестандартные чанки PNG, извлекаем фрагменты скрытого текста и собираем флаг коротким Python-скриптом.
Прочитать

43