Files
2026-04-22 10:58:32 +03:00

31 lines
1.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<h1 align="center">Summer Vacations</h1>
<p align="center">
<img src="https://img.shields.io/badge/category-Stego-blueviolet" alt="Stego"/>
<img src="https://img.shields.io/badge/points-799-yellow" alt="799 pts"/>
</p>
На входе — картинка `vacation.png`. Если провести классический LSB-скан по красному каналу, тогда быстро находится читаемая строка, похожая на флаг — и это ловушка. Настоящий флаг расположен в младшем бите альфа-канала.
## Решение
Открываем картинку в RGBA (принудительно, чтобы гарантированно получить альфа-канал) и проходим по пикселям в растровом порядке (слева направо, сверху вниз). Для каждого пикселя проверяем условие:
```text
(R * G * B) % 7 == 3
```
Только те, что прошли фильтр, несут бит данных — и из них забираем младший бит альфа-канала:
```python
if (r * g * b) % 7 == 3:
bits.append(a & 1)
```
Накопленные биты группируем по 8 (старший бит первым) и собираем в байты. Нулевой байт — маркер конца данных, аналог `\0`-терминатора в C. Принимаем только печатаемые ASCII (`0x20``0x7E`); всё остальное — либо конец флага, либо мусор.
Готовый солвер — [`solve/solver.py`](solve/solver.py).
## Флаг
`caplag{p4t13nc3_r3v34ls_truth}`