/Разборы задач
7 ноября 2026
Райтап на задачу «Слив флагов»
Исследуем WIM-образ с зашифрованными псевдофлагами и находим настоящий флаг двумя способами: через поиск Base64 и анализ blobs.8
12

Forensic
Задача «CTF-ер, который смог»
Для решения нужны твои руки.
Сразу с козырей: чекнем описание задачки:
— Пейн, я не чувствую центральной директории!
— Буба, у тебя её нет!
Покумекали, поняли — центральная директория у файла отсутствует!
Но полезная нагрузка файла ведь осталась, наверное? Проверим!
Открываем файл Bubba в HEX-редакторе (например, hexed.it).
В самом конце файла находим служебную сигнатуру дескриптора данных (механизм в кодинге, который хватает и контролит любой твой чих), а именно PK\x07\x08 (чтобы найти, введите в поиск 504B0708, это абсолютно то же самое :>). Из неё считываем параметры сжатого потока:
0xad1a85b7.Собственно, сам сжатый поток начинается сразу после стартовых заголовков, со смещения 35. Зная длину, получаем точный интервал байтов: [35:253517].
Так как заголовок zlib отсутствует (zlib — это библиотека на питон. Просто сжимает и распаковывает данные), извлекаем поток в режиме raw DEFLATE (параметр -15 в библиотеке zlib):
raw DEFLATE — сжатый кусок данных без метаданных и обёртки, как шмотка в посылке, которую контузило хуже вьетнамских военных, то есть к чертям забыла, что, кто и зачем оно такое.
Пишем изи-скрипт, который всё сделает за нас:
from pathlib import Path
import zlib
raw = Path("Bubba").read_bytes()
image = zlib.decompress(raw[35:253517], -15)
Path("recovered.jpg").write_bytes(image)Скрипт выдаёт JPEG-файл размером 259 623 байтика. Его контрольная сумма CRC32 идеально совпадает с 0xad1a85b7, что г0в0рит, что всё прошло ид34льн0!!
Открываем recovered.jpg:
Та-да-а! Вот и наш флаг, всё было предельно просто :))
Вписываем флаг и благодарим web-а за райтап!