sekai013's blog

JavaScriptとかを勉強する

KSNCTF #22 Square Cipher

問題

ksnctf - 22 Square Cipher

考えたこと

ぱっと見て縦に長かったのでほんとに正方形か?と思って調べたけど 31*31 の正方形だった。
31 ってなんだろうとか正方形のものってなんだろうと考えてみたけどわからなかった。

眺めてみると使われてる文字は a-zA-Z っぽい。大文字小文字がごちゃごちゃになってる。
各行の頭文字を見てたら大文字が含まれていないことに気付いた。もしかしてと思って1行目も見てみたら大文字が含まれていないことに気付いた。

もしかしたら

小小小...
小大大...
小大小...

って感じで小文字の層と大文字の層からできているのでは?と思ったけど、そんなことはなさそうだった。
でも外周に大文字が含まれてないのは気になったので、大文字だけハイライトしてみた。

f:id:sekai013:20150406220358p:plain

やったぜ。このまま読み込もうとしたけど当然だめだったので QR コードを生成してくれるようなコード書くことにした。

とりあえず、大文字か小文字かという情報だけが重要なので、さくっと小文字=0, 大文字=1 に直した。

:%s/[a-z]/0/g
:%s/[A-Z]/1/g

あとはこの01を元にしてなんとか画像を生成できるやろと思ってたけど、なかなかよさそうな方法が見つからなかった。
HTML5Canvas を使うのが一番楽そうだったのでそうした。

https://github.com/sekai013/ksnctf/tree/master/square_cipher

01のやつを貼り付けてボタン押すと QR コードを描くようにした。無事読み込めて旗取れた。Canvas 初めて見たけど面白かった。