outguess(1)

πŸ’– outguess β€” universal steganographic tool πŸ’–

okay bestie, sit down, hydrate, because we're about to talk about outguess, aka the universal steganographic tool β€” and yes, that's the whole NAME section, she's a one-line icon and we love her for it. this is the <rainbow>outguess(1)</rainbow> page, section 1 of the manual, and she is giving secret-agent energy. πŸ•΅οΈβ™€οΈβœ¨


✨ SYNOPSIS ✨

outguess [OPTIONS] inputfile outputfile

πŸ¦‹ DESCRIPTION πŸ¦‹

okay so. OutGuess is a universal steganographic tool, which is a fancy way of saying it lets you shove hidden information into the redundant bits of data sources. and the best part? the nature of the data source literally does not matter to the core of OutGuess β€” she's flexible like that. πŸ’…

the program relies on data specific handlers that go extract the redundant bits and then write them back once they've been modified. rn only the PPM, PNM, and JPEG image formats are supported, but listen β€” OutGuess could use literally any kind of data, as long as somebody provides a handler. no cap.

OutGuess uses a generic iterator object to pick which bits in the data should get modified. a seed can be used to change how that iterator behaves. the seed gets embedded in the data right alongside the rest of the message. by altering the seed, OutGuess tries to find a sequence of bits that minimizes the number of changes that have to be made to the data. obsessed.

then there's a bias that gets introduced: it favors modifying bits that were extracted from a high value, and it tries to avoid modifying bits that were extracted from a low value. she has taste.

bonus: OutGuess also lets you hide two distinct messages in the data, which provides plausible deniability. iconic behavior. it keeps track of the bits that have already been modified and locks them. a (23,12,7) Golay code is used for error correction so it can tolerate collisions on those locked bits. and artificial errors get introduced to avoid modifying bits that have a high bias. 🧚


πŸ‘‘ OPTIONS πŸ‘‘

heads up, bestie: the following command line options, when specified as capital letters, indicate options for the second message. so like, -k is one thing and -K is her sister. iykyk. 🫢

  • -F [+-] β€” says OutGuess should preserve statistics based on frequency counts. the result? no statistical test that is based on frequency counts will be able to detect steganographic content. slay. this option is set as on by default.
  • -kK <key> β€” specify the secret key used to encrypt and hide the message in the provided data.
  • -dD <datafile> β€” specify the filename containing a message to be hidden in the data.
  • -sS <seed> β€” specify the initial seed the iterator object uses for selecting bits in the redundant data. if no upper limit is specified, the iterator will just use this seed without searching for a more optimal embedding.
  • -iI <limit> β€” specify the upper limit for finding an optimal iterator seed. the maximum value for the limit is 65535. don't try to be cute with bigger numbers.
  • -eE β€” use error correction for data encoding and decoding.
  • -r β€” retrieve a message from a data object. if this option is not specified, OutGuess will embed messages instead. (yes, this one is lowercase-only, she doesn't have a capital twin πŸ’€)
  • -x <maxkeys> β€” if the second key does not create an iterator object that is successful in embedding the data, the program will derive up to the specified number of new keys.
  • -p param β€” passes a string as a parameter to the destination data handler. for the JPEG image format, this is the compression quality, and it can take values between 75 and 100. the higher the quality, the more bits to hide a message in the data are available. 🌈
  • -m β€” mark pixels that have been modified.
  • -t β€” collect statistics about redundant bit usage. repeated use increases the output level. spam her for more tea.
  • -h β€” print a usage help text and exit.

for embedding messages, you need to specify a source and a destination filename. OutGuess figures out the data format by the filename extension. and if no filenames are specified at all, OutGuess operates as a filter and assumes the PPM data format. ✨


πŸŽ€ EXAMPLES πŸŽ€

to embed the message hidden.txt into the monkey.jpg image:

$ outguess -k "my secret pass phrase" -d hidden.txt monkey.jpg out.jpg

and in the other direction:

$ outguess -k "my secret pass phrase" -r out.jpg message.txt

will retrieve the hidden message from the image. πŸ¦‹

if you want to embed a second message, use:

$ outguess -k "secret1" -d hide1.txt -E -K "secret2" -D hide2.txt monkey.jpg out.jpg

OutGuess will first embed hide1.txt and then hide2.txt on top of it, using error correcting codes. that second message hide2.txt can be retrieved with:

$ outguess -k "secret2" -e -r out.jpg message.txt

🌸 SEE ALSO 🌸

cjpeg(1), djpeg(1), pnm(5), seek_script(1), stirmark(1)


πŸ’œ AUTHOR πŸ’œ

OutGuess was originally developed by Niels Provos <provos@citi.umich.edu> and is maintained by some people. (yes, truly, "some people" β€” we love a mysterious collective. πŸ‘‘)

currently, source code and newer versions are available at https://github.com/resurrecting-open-source-projects/outguess


πŸ’– so yeah. that's the whole page. go hide a message inside a monkey. you got this. πŸ’–

okay bye bestie, this was outguess-0.4 from 02 Sep 2021 β€” that's the version and date, and that's a wrap. mwah. πŸ’…βœ¨