トップ «前日 最新 翌日» 編集
RSS feed

ただのにっき


2019-12-27(金) [長年日記]

仕事納めだったのでワインのラベルを解読した

[写真]イタリアワイン「HACKER」

あれは11月の9日だったか、相模大野の酒屋をウロウロしていたら「HACKER」なる見慣れないワインが入荷しているのをかみさんが発見。買って会社に持っていけという。そりゃまぁ、いちおううちの職場はハッカーの巣窟ではあるが。

それにしてもこのワイン、名前といいわざとらしい0と1の羅列といい、ぜったいに何か隠れてるに違いないじゃん。それにしても、ググっても日本語の情報ほとんどないし、なんでこんなの仕入れたんだろう。

というわけで購入して、納会の日にでも持っていこうかということになった。


で、本日仕事納めにつき、簡単な掃除のあとで納会会場(会議室)に持ち込んでみました。なお、味は素直で癖がなく、飲みやすい普通のワインでした。

1. まずはラベルを撮影、OCRにかける

ワインのラベルを左右に分割して写真撮影

丸いラベルを正面から撮ると周辺の歪みがひどいので、中央から左右に半分ずつ使うつもりで撮影。そもそもこの段階でかなり歪んでいるからフォトショあたりで整形したほうがいいけど、まぁええやろ。ラベル部分だけになるようにトリミング。

OCRにかけて文字列を取り出したいんだけど、0と1からなる単純なシロモノだから、よほど劣悪な製品でないかぎり素直に認識してくれるはず。というわけで「OCR free service」とかで適当にググって見つけたサービスでサクっとテキスト化。

2. データを整形して解析

OCRはほぼ誤認識なくテキストにしてくれたので、左半分(left.txt)と右半分(right.txt)でそれぞれ22行のテキストファイルになった。両方合わせて32bit/行なので、たぶん88文字のデータのはず。

あとはコマンドラインでサクっと文字列変換しませう。pasteコマンドでデリミタを無指定にするときって「-z -d'\0'」にするんだって。初めて知った(manに書いてある)。あと一昨日でたばかりのruby 2.7の新文法「_1」をさっそく使ったぞ(笑)。いやー、こりゃワンライナーでしか使わんなぁ。

% paste -s -z -d'\0' left.txt right.txt |\
  ruby -pne '$_=$_.scan(/.{8}/).map{_1.to_i(2).chr}.join'

出てきた文字列はさすがにところどころ文字化けしているが(想定内)、ちゃんと読める部分もある。おそらく同じURLが複数回並んでるだけですね。回答を書いてもいいんだけど、それじゃ今後同じことをしたい人にとって面白くないので略。じゃあアクセスしてみましょう。

3. 出てきたURLにアクセス

[スクリーンショット]GREAT! YOU FOUND THE CODE

うはは。難易度はCTFでも配点5程度の超サービス問題だけど、わざわざ解読してアクセスするような客は限られるはずで、こういう仕掛けがあるのは楽しくて良いね。この入力フォームの最後には「Where did you buy your Hacker?」なんて設問もあってなかなか笑える(なんとなく二重の意味があるっぽくて──というのは深読みのしすぎか?)。

とはいえこのフォームは住所まで入れるようになっているわりに個人情報の扱いに関する注意書きもないから、GDPR支配下にあるイタリアの会社でこれではいろいろ心配であります。もちろん自分はまだ何も入力していない。

……という話を納会のLTでした

おまけ

なお、真面目にフォームから情報を送るとHACKER (Not Cracker!) Hall of fame! - Ferro13というページにさらされるようだ。まだ日本からの参戦はなさそう。

それよりLEVEL 1と2があるなぁ。ひょっとするとこのワインラベル、別の問題が隠されてる可能性もあるね。


トップ «前日 最新 翌日» 編集
RSS feed