Files
Tajna-tretej-stolicy/stego-summer-vacations/WRITEUP.md
2026-04-22 10:58:32 +03:00

1.7 KiB
Raw Blame History

Summer Vacations

Stego 799 pts

На входе — картинка vacation.png. Если провести классический LSB-скан по красному каналу, тогда быстро находится читаемая строка, похожая на флаг — и это ловушка. Настоящий флаг расположен в младшем бите альфа-канала.

Решение

Открываем картинку в RGBA (принудительно, чтобы гарантированно получить альфа-канал) и проходим по пикселям в растровом порядке (слева направо, сверху вниз). Для каждого пикселя проверяем условие:

(R * G * B) % 7 == 3

Только те, что прошли фильтр, несут бит данных — и из них забираем младший бит альфа-канала:

if (r * g * b) % 7 == 3:
    bits.append(a & 1)

Накопленные биты группируем по 8 (старший бит первым) и собираем в байты. Нулевой байт — маркер конца данных, аналог \0-терминатора в C. Принимаем только печатаемые ASCII (0x200x7E); всё остальное — либо конец флага, либо мусор.

Готовый солвер — solve/solver.py.

Флаг

caplag{p4t13nc3_r3v34ls_truth}