
🔍 Outil Go pour la stéganographie LSB, capable de cacher n'importe quel fichier dans une image.
stegify est un outil en ligne de commande simple capable de cacher de manière totalement transparente n'importe quel fichier dans une image ou un ensemble d'images.
Cette technique est connue sous le nom de stéganographie LSB (Least Significant Bit).
| Porteur | Données | Résultat |
|---|---|---|
![]() | ![]() | ![]() |
Le fichier Result contient le fichier Data caché dedans. Et comme vous pouvez le voir, c'est totalement transparent.
Si plusieurs fichiers Porteur sont fournis, le fichier Data sera divisé en morceaux et chaque morceau est encodé dans le porteur respectif.
| Porteur1 | Porteur2 | Données | Résultat1 | Résultat2 |
|---|---|---|---|---|
![]() |
Le fichier Result1 contient une moitié du fichier Data cachée dedans et Result2 l'autre. Comme toujours, totalement transparent.
go install github.com/DimitarPetrov/stegify@latest
brew tap DimitarPetrov/stegify
brew install stegify
Ou vous pouvez télécharger un binaire pour votre système ici.
stegify encode --carrier <file-name> --data <file-name> --result <file-name>
stegify decode --carrier <file-name> --result <file-name>
Lors de l'encodage, le fichier dont le nom est donné par le drapeau --data est caché à l'intérieur du fichier dont le nom est donné par le drapeau --carrier et le fichier résultant est enregistré dans un nouveau fichier dans le répertoire de travail actuel sous le nom donné par le drapeau --result.
NOTE: Le fichier résultant n'aura aucune extension de fichier et doit donc être spécifié explicitement dans le drapeau
--result.
Lors du décodage, étant donné un nom de fichier d'un fichier porteur contenant des données précédemment encodées, les données sont extraites et enregistrées dans un nouveau fichier dans le répertoire de travail actuel sous le nom donné par le drapeau --result.
NOTE: Le fichier résultant n'aura aucune extension de fichier et doit donc être spécifié explicitement dans le drapeau
--result.
Dans les deux cas, le drapeau --result peut être omis et des valeurs par défaut seront utilisées.
stegify encode --carriers "<file-names...>" --data <file-name> --results "<file-names...>"
OU
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>
OU
stegify decode --carrier <file-name> --carrier <file-name> ... --result <file-name>
Lors de l'encodage d'un fichier de données dans plus d'un porteur, le fichier de données est divisé en N morceaux, où N est le nombre de porteurs fournis. Chaque morceau est ensuite encodé dans le porteur respectif.
NOTE: Lors du décodage, les porteurs doivent être fournis dans le même ordre exact pour que le résultat soit correctement extrait.
Ce type d'encodage offre une couche de sécurité supplémentaire et plus de flexibilité concernant les limitations de taille.
Dans les deux cas, le drapeau --result/--results peut être omis et des valeurs par défaut seront utilisées.
NOTE: Lors de l'encodage, le nombre de fichiers résultats (s'ils sont fournis) doit être égal au nombre de fichiers porteurs. Lors du décodage, exactement un résultat est attendu.
Lorsque plusieurs porteurs sont fournis avec des types de drapeaux mélangés, les noms fournis via le drapeau carrier sont pris en premier et ceux via carriers/c en second. Il en va de même pour le drapeau result/results.
stegify peut également être utilisé de manière programmatique et fournit des fonctions faciles à utiliser fonctionnant avec des noms de fichiers ou des lecteurs et rédacteurs bruts. Vous pouvez visiter godoc sous le package steg pour plus de détails.
Si le fichier porteur est au format jpeg ou jpg, après l'encodage, l'image du fichier résultat sera encodée en png (elle peut donc être plus volumineuse) malgré l'extension de fichier spécifiée dans le drapeau de résultat.
stegify a été utilisé pour l'un des défis Capture The Flag de Codefest’19.
Les participants ont reçu une photo d'un groupe de chats « innocents ». Rien de suspect, n'est-ce pas ? Réfléchissez-y !
![]() |
![]() |
![]() |
![]() |