Best use of cocoa - Bronze award
ココアの最高の使い方 - 銅賞
受賞者:Daniel Vik
引用元:https://www.ioccc.org/2012/vik/vik.c
審査員・作者による説明:https://www.ioccc.org/2012/vik/hint.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に書かれていることを踏まえたネタ。
「チョコレートは審査に影響していないです。保証します」と審査員はコメントしている。