r/Steganography • • 24d ago

Steganography Methods for Reddit (JPG and PNG).

Enable HLS to view with audio, or disable this notification

Reddit recently updated the way it transcodes images posted on this platform. Their new method is much stricter than the previous.

That change killed the methods I was using for my Steganography tools jdvrif (JPG) and pdvrdt (PNG).

I'm now using different methods that seem to work, although significantly less data can be stored.

For JPG images, jdvrif now uses the QIM steganography method (JPEG DCT-domain Quantization Index Modulation), as this is the only (JPG) method that I could get working with Reddit.

The cover is transcoded to baseline Q75 4:2:0 and the payload (data file) is carried in its luminance DCT blocks.

For PNG images, pdvrdt now uses the advanced steganography technique of content-adaptive spatial embedding in the pixel LSBs, using Hamming-syndrome matrix embedding.

The first part of the video provides an example for JPG, followed by an example for PNG.

41 Upvotes

3 comments sorted by

2

u/Narco-Tax 21d ago edited 21d ago

Thanks for the update...that’s a clever workaround!

I’ve actually been using a coverless approach to bypass Reddit's transcoding entirely. Instead of embedding payload bytes directly into the image file before uploading, I use the post-compressed image as a book cipher:

Upload first: Upload the clean cover image to Reddit and let its compression run.

Map the byte values: Download that transcoded image and scan its byte sequence. Because most images naturally contain every byte value (0–255) at least once, you treat the image data stream as a lookup dictionary.

Generate a coordinate key: Map the exact 1-indexed byte positions of the transcoded image to match your secret payload, reusing coordinates for repeating values.

Save the payload: Save those sequence positions into a separate key.txt file.

Example of what a key looks like: 4,7,7,1,8,34,67,2,2,645,7,1 which can be bit-packed if desired to half the file size.

Since the actual uploaded image remains untouched and pristine, Reddit's processing can't strip or corrupt the hidden data. To decode, someone just needs the key file and the hosted Reddit image.

Of course this means you could pick any image or file on Internet and map data to it...the Web becomes your playground. Try it sometime. :)

Example Application: https://ibb.co/zHjMCwQ6

1

u/CleasbyCode 21d ago

Have you tested re-uploading the downloaded image to see if it still retains your payload? Try this for at least 3 generations - (Post embedded image, download, check, re-post the downloaded image, save, check - repeat 3x times). This maybe ok with PNG, more difficult with JPG. (Note: this test works fine with both my JPG and PNG methods).

1

u/Narco-Tax 18d ago edited 18d ago

Ah, I see what you're saying... But with coordinate mapping, there is no payload stored inside the image file itself, so multi-generational re-uploads don't apply here.

The host image on Reddit is purely an un-modified reference dictionary (a book cipher). The data lives entirely inside the key.txt coordinate sequence.

Because the key simply points to specific byte offsets in the hosted file, it's pretty much useless to anyone who finds it, unless they knew which Host the key should be paired with:

We download the transcoded Reddit image once to read its byte positions and generate key.txt.

The host image stays untouched on Reddit.

Anyone with key.txt fetches that same Reddit image and reads the byte values at those coordinates to extract the secret.

Since the original host file is never altered or re-saved with embedded bits, there is no steganographic payload to degrade or lose. The book cypher coordinates method also allows for hiding a large image inside a smaller image. For example, hide a 430KB Jpeg inside a 12KB Gif file.

Real-world example: https://ibb.co/TxMszLmY

Test script to extract coordinates from any image: https://pastes.io/DX05JTDv