Зачарованный лес: LSB → base64 → сказка

стеганография · задача 10   pnglsbzstegbase64

Уровень easy, описание: «Любителям сказок посвящается».

Платформа
CTF
Носитель
PNG
Приём
LSB в каналах R, G, B, внутри base64
Инструменты
zsteg, Stegsolve, base64
Статус
решено

Зацепка в первой строке zsteg

zsteg enchanted_forest.png
b1,rgb,lsb,xy       .. text: "ICAgICAgICAgICAgICAgICAgICAg…"

Это не мусор. ICAg — это base64 от трёх пробелов (20 20 20). Строку стоит запомнить, она встречается постоянно:

echo ICAgICAg | base64 -d | xxd
00000000: 2020 2020 2020                           

Как это выглядит в битовой плоскости

Чтобы показать наглядно, я повторил приём на своей картинке: спрятал в младшие биты base64 от 15 000 пробелов и короткой сказки. Сама картинка не изменилась, а плоскость младшего бита красного канала (Red plane 0 в Stegsolve) выдаёт всё сразу:

Картинка с данными в младших битах
Картинка уже с данными: глазом разницы нет
Red plane 0 картинки с даннымис данными
Red plane 0 чистой картинкичистая
Red plane 0: сверху ровная штриховка (повторяющееся ICAg), граница — конец сообщения, ниже обычный шум фото

Две приметы данных: регулярный узор, который не повторяет контуры объектов, и ровная горизонтальная граница там, где сообщение кончилось. У «природной» структуры картинки узор, наоборот, повторяет силуэты.

Извлечение

Превью zsteg показывает только начало потока. Достаём его целиком:

zsteg -E b1,rgb,lsb,xy enchanted_forest.png > lsb.bin
base64 -di lsb.bin 2>/dev/null > out.txt     # -i: пропускать мусор в конце
tr -s ' ' < out.txt                          # сжать тысячи пробелов в один

То же без терминала: Stegsolve → Analyse → Data Extract, галочки Red 0, Green 0, Blue 0, порядок Row, MSB First, RGB → Save Bin, затем CyberChef → From Base64.

Попробуй сам: forest_stego.png, внутри мой демо-флаг.

показать флаг (спойлер)h34rt_0f_th3_f0r3st

Что вынести

  • ICAg… в выводе означает base64 от пробелов, а длинные пробелы часто бывают отступами ASCII-арта или просто «набивкой».
  • Данные полосой поперёк кадра с ровной границей — почти всегда LSB-встраивание.
  • Как устроен такой встраиватель изнутри, разобрано в лаборатории LSB.