発端
CTFでQRコード問題を解いている時に手打ちでQRのパターンを入力することがあります。
特にこのツールを使うときは手打ち入力の途中でパターンを確認するのが大変です。
また、プレーンテキストが実はQRだったなんて問題のときも困ったりします。
いちいち何かのツールで文字をQRに変換するのは面倒ですし、確認するだけですぐに文字に戻したいということはしばしばあります。
解決
意外でシンプルな解決方法があります。(技術記事とは思えない愚直な方法ですが。)
例えば、以下のようなパターンに書き下したとします。
xxxxxxx___x__xx_xx_xx_xx__xxxxxxx
x_____x____x_xxxxx__x_x_x_x_____x
x_xxx_x_x___xx__xxxxx__x__x_xxx_x
x_xxx_x_xx_x__x_x__xxxxxx_x_xxx_x
x_xxx_x_x__x___x__x__x__x_x_xxx_x
x_____x_xx_x_xxxxx__xx____x_____x
xxxxxxx_x_x_x_x_x_x_x_x_x_xxxxxxx
________x___x__x__x__x___________
x_xxxxx__x___xxx_x___xxx__xxxxx__
_xxx____x_______x_xxxxxxx_x_____x
xxxx_xxx__xxx__xx_x_xx__xx____xx_
xxx_______xx__x_x__x_xx_xx_x_xx__
___xxxxx_x_xx_____xx_x___x_xx__xx
__xxx__x__x__xxxx___xxxx_xx___x_x
x_x_x_xxx_xx__x____x_x___x_xxxxx_
__xx___x_x_x____x__xxx__xxx__xx__
x_xxxxxxx_x_____xx_xxxx_x__xxx_x_
________x_x___xxxx_xx__xx_x__xx_x
xx_xxxx__xx_xx_xxx__x_x____x_xxx_
___x___xxxxx_x_x_xx____xx_x_x_x_x
xxxxxxx__x___x__x__xxxx_xx__x____
x_x______x_____x__x____x__x___xx_
x_x_xxxx_x____xxxxx_xx__x___x_xx_
x_x_x__x_______x__x____xx___xxxxx
x_x_x_x_xx_x__xxxx__xxx_xxxxxxx_x
________xx_x_x__x_x__xxxx___x_xxx
xxxxxxx_______xxx_x__x_xx_x_x_xx_
x_____x_x_x__xxx____xxxxx___xxxx_
x_xxx_x_xx_____x__x__x__xxxxx__x_
x_xxx_x_x______xxx__xxxxxx_xxx___
x_xxx_x_xx_xxx_____x_x____x__x___
x_____x___xx____x_xxxxxx_x_xxxx__
xxxxxxx_xxxxx_x__x_xx_xxxx_____x_
xが黒、_が白です。
これだとどんな位置関係かよく分かりません。直感的でなく見づらいです。
しかし、xを靈に_を (全角スペース)に置換すると、
靈靈靈靈靈靈靈 靈 靈靈 靈靈 靈靈 靈靈 靈靈靈靈靈靈靈
靈 靈 靈 靈靈靈靈靈 靈 靈 靈 靈 靈
靈 靈靈靈 靈 靈 靈靈 靈靈靈靈靈 靈 靈 靈靈靈 靈
靈 靈靈靈 靈 靈靈 靈 靈 靈 靈靈靈靈靈靈 靈 靈靈靈 靈
靈 靈靈靈 靈 靈 靈 靈 靈 靈 靈 靈 靈靈靈 靈
靈 靈 靈靈 靈 靈靈靈靈靈 靈靈 靈 靈
靈靈靈靈靈靈靈 靈 靈 靈 靈 靈 靈 靈 靈 靈 靈靈靈靈靈靈靈
靈 靈 靈 靈 靈
靈 靈靈靈靈靈 靈 靈靈靈 靈 靈靈靈 靈靈靈靈靈
靈靈靈 靈 靈 靈靈靈靈靈靈靈 靈 靈
靈靈靈靈 靈靈靈 靈靈靈 靈靈 靈 靈靈 靈靈 靈靈
靈靈靈 靈靈 靈 靈 靈 靈靈 靈靈 靈 靈靈
靈靈靈靈靈 靈 靈靈 靈靈 靈 靈 靈靈 靈靈
靈靈靈 靈 靈 靈靈靈靈 靈靈靈靈 靈靈 靈 靈
靈 靈 靈 靈靈靈 靈靈 靈 靈 靈 靈 靈靈靈靈靈
靈靈 靈 靈 靈 靈 靈靈靈 靈靈靈 靈靈
靈 靈靈靈靈靈靈靈 靈 靈靈 靈靈靈靈 靈 靈靈靈 靈
靈 靈 靈靈靈靈 靈靈 靈靈 靈 靈靈 靈
靈靈 靈靈靈靈 靈靈 靈靈 靈靈靈 靈 靈 靈 靈靈靈
靈 靈靈靈靈靈 靈 靈 靈靈 靈靈 靈 靈 靈 靈
靈靈靈靈靈靈靈 靈 靈 靈 靈靈靈靈 靈靈 靈
靈 靈 靈 靈 靈 靈 靈 靈靈
靈 靈 靈靈靈靈 靈 靈靈靈靈靈 靈靈 靈 靈 靈靈
靈 靈 靈 靈 靈 靈 靈靈 靈靈靈靈靈
靈 靈 靈 靈 靈靈 靈 靈靈靈靈 靈靈靈 靈靈靈靈靈靈靈 靈
靈靈 靈 靈 靈 靈 靈靈靈靈 靈 靈靈靈
靈靈靈靈靈靈靈 靈靈靈 靈 靈 靈靈 靈 靈 靈靈
靈 靈 靈 靈 靈靈靈 靈靈靈靈靈 靈靈靈靈
靈 靈靈靈 靈 靈靈 靈 靈 靈 靈靈靈靈靈 靈
靈 靈靈靈 靈 靈 靈靈靈 靈靈靈靈靈靈 靈靈靈
靈 靈靈靈 靈 靈靈 靈靈靈 靈 靈 靈 靈
靈 靈 靈靈 靈 靈靈靈靈靈靈 靈 靈靈靈靈
靈靈靈靈靈靈靈 靈靈靈靈靈 靈 靈 靈靈 靈靈靈靈 靈
丁度よくなります。
しかも、この方法意外と馬鹿にできなくてそのままカメラで読めます。
文字なので扱いも楽で、さっと作業に戻れるのでおすすめです。
置換をまとめて簡単にvimscriptに書けば、すぐにパターンを確認することができます。
command! QRencode call QR_encoder()
command! QRdecode call QR_decoder()
function! QR_encoder()
%s/x/靈/g
%s/_/ /g
%s/?/?/g
endfunction
function! QR_decoder()
%s/靈/x/g
%s/ /_/g
%s/?/?/g
endfunction0
ちなみに画数が多くて四角っぽければどんな漢字でもOKです。ただし、記号の■は大きさ不足でカメラが読み込みませんし、見づらいです。
ちなみに
もう既に完成していてパターンを見たいだけなら、さっきのツールを使って、
# ./sqrd.py -v QR.txt
これだけで簡単に見られます。
こっちの方が綺麗なのでいちいち確認しないならこっちの方がおすすめです。
手打ちしながらちょっとずつ全景を確認するときには僕の方法も思い出してあげてください。
最後に
技術的にはひどいものですが、やり方的には最高なので思わず書いてみました。
QRを手打ちするのは辛いので、マウスとかでポチポチ入力できるツールでも作ろうかなと思います。
というか、画像認識でそのまま補完して読み込めるツールも今の自分の技術で十分作れそうです。
CTFで時間がとられやすいところなので、便利なツールで対抗していきたいと思います。