
🔍 Go-Tool für LSB-Steganographie, das jede Datei in einem Bild verstecken kann.
stegify ist ein einfaches Kommandozeilen-Tool, das in der Lage ist, jede Datei vollständig transparent in einem Bild oder einer Gruppe von Bildern zu verstecken. Diese Technik ist als LSB (Least Significant Bit) Steganografie bekannt.
| Träger | Daten | Ergebnis |
|---|---|---|
![]() | ![]() | ![]() |
Die Ergebnis-Datei enthält die Daten-Datei versteckt in ihr. Und wie Sie sehen können, ist sie vollständig transparent.
Wenn mehrere Träger-Dateien bereitgestellt werden, wird die Daten-Datei in Stücke aufgeteilt und jedes Stück in den entsprechenden Träger kodiert.
| Träger1 | Träger2 | Daten | Ergebnis1 | Ergebnis2 |
|---|---|---|---|---|
![]() |
Die Ergebnis1-Datei enthält eine Hälfte der Daten-Datei versteckt in ihr und Ergebnis2 die andere. Wie immer vollständig transparent.
go install github.com/DimitarPetrov/stegify@latest
brew tap DimitarPetrov/stegify
brew install stegify
Oder Sie können ein Binärprogramm für Ihr System hier herunterladen.
stegify encode --carrier <dateiname> --data <dateiname> --result <dateiname>
stegify decode --carrier <dateiname> --result <dateiname>
Beim Kodieren wird die Datei mit dem Namen, der dem Flag --data gegeben wurde, in der Datei versteckt, deren Name dem Flag --carrier gegeben wurde, und die resultierende Datei wird im aktuellen Arbeitsverzeichnis unter dem Namen gespeichert, der dem Flag --result gegeben wurde.
HINWEIS: Die Ergebnisdatei wird keine Dateierweiterung haben und daher sollte sie explizit im
--result-Flag angegeben werden.
Beim Dekodieren wird bei Angabe einer Trägerdatei mit zuvor kodierten Daten das Daten extrahiert und im aktuellen Arbeitsverzeichnis unter dem Namen gespeichert, der dem Flag --result gegeben wurde.
HINWEIS: Die Ergebnisdatei wird keine Dateierweiterung haben und daher sollte sie explizit im
--result-Flag angegeben werden.
In beiden Fällen kann das Flag --result weggelassen werden und es werden Standardwerte verwendet.
stegify encode --carriers "<dateinamen...>" --data <dateiname> --results "<dateinamen...>"
ODER
stegify encode --carrier <dateiname> --carrier <dateiname> ... --data <dateiname> --result <dateiname> --result <dateiname> ...
stegify decode --carriers "<dateinamen...>" --result <dateiname>
ODER
stegify decode --carrier <dateiname> --carrier <dateiname> ... --result <dateiname>
Beim Kodieren einer Datendatei in mehr als einen Träger wird die Datendatei in N Teile aufgeteilt, wobei N die Anzahl der bereitgestellten Träger ist. Jedes der Teile wird dann in den entsprechenden Träger kodiert.
HINWEIS: Beim Dekodieren sollten die Träger in der exakt gleichen Reihenfolge bereitgestellt werden, damit das Ergebnis korrekt extrahiert werden kann.
Diese Art der Kodierung bietet eine weitere Sicherheitsebene und mehr Flexibilität hinsichtlich der Größenbeschränkungen.
In beiden Fällen kann das Flag --result/--results weggelassen werden und es werden Standardwerte verwendet.
HINWEIS: Beim Kodieren sollte die Anzahl der Ergebnisdateien (falls angegeben) gleich der Anzahl der Trägerdateien sein. Beim Dekodieren wird genau ein Ergebnis erwartet.
Wenn mehrere Träger mit gemischten Arten von Flags bereitgestellt werden, werden die Namen, die über das carrier-Flag übergeben werden, zuerst genommen und die über carriers/c-Flags als zweites. Gleiches gilt für das result/results-Flag.
stegify kann auch programmgesteuert verwendet werden und bietet einfach zu verwendende Funktionen, die mit Dateinamen oder rohen Readern und Writern arbeiten. Sie können godoc unter dem steg-Paket für Details besuchen.
Wenn die Trägerdatei im JPEG- oder JPG-Format vorliegt, wird das resultierende Dateibild nach der Kodierung PNG-kodiert (daher kann es größer sein), trotz der im Ergebnis-Flag angegebenen Dateierweiterung.
stegify wurde für eine der Capture The Flag-Herausforderungen auf Codefest’19 verwendet.
Die Teilnehmer erhielten ein Foto von einer Gruppe „harmloser“ Katzen. Nichts Verdächtiges, oder? Denken Sie nochmal nach!
![]() |
![]() |
![]() |
![]() |