A cross-platform command line tool for steganography, focused on performance and simplicity.
- Simple and easy-to-use command line tool
- Cross-platform support (Windows, macOS and Linux)
- Support PNG Images and WAV Audio as carrier media
- Supports strong encryption with XChaCha20-Poly1305 and Argon2id
- Hides one or many files as well as simple messages
- Based on least significant bit steganography
- Backwards compatible with stegano for windows for image en-/decoding
- Memory safe by design
- Written in rust
In short, the art of hiding information in something (like a book, a image, a audio or even a video). You can find more information on my slides or checkout my talk on the rust meetup munich in june, 2020.
- installation for Linux Mint
- installation for Arch Linux
TL;DR:
sudo snap install stegano
To install the stegano cli, you just need to run
❯ 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
$HOME/.cargo/bin/stegano
stegano
can be installed from available AUR packages using an AUR helper. For example,
❯ yay -S stegano
❯ stegano --help
Stegano CLI 0.4.0
Sven Assmann <[email protected]>
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
❯ stegano hide --help
Hides data in PNG images and WAV audio files
Usage: stegano hide [OPTIONS] --in <media file> --out <output image file>
Options:
-p, --password <password> Password used to encrypt the data
-i, --in <media file> Media file such as PNG image or WAV audio file, used readonly
-o, --out <output image file> Final image will be stored as file
-d, --data <data file> File(s) to hide in the image
-m, --message <text message> A text message that will be hidden
-h, --help Print help
-V, --version Print version
Let's illustrate how to hide a file like README.md
, inside an image Base.png
and save it as README.png
:
❯ 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)
❯ 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
❯ stegano hide \
-i resources/NoSecret.jpg \
-d resources/secrets/Blah.txt \
-o secret.png
❯ stegano hide \
-i resources/plain/carrier-audio.wav \
-d resources/secrets/Blah.txt \
resources/secrets/Blah-2.txt \
-o secret.wav
Now let's assume we want to hide just a little text message in secret-text.png
. So we would run:
❯ stegano hide \
-i resources/NoSecrets.jpg \
-m 'This is a super secret message' \
-o secret-text.png
❯ stegano unveil --help
Usage: stegano unveil [OPTIONS] --in <media source file> --out <output folder>
Options:
-p, --password <password> Password used to encrypt the data
-i, --in <media source file> Source image that contains secret data
-o, --out <output folder> Final data will be stored in that folder
-h, --help Print help
-V, --version Print version
Let's unveil the README.md
that we've hidden (just above) in README.png
❯ stegano unveil --in README.png --out ./
❯ file README.md
README.md: UTF-8 Unicode text
Now let's unveil the message from above secret-text.png
. So we would run:
❯ stegano unveil \
-i secret-text.png \
-o message
❯ cat message/secret-message.txt
This is a super secret message
❯ stegano unveil-raw --help
stegano-unveil-raw
Unveils raw data in PNG images
USAGE:
stegano unveil-raw --in <image source file> --out <output file>
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
-i, --in <image source file> Source image that contains secret data
-o, --out <output file> Raw data will be stored as binary file
Let's unveil the raw data of the README.md
that we've hidden just above in README.png
❯ 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.
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.
- GNU GPL v3 license
- Copyright 2019 - 2024 © Sven Kanoldt.