Stegano

License: GPL v3 Build Status dependency status codecov LOC

A cross-platform command line tool for steganography focused on performance and simplicity.

Demo

demo

Features

What is steganography?

In short, the art of hiding information in something (like a book, a image, a audio or even a video). speakerdeck You can find more information on my slides or checkout my talk on the rust meetup munich in june, 2020.

Install

To install the stegano cli, you just need to run

sh ❯ cargo install --force stegano-cli

(--force just makes it update to the latest stegano-cli if it's already installed)

Note the binary is called stegano (without -cli)

to verify if the installation went thru, you can run which stegano that should output similar to

sh $HOME/.cargo/bin/stegano

AUR

stegano can be installed from available AUR packages using an AUR helper. For example,

sh ❯ yay -S stegano

Usage

```sh ❯ stegano --help Stegano CLI 0.4.0 Sven Assmann sven.assmann.it@gmail.com Hiding secret data with steganography in PNG images and WAV audio files

USAGE: stegano [SUBCOMMAND]

FLAGS: -h, --help Prints help information -V, --version Prints version information

SUBCOMMANDS: help Prints this message or the help of the given subcommand(s) hide Hides data in PNG images and WAV audio files unveil Unveils data from PNG images unveil-raw Unveils raw data in PNG images ```

Subcommands

hide

```sh ❯ stegano hide --help stegano-hide Hides data in PNG images and WAV audio files

USAGE: stegano hide [FLAGS] [OPTIONS] --data --in --out

FLAGS: --x-force-content-version-2 Experimental: enforce content version 2 encoding (for backwards compatibility) -h, --help Prints help information -V, --version Prints version information

OPTIONS: -d, --data File(s) to hide in the image -i, --in Media file such as PNG image or WAV audio file, used readonly. -m, --message A text message that will be hidden -o, --out Final image will be stored as file ```

Example with am Image PNG file

Let's illustrate how to hide a file like README.md, inside an image Base.png and save it as README.png:

sh ❯ stegano hide --data README.md --in resources/plain/carrier-iamge.png --out README.png

The final result is then contained in the image README.png.

Pro TIP you can hide multiple files at once

here I'm using the shorthand parameters (--data, -d), (--in, -i), (--out, -o)

sh ❯ stegano hide \ -i resources/plain/carrier-image.png \ -d resources/secrets/Blah.txt \ resources/secrets/Blah-2.txt \ -o secret.png

Hidden Feature you can use a .jpg for input and save it as .png

sh ❯ stegano hide \ -i resources/NoSecret.jpg \ -d resources/secrets/Blah.txt \ -o secret.png

Example with an Audio WAV file

sh ❯ stegano hide \ -i resources/plain/carrier-audio.wav \ -d resources/secrets/Blah.txt \ resources/secrets/Blah-2.txt \ -o secret.wav

Example Hide short messages

Now let's assume we want to hide just a little text message in secret-text.png. So we would run:

sh ❯ stegano hide \ -i resources/NoSecrets.jpg \ -m 'This is a super secret message' \ -o secret-text.png

unveil

```sh ❯ stegano unveil --help stegano-unveil Unveils data from PNG images

USAGE: stegano unveil --in --out

FLAGS: -h, --help Prints help information -V, --version Prints version information

OPTIONS: -i, --in Source image that contains secret data -o, --out Final data will be stored in that folder ```

Example unveil from an Image PNG file

Let's unveil the README.md that we've hidden (just above) in README.png

```sh ❯ stegano unveil --in README.png --out ./

❯ file README.md README.md: UTF-8 Unicode text ```

Example unveil short messages

Now let's unveil the message from above secret-text.png. So we would run:

```sh ❯ stegano unveil \ -i secret-text.png \ -o message

❯ cat message/secret-message.txt This is a super secret message ```

unveil-raw

```sh ❯ stegano unveil-raw --help stegano-unveil-raw Unveils raw data in PNG images

USAGE: stegano unveil-raw --in --out

FLAGS: -h, --help Prints help information -V, --version Prints version information

OPTIONS: -i, --in Source image that contains secret data -o, --out Raw data will be stored as binary file ```

Example unveil raw data

Let's unveil the raw data of the README.md that we've hidden just above in README.png

sh ❯ stegano unveil-raw --in README.png --out README.bin

The file README.bin contains all raw binary data unfiltered decoded by the LSB decoding algorithm. That is for the curious people, and not so much interesting for regular usage.

Contribute

To contribute to stegano-rs you can either checkout existing issues labeled with good first issue or open a new issue and describe your problem.

Also every PR is welcome, just as a note of caution: at this very time the architecture and the API are still in flux and might change, so in any case I recommend opening an issue first to discuss a code contribution.

License