Merge pull request #2268 from xexyl/sds2004-readme-fix
This commit is contained in:
4 files changed
+140
-6
No files matched your search
@@ -0,0 +1,127 @@
|
||||
## To build:
|
||||
|
||||
```sh
|
||||
make
|
||||
```
|
||||
|
||||
|
||||
### Bugs and (Mis)features:
|
||||
|
||||
The current status of this entry is:
|
||||
|
||||
```
|
||||
STATUS: INABIAF - please **DO NOT** fix
|
||||
```
|
||||
|
||||
For more detailed information see [2004 sds bugs](../../bugs.html#2004_sds).
|
||||
|
||||
|
||||
## To use:
|
||||
|
||||
```sh
|
||||
./sds
|
||||
```
|
||||
|
||||
|
||||
## Try:
|
||||
|
||||
```sh
|
||||
./try.sh
|
||||
```
|
||||
|
||||
|
||||
## Judges' remarks:
|
||||
|
||||
Why not use the program to hide another program in the program? It
|
||||
must have seemed reasonable at the time.
|
||||
|
||||
The ability to hide a message in plain text is quite charming, really.
|
||||
We must admit to a bit of uncertainty about where you'd find such
|
||||
messages, or how useful they'd be. Or, of course, whether all those
|
||||
horribly badly formatted emails spammers send might contain secret
|
||||
messages. Annoyingly, it's a little too obvious that SOMETHING has
|
||||
been done to a message for us to hide one in the remarks. :)
|
||||
|
||||
|
||||
## Author's remarks:
|
||||
|
||||
[Steganography](https://en.wikipedia.org/wiki/Steganography) is the term for the
|
||||
family of techniques used for hiding information within other information.
|
||||
Today, it has many real world uses, particularly for digital watermarking.
|
||||
|
||||
This program uses a steganographic technique to hide information in any text
|
||||
file. The specific technique used is aimed at writers of obfuscated programs
|
||||
for the IOCCC, as the hidden information is encoded in the whitespace in the
|
||||
source file. As we know, there are up to an additional 2048 characters of
|
||||
whitespace available to entrants to the IOCCC, so it turns out that this is an
|
||||
ideal place to hide things.
|
||||
|
||||
The program as provided is the steganographic decoder. Rather than
|
||||
provide a separate encoding program, you should not be surprised to
|
||||
learn that I opted to steganographically hide the encoder inside the
|
||||
decoder.
|
||||
|
||||
Try it out. Compile the program, then type
|
||||
|
||||
```sh
|
||||
./sds < sds.c
|
||||
```
|
||||
|
||||
You should see the encoder program displayed. Now save it, like:
|
||||
|
||||
```sh
|
||||
./sds < sds.c > encoder.c
|
||||
```
|
||||
|
||||
Then compile `encoder.c`. You now have the complete system ready.
|
||||
|
||||
The encoder expects to get a filename as an argument. This filename
|
||||
is the name of the file containing the information to be hidden. It
|
||||
expects the file in which to hide the information to be on the
|
||||
standard input, and will output the results on the standard output.
|
||||
|
||||
You can use it like this (assuming you have a file called remarks):
|
||||
|
||||
```sh
|
||||
echo 'Hello, World!' > message
|
||||
./encoder message < remarks > remarks_msg
|
||||
```
|
||||
|
||||
Then to decode:
|
||||
|
||||
```sh
|
||||
./sds < remarks_msg
|
||||
Hello, World!
|
||||
```
|
||||
|
||||
C programs are mostly unaffected by adding steganographic content,
|
||||
but it is possible in certain circumstances for whitespace to be
|
||||
changed inside strings where it should be left alone. Plain text
|
||||
files are good candidates for hiding information in, but the added
|
||||
spacing may render the text somewhat difficult to read.
|
||||
|
||||
|
||||
### Obfuscation
|
||||
|
||||
This program is obfuscated in a number of ways:
|
||||
|
||||
* The code is all but impossible to read due to the spacing.
|
||||
* The algorithm is well hidden in the code due to copious red-herrings.
|
||||
* The long expressions cause indentation tools to give poor results.
|
||||
* And good old fashioned ternary operators are the icing on the cake.
|
||||
|
||||
### Compiling the program
|
||||
|
||||
The program (and the encoder program) should compile on any
|
||||
reasonable compiler. In particular, they are known to compile under
|
||||
GNU C.
|
||||
|
||||
|
||||
## Copyright and CC BY-SA 4.0 License:
|
||||
|
||||
This file is Copyright (c) 2023 by Landon Curt Noll. All Rights Reserved.
|
||||
You are free to share and adapt this file under the terms of this license:
|
||||
|
||||
Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
|
||||
For more information, see: https://creativecommons.org/licenses/by-sa/4.0/
|
||||
+6
-6
@@ -30,10 +30,10 @@ echo 1>&2
|
||||
make encoder 2>/dev/null
|
||||
echo 1>&2
|
||||
|
||||
echo "$ ./encoder README.md <sds.c | tee sds_msg.c" 1>&2
|
||||
echo "$ ./encoder README_sds.txt <sds.c | tee sds_msg.c" 1>&2
|
||||
read -r -n 1 -p "Press any key to continue (space = next page, q = quit): "
|
||||
echo 1>&2
|
||||
./encoder README.md <sds.c | tee sds_msg.c | less -rEXFK
|
||||
./encoder README_sds.txt <sds.c | tee sds_msg.c | less -rEXFK
|
||||
|
||||
read -r -n 1 -p "Press any key to run: make sds_msg 2>/dev/null: "
|
||||
echo 1>&2
|
||||
@@ -55,15 +55,15 @@ echo 1>&2
|
||||
echo 'Hello, World!' > message
|
||||
echo 1>&2
|
||||
|
||||
echo "$ ./encoder message < README.md | tee remarks.md" 1>&2
|
||||
echo "$ ./encoder message < README_sds.txt | tee remarks.md" 1>&2
|
||||
read -r -n 1 -p "Press any key to continue (space = next page, q = quit): "
|
||||
echo 1>&2
|
||||
./encoder message < README.md | tee remarks.md | less -rEXFK
|
||||
./encoder message < README_sds.txt | tee remarks.md | less -rEXFK
|
||||
echo 1>&2
|
||||
|
||||
read -r -n 1 -p "Press any key to run: diff remarks.md README.md (space = next page, q = quit): "
|
||||
read -r -n 1 -p "Press any key to run: diff remarks.md README_sds.txt (space = next page, q = quit): "
|
||||
echo 1>&2
|
||||
diff remarks.md README.md | less -rEXFK
|
||||
diff remarks.md README_sds.txt | less -rEXFK
|
||||
echo "Did you notice how similar they are?" 1>&2
|
||||
echo 1>&2
|
||||
|
||||
|
||||
@@ -2185,6 +2185,9 @@ fast in modern systems, especially the scrolling text of
|
||||
<p>Cody also added the <a href="2004/schnitzi/try.sh">try.sh</a> script.</p>
|
||||
<h2 id="sds-index.html"><a name="2004_sds"></a><a href="2004/sds/sds.c">2004/sds</a> (<a href="2004/sds/index.html">index.html</a>)</h2>
|
||||
<p><a href="#cody">Cody</a> added the <a href="2004/sds/try.sh">try.sh</a> script.</p>
|
||||
<p>Also, after the README.md file had copyright changes, it broke the script so
|
||||
Cody made a copy of the older README.md file into <code>README_sds.txt</code> and added that
|
||||
to the repo for the script instead.</p>
|
||||
<h2 id="vik2-index.html"><a name="2004_vik2"></a><a href="2004/vik2/vik2.c">2004/vik2</a> (<a href="2004/vik2/index.html">index.html</a>)</h2>
|
||||
<p><a href="#cody">Cody</a> fixed this to compile in Linux. Although it compiled cleanly in macOS (and
|
||||
BSD?) the code failed to compile at all in Linux due to:</p>
|
||||
|
||||
@@ -3166,6 +3166,10 @@ Cody also added the [try.sh](2004/schnitzi/try.sh) script.
|
||||
|
||||
[Cody](#cody) added the [try.sh](2004/sds/try.sh) script.
|
||||
|
||||
Also, after the README.md file had copyright changes, it broke the script so
|
||||
Cody made a copy of the older README.md file into `README_sds.txt` and added that
|
||||
to the repo for the script instead.
|
||||
|
||||
|
||||
## <a name="2004_vik2"></a>[2004/vik2](2004/vik2/vik2.c) ([index.html](2004/vik2/index.html))
|
||||
|
||||
|
||||
Reference in new issue
Block a user