Skip to content

Steganography-Like CLI / Web tool for concealing files within JPG images.

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

Use CLI tools jdvin & jdvout with a JPG image, to hide/extract any file type, up to *2GB.

*Compatible hosting sites, listed below, have their own much smaller embedded data size limits:

  • Flickr (200MB), ImgPile (100MB), ImgBB (32MB), PostImage (32MB), Reddit (20MB / -r option),
  • Mastodon (~6MB), Bluesky (~64KB / -b option), Tumblr (~64KB), Twitter (~10KB).

jdvrif partly derives from the technique demonstrated by security researcher David Buchanan.

Demo Image
Image credit: @unpaidactor1 / PIN: 7505403832509957594

For extra security, your data file is also compressed (zlib) and encrypted using the libsodium crypto library.

You can try the jdvrif Web App, here, if you don't want to download and compile the CLI source code.

Usage (Linux - jdvin / jdvout)

user1@linuxbox:~/Downloads/jdvrif-main/src/jdvin$ sudo apt-get install libsodium-dev
user1@linuxbox:~/Downloads/jdvrif-main/src/jdvin$ g++ main.cpp -O2 -lz -lsodium -s -o jdvin
user1@linuxbox:~/Downloads/jdvrif-main/src/jdvin$ sudo cp jdvin /usr/bin

user1@linuxbox:~/Desktop$ jdvin 

Usage: jdvin [-b|-r] <cover_image> <secret_file>  
       jdvin --info

user1@linuxbox:~/Desktop$ jdvin Cover_Image.jpg Hidden_File.zip
  
Saved "file-embedded" JPG image: jrif_12462.jpg (143029 bytes).

Recovery PIN: [***2166776980318349924***]

Important: Keep your PIN safe, so that you can extract the hidden file.

Complete!

user1@linuxbox:~/Downloads/jdvrif-main/src/jdvout$ g++ main.cpp -O2 -lz -lsodium -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_12462.jpg

PIN: *******************

Extracted hidden file: Hidden_File.zip (6165 bytes).

Complete! Please check your file.

To correctly download images from X/Twitter or Reddit, click the image in the post to fully expand it, before saving.

Twitter_CLI_jpg_txt.mp4

To create "file-embedded" JPG images compatible for posting on Reddit, use the -r option with jdvin.
From the Reddit site, click "Create Post" then select "Images & Video" tab, to post your JPG image.

To create "file-embedded" JPG images compatible for posting on Bluesky, use the -b option with jdvin.

For Bluesky, you are required to use the Python script "bsky_post.py" (found in the repo src folder), to post the image. It will not work if you post images via the Bluesky browser site or mobile app.

Bluesky script example:

$ python3 bsky_post.py --handle exampleuser.bsky.social --password pxae-f17r-alp4-xqka --image jrif_11050.jpg --alt-text "text to describe image, here..." "standard text to appear in main post, here..."

You will need to create an app password from your Bluesky account. (https://bsky.app/settings/app-passwords)

Bluesky_CLI_jpg_txt.mp4
Bluesky_web_app.mp4

To correctly download an image from Flickr, click the download arrow near the bottom right-hand corner of the page and select Original for the size of image to download.

With X/Twitter, Bluesky, & Tumblr, the small size limits are measured by the data file size and not the combined image + data file size. As the data file is compressed, you should be able to get significantly more than the default limit, especially for text documents and other file types that compress well.

Also with Mastodon, the size limit is measured by the data file size and not the combined image + data file size.
For example, if your cover image is 1MB you can still embed a data file up to the ~6MB Mastodon size limit.

jdvrif_web_app.mp4
tumblr_CLI_jpg.mp4
Flickr_CLI_200MB_ZIP.mp4

Third-Party Libraries

This project makes use of the following third-party libraries:

  • libsodium for cryptographic functions.
  • zlib: General-purpose compression library
    • License: zlib/libpng license (see LICENSE file)
    • Copyright (C) 1995-2024 Jean-loup Gailly and Mark Adler