Skip to content

Hide data within JPG images using this steganography-like privacy tool. Post images on Mastodon and other hosting sites.

License

Notifications You must be signed in to change notification settings

CleasbyCode/jdvrif

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 

Repository files navigation

jdvrif

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.

Demo Image
Image credit: @altphotos_pl

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.)

Usage (Linux - jdvin / jdvout)

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.

Demo Image2 Demo Image3

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:-