ココアの最高の使い方 - 銅賞
引用元:https://www.ioccc.org/2012/vik/vik.c
審査員・作者による説明:https://www.ioccc.org/2012/vik/index.html
コンパイルにはzlibが必要。
画像にデータを隠すステガノグラフィーツール。
次の画像に"Hello, world!“を埋め込む例。
$ cat message.txt
Hello, world!
$ gcc -o vik vik.c -lz
$ ./vik e ioccc.png message.txt > message-in-ioccc.png
生成された画像は見た目では違わない。


次のようにすると隠されたメッセージを取り出せる。
$ ./vik d message-in-ioccc.png
Hello, world!
テキストに限らず、iocccのロゴにチョコレートの画像を隠すこともできる。
$ ./vik e ioccc.png chocolate.png > chocolate-in-ioccc.png
チョコレートの画像が埋め込まれたロゴ。見た目は変わらない。

生成画像
チョコレートの画像を復元する。
$ ./vik d chocolate-in-ioccc.png > restored-chocolate.png
取り出せたが、画質が落ちている。

このチョコレートの画像はすこし特別で、他の画像に埋め込まれたときにBrainfuckのコードとして動く、とのこと。
$ ./vik b chocolate-in-ioccc.png
this is not a bribe!
各画像のRGB値の下位ビットにイメージやテキストを埋め込むとのこと。わりと正攻法。
コード形状はチョコレートの包みだろうか。 もともとこのプログラムには、PNG画像に基づいてソースコードを整形する機能があったが、サイズ制限にあわなかったので削除したらしい。 現在の形状はその機能で生成したとのこと。
Brainfuckのコードが埋め込まれているというのもあまりよくわからないが、chocolate-in-ioccc.pngを普通のbrainfuckインタプリタで実行しても動作しないので、おそらく、PNGのビットマップデータ部をzlibで展開した状態にbrainfuckのコードが埋め込まれている。 実行して出てくるメッセージ「これは賄賂ではない!」は、審査員間で投票を操作するためにチョコレートの賄賂を送ったとか送らないとかいう話がguideline.txtに書かれていることを踏まえたネタ。 「チョコレートは審査に影響していないです。保証します」と審査員はコメントしている。