CLI tools to hide (jdvin) or extract (jdvout) any file type via a JPG image.
You can post your image with hidden data on Mastodon and a few other social media sites.
With jdvin, you can embed a single file of any type up to a maximum size of ~1GB.
Compatible hosting sites, listed below, have their own, much smaller, size limits (cover image + data file):
- Flickr (200MB), ImgPile (100MB), ImgBB (32MB), PostImage (24MB), Reddit (20MB / -r option),
- Limit measured by data file size: Mastodon (~6MB), Tumblr (~62KB), Twitter (~10KB).
jdvrif partly derives from the technique discovered by security researcher David Buchanan.
Image credit: @z3pio_
Demo Videos: Mastodon / X/Twitter / Reddit / Tumblr / Flickr / Web Tool
To post/share file-embedded JPG images on Reddit, you must use the -r option with jdvin.
Select the "Images & Video" tab on Reddit to post these images.
To correctly download an image from X/Twitter or Reddit, click the image in the post to fully expand it, before saving.
With Twitter, the size limit (~10KB) is measured by the data file size and not the combined image size.
As the data file is compressed when embedded, you should be able to hide files larger than 10KB.
For example, a 30KB workflow.json file compressed down to under 10KB.
Also with Mastodon, the size limit (~6MB) is measured by the data file size and not the combined image size.
For example, if your cover image is 2MB you can still embeded a data file upto ~6MB.
(You can try jdvrif from this site if you don't want to download & compile the source code.)
user1@linuxbox:~/Downloads/jdvrif-main/src/jdvin$ g++ main.cpp -O2 -lz -s -o jdvin
user1@linuxbox:~/Downloads/jdvrif-main/src/jdvin$ sudo cp jdvin /usr/bin
user1@linuxbox:~/Desktop$ jdvin
Usage: jdvin [-r] <cover_image> <data_file>
jdvin --info
user1@linuxbox:~/Desktop$ jdvin clown.jpg workflow.rar
Saved file-embedded JPG image: jrif_28597.jpg 176345 Bytes.
Complete!
user1@linuxbox:~/Downloads/jdvrif-main/src/jdvout$ g++ main.cpp -O2 -lz -s -o jdvout
user1@linuxbox:~/Downloads/jdvrif-main/src/jdvout$ sudo cp jdvout /usr/bin
user1@linuxbox:~/Desktop$ jdvout
Usage: jdvout <file_embedded_image>
jdvout --info
user1@linuxbox:~/Desktop$ jdvout jrif_28597.jpg
Extracted hidden file: workflow.rar 4225 Bytes.
Complete! Please check your file.
Issues:
- ImgPile - You must sign in to an account before sharing your data-embedded JPG image on ImgPile.
Sharing your image without logging in, your embedded data will not be preserved.
My other programs you may find useful:-
- pdvzip: CLI tool to embed a ZIP file within a tweetable and "executable" PNG-ZIP polyglot image.
- imgprmt: CLI tool to embed an image prompt (e.g. "Midjourney") within a tweetable JPG-HTML polyglot image.
- pdvrdt: CLI tool to encrypt, compress & embed any file type within a PNG image.
- jzp: CLI tool to embed small files (e.g. "workflow.json") within a tweetable JPG-ZIP polyglot image.
- pdvps: PowerShell / C++ CLI tool to encrypt & embed any file type within a tweetable and "executable" PNG image