{"id":13863933,"url":"https://github.com/resurrecting-open-source-projects/outguess","last_synced_at":"2025-07-14T20:31:47.429Z","repository":{"id":47790755,"uuid":"156780704","full_name":"resurrecting-open-source-projects/outguess","owner":"resurrecting-open-source-projects","description":"Universal steganographic tool","archived":false,"fork":false,"pushed_at":"2021-09-03T01:14:31.000Z","size":1460,"stargazers_count":299,"open_issues_count":7,"forks_count":28,"subscribers_count":13,"default_branch":"master","last_synced_at":"2025-07-01T15:03:17.937Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/resurrecting-open-source-projects.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-11-08T23:06:25.000Z","updated_at":"2025-06-30T02:10:15.000Z","dependencies_parsed_at":"2022-09-09T08:11:58.452Z","dependency_job_id":null,"html_url":"https://github.com/resurrecting-open-source-projects/outguess","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/resurrecting-open-source-projects/outguess","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/resurrecting-open-source-projects%2Foutguess","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/resurrecting-open-source-projects%2Foutguess/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/resurrecting-open-source-projects%2Foutguess/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/resurrecting-open-source-projects%2Foutguess/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/resurrecting-open-source-projects","download_url":"https://codeload.github.com/resurrecting-open-source-projects/outguess/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/resurrecting-open-source-projects%2Foutguess/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265344831,"owners_count":23750566,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-05T09:00:30.934Z","updated_at":"2025-07-14T20:31:46.567Z","avatar_url":"https://github.com/resurrecting-open-source-projects.png","language":"C","funding_links":[],"categories":["Entries"],"sub_categories":["Steg"],"readme":"# OutGuess\n\n#### outguess - universal steganographic tool\n\n## What is OutGuess?\n\nOutguess is a universal steganographic tool that allows the insertion of hidden\ninformation into the redundant bits of data sources. The nature of the data\nsource is irrelevant to the core of outguess. The program relies on data\nspecific handlers that will extract redundant bits and write them back after\nmodification. Currently only the PPM (Portable Pixel Map), PNM (Portable  Any\nMap), and JPEG image formats are supported, although outguess could use any\nkind of data, as long as a handler were provided.\n\nSteganography is the art and science of hiding that communication is happening.\nClassical steganography systems depend on keeping the encoding system secret,\nbut modern steganography are detectable only if secret information is known,\ne.g. a secret key. Because of their invasive nature steganography systems leave\ndetectable traces within a medium's characteristics. This allows an\neavesdropper to detect media that has been modified, revealing that secret\ncommunication is taking place. Although the secrecy of the information is not\ndegraded, its hidden nature is revealed, defeating the main purpose of\nSteganography.\n\nFor JPEG images, OutGuess preserves statistics based on frequency counts. As a\nresult, no known statistical test is able to detect the presence of\nsteganographic content. Before embedding data into an image, the OutGuess\nsystem can determine the maximum message size that can be hidden while still\nbeing able to maintain statistics based on frequency counts.\n\nOutGuess uses a generic iterator object to select which bits in the data should\nbe modified. A seed can be used to modify the behavior of the iterator. It is\nembedded in the data along with the rest of the message. By altering the seed,\nOutGuess tries to find a sequence of bits that minimizes the number of changes\nin the data that have to be made.\n\nA sample output from OutGuess is as follows:\n\n```\nReading dscf0001.jpg....\nJPEG compression quality set to 75\nExtracting usable bits: 40059 bits\nCorrectable message size: 21194 bits, 52.91%\nEncoded 'snark.bz2': 14712 bits, 1839 bytes\nFinding best embedding...\n    0:  7467(50.6%)[50.8%], bias  8137(1.09), saved:   -13, total: 18.64%\n    1:  7311(49.6%)[49.7%], bias  8079(1.11), saved:     5, total: 18.25%\n    4:  7250(49.2%)[49.3%], bias  7906(1.09), saved:    13, total: 18.10%\n   59:  7225(49.0%)[49.1%], bias  7889(1.09), saved:    16, total: 18.04%\n59, 7225: Embedding data: 14712 in 40059\nBits embedded: 14744, changed: 7225(49.0%)[49.1%], bias: 7889, tot: 40032, skip: 25288\nFoiling statistics: corrections: 2590, failed: 1, offset: 122.585494 +- 239.664983\nTotal bits changed: 15114 (change 7225 + bias 7889)\nStoring bitmap into data...\nWriting foil/dscf0001.jpg....\n```\n\nThe simple example script `seek_script` uses OutGuess to select an image that\nfits the data we want to hide the best, yielding the lowest number of changed\nbits. Because we do not care about the actual content of the cover data we\nsend, this is a very viable approach.\n\nAdditionally, OutGuess allows to hide multiple messages in the data. Thus, it\nalso provides plausible deniability. It keeps track of the bits that have been\nmodified previously and locks them. A `(23,12,7)` Golay code is used for error\ncorrection to tolerate collisions on locked bits. Artificial errors are\nintroduced to avoid modifying bits that have a high bias.\n\nCurrently OutGuess can insert only two different messages. This is an\nexperimental feature.\n\n## Help this project ##\n\nOutGuess needs your help. **If you are a programmer** and want to help a nice\nproject, this is your opportunity.\n\nThe original OutGuess went unmaintained; the source of the last version, 0.2,\nwas [imported from Debian](https://snapshot.debian.org/package/outguess/) or other\nrepositories of the Internet. After, patches from Debian and elsewhere were\napplied to create the 0.2.1 release. The details of each release are registered\nin the [ChangeLog](ChangeLog) file. Now, OutGuess is maintained by volunteers\nunder [Resurrecting Open Source\nProjects](https://github.com/resurrecting-open-source-projects).\n\nIf you are interested in helping OutGuess, read the [CONTRIBUTING.md](CONTRIBUTING.md) file.\n\n## Building\n\n### Prepare the `jpeg-6b-steg` library\n\nTo do so, you need to choose (and potentially edit) an appropriate `jconfig.h`\nfile. To get an idea which one you might want, have a look at their header\ncomments.\n\nYou might do so like this (POSIX only):\n\n```\nhead -n 1 src/jpeg-6b-steg/jconfig.*\n```\n\nThe default one is `jconfig.cfg`. You may use it like this:\n\n```\ncd jpeg-6b-steg\nln -s jconfig.cfg jconfig.h\ncd ..\n```\n\nHowever, in OutGuess 0.3 or newer, there is the option `--with-generic-jconfig`\nthat will use `jconfig.cfg` automatically. See the *Build and install OutGuess*\nsection below.\n\n### Build and install OutGuess\n\nOutGuess has only been tested on OpenBSD, Linux, Solaris and AIX.\n\nIf you manually edited `jconfig.h`, you must use the following command\nsequence:\n\n```\n./autogen.sh\n./configure\nmake\nmake install\n```\n\nOtherwise, if you prefer to use `jconfig.cfg` content as default for\n`jconfig.h`, without a manual action, you can use the following sequence:\n\n```\n./autogen.sh\n./configure --with-generic-jconfig\nmake\nmake install\n```\n\n## Embedded modified JPEG library\n\nOutGuess needs a modified version of the JPEG library. Currently, the original\nlib (without changes) is available at https://www.ijg.org/files/. The tarball\nname for version 6b is `jpegsrc.v6b.tar.gz` (or `jpegsr6b.zip`).\n\nThere is a complete document about the JPEG in\n`src/jpeg-\u003cversion\u003e-steg/install.doc` in OutGuess source code (this is plain\ntext, not a traditional\n*.doc*).\n\nThe .diff file used to modify the original JPEG library is available at `/doc`\nin OutGuess source code.\n\n## Acknowledgments\n\nOutGuess uses code from the following projects.\nAttributions can also be found in the sources.\n\n* Markus Kuhn's Stirmark software,\n  see [doc/STIRMARK-README](STIRMARK-README)\n* the Independent JPEG Group's JPEG software,\n  see [src/jpeg-6b-steg/README](src/jpeg-6b-steg/README)\n* the Arc4 random number generator for OpenBSD, (C) 1996 by\n  David Mazieres \u003cdm@lcs.mit.edu\u003e\n* free MD5 code by Colin Plumb\n\nFor determining the redundant bits out of a JPEG image,\nthe `jpeg-jsteg-v4` patches by Derek Upham \u003cupham@cs.ubc.ca\u003e were helpful.\n\nSpecial thanks to:\n\n* Robert Morelos-Zaragoza \u003cmorelos_zaragoza@yahoo.com\u003e, author of golay.c,\n  that gently agreed to change its licensing to BSD.\n* Dug Song \u003cdugsong@monkey.org\u003e for helping with the original configure file,\n* Andrew Reiter \u003candrewr@rot26.net\u003e for testing on Solaris.\n\n## Author ##\n\nOutGuess was originally developed by Niels Provos \u003cprovos@citi.umich.edu\u003e,\nunder the BSD software license. It is completely free for any use including\ncommercial.\n\nCurrently, source code is maintained by volunteers. Newer versions are\navailable at https://github.com/resurrecting-open-source-projects/outguess\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fresurrecting-open-source-projects%2Foutguess","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fresurrecting-open-source-projects%2Foutguess","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fresurrecting-open-source-projects%2Foutguess/lists"}