
jdvrif — Mis à jour !
Outil de stéganographie pour images JPG
jdvrif
jdvrif est un outil de stéganographie en ligne de commande rapide et facile à utiliser pour dissimuler et extraire tout type de fichier via une image JPG.
Il existe également une édition Web, que vous pouvez utiliser immédiatement, comme alternative pratique au téléchargement et à la compilation du code source CLI. Les téléchargements de fichiers Web sont limités à 20 Mo.
Un port expérimental en Rust, jdvrif-rs, est disponible pour ceux qui s'intéressent à ce langage.

Image de démonstration : « Un lieu de dissimulation » / PIN : 2190398302048725932
Contrairement à la méthode de stéganographie LSB courante qui dissimule des données dans les pixels d'une image de couverture, jdvrif cache principalement les données dans les segments d'application d'une image JPG (ICC, EXIF, XMP, etc.).
L'exception à cette règle est le mode de dissimulation pour la plateforme Reddit (-r), où nous utilisons la méthode de stéganographie QIM (modulation d'indice de quantification dans le domaine DCT du JPEG), car c'est la seule méthode de stockage qui fonctionne actuellement pour Reddit.
Vous pouvez dissimuler tout type de fichier jusqu'à 2 Go pour le mode de dissimulation par défaut, bien que les autres modes de dissimulation pour plateformes et les sites compatibles (listés ci-dessous) aient leurs propres limites de taille beaucoup plus petites et *d'autres exigences.
Pour une capacité de stockage accrue et une meilleure sécurité, votre fichier de données intégré est compressé avec libdeflate/zlib — sauf s'il s'agit déjà d'un type de fichier compressé de plus de 10 Mo — et chiffré avec XChaCha20-Poly1305 à l'aide de la bibliothèque cryptographique libsodium.
jdvrif dérive en partie de la technique mise en œuvre par le chercheur en sécurité David Buchanan.
Compilation et utilisation (Linux)
$ sudo apt update
$ sudo apt install g++ cmake ninja-build util-linux libsodium-dev libturbojpeg0-dev zlib1g-dev libdeflate-dev
$ chmod +x compile_jdvrif.sh
$ ./compile_jdvrif.sh
$ sudo cp jdvrif /usr/bin
$ jdvrif
Usage: jdvrif conceal [-b] <cover_image> <secret_file>
jdvrif recover <cover_image>
jdvrif --info
$ jdvrif conceal your_cover_image.jpg your_secret_file.doc
Compatibilité des plateformes pour l'image de sortie :-
✓ X-Twitter
✓ Tumblr
✓ Mastodon
✓ Pixelfed
✓ PostImage
✓ ImgBB
✓ ImgPile
✓ Flickr
Image JPG « fichier intégré » enregistrée : jrif_4e87c566c.jpg (143029 octets).
PIN de récupération : [***2166776980318349924***]
Important : conservez votre PIN en sécurité afin de pouvoir extraire le fichier caché.
Terminé !
$ jdvrif recover jrif_4e87c566c.jpg
PIN : *******************
Fichier caché extrait : your_secret_file.doc (6165 octets).
Terminé ! Veuillez vérifier votre fichier.
Plateformes compatibles
******************
Remarque : Bluesky enregistre désormais les images au format WEBP par défaut.
Pour enregistrer une image au format JPG, afin de pouvoir toujours récupérer les données dissimulées avec jdvrif.
Cliquez d'abord sur l'image dans la publication pour l'ouvrir, puis faites un clic droit sur l'image. Dans le menu, sélectionnez Ouvrir l'image dans un nouvel onglet.
Sélectionnez le nouvel onglet et, dans la barre d'adresse, déplacez-vous à la fin de l'adresse et ajoutez @jpg puis appuyez sur Entrée.
Faites un clic droit sur l'image et, dans le menu, sélectionnez Enregistrer l'image sous...
Votre image devrait maintenant être téléchargée au format JPG, qui fonctionnera désormais avec jdvrif.
Si vous souhaitez un outil pour dissimuler des données à l'aide d'images WEBP à publier sur Bluesky, vous pouvez utiliser mon outil de stéganographie CLI WEBP wbpdv
******************
Limite de taille de publication mesurée par la taille combinée de l'image de couverture + du fichier de données compressé :
● Flickr (200 Mo), ImgPile (100 Mo), ImgBB (32 Mo),
● PostImage (32 Mo), Pixelfed (15 Mo).
Limite de taille mesurée uniquement par la taille du fichier de données compressé :
● Mastodon (~6 Mo), Tumblr (~64 Ko), X-Twitter (~10 Ko).
Par exemple, avec Mastodon, si votre image de couverture fait 1 Mo, vous pouvez toujours intégrer un fichier de données jusqu'à la limite de taille de ~6 Mo.
*Autre : la plateforme Bluesky a des limites de taille séparées pour l'image de couverture et le fichier de données caché compressé :
● Bluesky (option -b). Limite de taille maximale de l'image de couverture (2 000 000 octets / ~1,9 Mo). Limite de taille maximale de votre fichier de données caché compressé (charge utile) (~171 Ko).
L'image de couverture finale intégrée (image de couverture + fichier caché) ne doit pas dépasser 2 000 000 octets (~1,9 Mo). Le script « create_bsky_post.py » est requis pour publier des images sur Bluesky. Plus d'informations sur ce script plus bas dans la page.
● Reddit (option -r). Bien que la plateforme Reddit ait une limite de téléchargement d'images de 20 Mo, la capacité de stockage de données pour l'image de couverture est beaucoup plus petite et dépend de la taille des dimensions de l'image.
Par exemple, une image de couverture avec des dimensions 1024x1024 peut stocker seulement ~6 Ko de données, une image avec des dimensions 4096x4096 peut stocker ~109 Ko et une image avec des dimensions maximales 6324×6324 peut stocker ~254 Ko.
Pour des plateformes telles que X-Twitter, Reddit et Tumblr, qui ont de petites limites de taille de données, vous voudrez peut-être vous concentrer sur des données qui se compressent bien, comme les fichiers texte, etc.
https://github.com/user-attachments/assets/c8c38e6d-ea23-4d67-98d9-cebdcd82b449
https://github.com/user-attachments/assets/88aaa5f7-3272-4d0c-aa59-1a5bfe2f08dc
Arguments de mode de jdvrif :
conceal - Compresse, chiffre et intègre votre fichier de données secret dans une image de couverture JPG.
recover - Déchiffre, décompresse et extrait le fichier de données dissimulé d'une image de couverture JPG.
Options de plateforme du mode conceal de jdvrif :
« -r » Pour créer des images JPG « fichier intégré » compatibles pour publication sur la plateforme Reddit, vous devez utiliser l'option -r avec le mode conceal.
$ jdvrif conceal -r my_image.jpg hidden.doc
Ces images ne sont compatibles que pour publication sur Reddit. Votre fichier de données intégré sera supprimé s'il est publié sur une autre plateforme.
Lors de l'enregistrement/téléchargement d'une image depuis Reddit, assurez-vous de cliquer sur l'image dans la publication pour la développer complètement avant de l'enregistrer.
https://github.com/user-attachments/assets/9f1b4607-e7f1-4c5f-8929-b42c1a85bb88
« -b » Pour créer des images JPG « fichier intégré » compatibles pour publication sur la plateforme Bluesky, vous devez utiliser l'option -b avec le mode conceal.
$ jdvrif conceal -b my_image.jpg hidden.doc
Ces images ne sont compatibles que pour publication sur Bluesky. Votre fichier de données intégré sera supprimé s'il est publié sur une autre plateforme.
Vous devez également utiliser le script Python create_bsky_post.py (situé dans le dossier src/bsky du dépôt) pour publier l'image sur Bluesky. Cela ne fonctionnera pas si vous publiez des images sur Bluesky via le site navigateur ou l'application mobile.
Pour utiliser le script, vous devrez créer un mot de passe d'application à partir de votre compte Bluesky.
Consultez le script create_bsky_post.py dans le dossier src/bsky pour quelques exemples d'utilisation de base.
https://github.com/user-attachments/assets/b4c72ea7-40e3-49b0-89aa-ae2dd8ccccb9
Logiciels et ressources tiers
Applications principales
-
libsodium — génération aléatoire cryptographique, dérivation de clé Argon2id et flux secrets XChaCha20-Poly1305. Lié dynamiquement comme bibliothèque système.
Licence : Licence ISC
Copyright (c) 2013–2026 Frank Denis.
-
libjpeg-turbo — traitement JPEG et transformation sans perte. Lié dynamiquement comme bibliothèque système.
Ce logiciel est basé en partie sur le travail du Independent JPEG Group.
Licences : Licence Independent JPEG Group, Licence BSD 3-Clause modifiée, et Licence zlib.
Copyright © 1991–2020 Thomas G. Lane et Guido Vollbeding.
Copyright © 2009–2023 D. R. Commander. Tous droits réservés.
Copyright © 2015 Viktor Szathmáry. Tous droits réservés.
-
zlib — compression et décompression zlib en flux. Lié dynamiquement comme bibliothèque système.
Licence : Licence zlib
Copyright (C) 1995–2026 Jean-loup Gailly et Mark Adler.
-
libdeflate — compression rapide au format zlib sur tampon entier. Lié dynamiquement comme bibliothèque système.
Licence : MIT
Copyright 2016 Eric Biggers.
Copyright 2024 Google LLC.
Code et ressources incorporés
-
base64simd — L'encodeur Base64 AVX2 est adapté de l'implémentation vectorielle Base64 de Wojciech Muła.
Licence : BSD 2-Clause
Copyright (c) 2015–2018, Wojciech Muła. Tous droits réservés.
-
Profils ICC compacts — profil ICC compatible Adobe intégré.
Licence : CC0 1.0 Universelle
Aide facultative pour la publication sur Bluesky
-
Bryan Newbold / ATProto Hacker Cookbook — create_bsky_post.py — Base pour l'aide à la publication Bluesky (src/bsky/bsky_post.py) forkée. Pour référence, voir la copie du Cookbook
Licence : CC0 1.0 Universelle.
-
Requests — requêtes HTTP et API Bluesky.
Licence : Apache 2.0 / NOTICE
Copyright 2019 Kenneth Reitz.
-
Beautiful Soup 4 — analyse des métadonnées HTML et Open Graph.
Licence : MIT
Copyright (c) Leonard Richardson.
-
Pillow — validation d'images, dimensions et gestion du ratio d'aspect.
Licence : MIT-CMU
Copyright PIL © 1997–2011 Secret Labs AB et © 1995–2011 Fredrik Lundh et contributeurs.
Copyright Pillow © 2010 Jeffrey « Alex » Clark et contributeurs.