
🔍 Go-инструмент для LSB-стеганографии, способный скрыть любой файл внутри изображения.
stegify — это простая утилита командной строки, способная полностью прозрачно скрывать любой файл внутри изображения или набора изображений. Этот метод известен как LSB (наименьший значащий бит) стеганография.
| Носитель | Данные | Результат |
|---|---|---|
![]() | ![]() | ![]() |
Файл Result содержит скрытый внутри файл Data. И, как видите, это полностью прозрачно.
Если указано несколько файлов-носителей (Carrier), файл данных (Data) будет разделён на части, и каждая часть будет закодирована в соответствующем носителе.
| Носитель1 | Носитель2 | Данные | Результат1 | Результат2 |
|---|---|---|---|---|
![]() |
Файл Result1 содержит одну половину скрытого файла Data, а Result2 — другую. Как всегда, полностью прозрачно.
go install github.com/DimitarPetrov/stegify@latest
brew tap DimitarPetrov/stegify
brew install stegify
Или вы можете скачать бинарный файл для вашей системы здесь.
stegify encode --carrier <file-name> --data <file-name> --result <file-name>
stegify decode --carrier <file-name> --result <file-name>
При кодировании файл с именем, указанным в флаге --data, скрывается внутри файла с именем, указанным в флаге --carrier, и результирующий файл сохраняется в текущем рабочем каталоге под именем, указанным в флаге --result.
ПРИМЕЧАНИЕ: Результирующий файл не будет иметь расширения, поэтому его необходимо явно указать в флаге
--result.
При декодировании, имея имя файла-носителя с ранее скрытыми данными, данные извлекаются и сохраняются в новом файле в текущем рабочем каталоге под именем, указанным в флаге --result.
ПРИМЕЧАНИЕ: Результирующий файл не будет иметь расширения, поэтому его необходимо явно указать в флаге
--result.
В обоих случаях флаг --result можно опустить — будут использованы значения по умолчанию.
stegify encode --carriers "<file-names...>" --data <file-name> --results "<file-names...>"
OR
stegify encode --carrier <file-name> --carrier <file-name> ... --data <file-name> --result <file-name> --result <file-name> ...
stegify decode --carriers "<file-names...>" --result <file-name>
OR
stegify decode --carrier <file-name> --carrier <file-name> ... --result <file-name>
При кодировании файла данных в несколько носителей файл данных делится на N частей, где N — количество указанных носителей. Каждая часть затем кодируется в соответствующем носителе.
ПРИМЕЧАНИЕ: При декодировании носители должны быть указаны в точно том же порядке, чтобы результат был извлечён правильно.
Такой способ кодирования обеспечивает дополнительный уровень безопасности и большую гибкость в отношении ограничений по размеру.
В обоих случаях флаги --result/--results можно опустить — будут использованы значения по умолчанию.
ПРИМЕЧАНИЕ: При кодировании количество результирующих файлов (если указаны) должно быть равно количеству файлов-носителей. При декодировании ожидается ровно один результат.
Если указано несколько носителей с помощью различных флагов, сначала берутся имена, переданные через флаг carrier, а затем — через флаги carriers/c. То же самое относится к флагу result/results.
stegify также можно использовать программно; он предоставляет простые в использовании функции, работающие с именами файлов или с сырыми Reader и Writer. Подробности можно найти в godoc в пакете steg.
Если файл-носитель имеет формат jpeg или jpg, после кодирования результирующий файл изображения будет закодирован в формате png (поэтому его размер может быть больше), несмотря на расширение файла, указанное в флаге результата.
stegify использовался в одном из заданий Capture The Flag на Codefest’19.
Участникам показали фото "невинных" котиков. Ничего подозрительного, верно? Подумайте ещё раз!
![]() |
![]() |
![]() |
![]() |