MaidakeCTF2019 writeup QR編
Web問題のwriteupです。
- A little missing QR[100]
- white or black[200]
- Three codes[300]
- Barely[300]
- QR Puzzle[300]
- QR Puzzle 2nd[400]
- QR Puzzle 3rd[500]
- QR Puzzle Final[600]
- まとめ
A little missing QR[100]
ちょっと欠けているQRコードです。
見ての通り角の四角部分が欠けているだけなので、良い感じに書き加えてあげます。
あとは完成したQRコードを読み込むだけです。
Flag:MaidakeCTF{restoring_qr_code_corners_is_easy}
white or black[200]
黒か白か。
csvファイルの中身は0と1だけで構成されています。
ジャンルがQRなので察しが付くかと思いますが、0と1でQRコードを表現しています。
遠目に見るとQRコードが浮き上がってくるのではないでしょうか。
正攻法としてはcsvファイルを読み込んで画像にすることですが、ほかにも方法はあります。
たとえばExcelなどの条件付き書式などで0を白に、1を黒にしたりするとか。
Flag:MaidakeCTF{qr_codes_can_be_represented_as_0_and_1}
Three codes[300]
3つのコード。
気持ちの悪いQRコードが渡されます。
私たちが普段よく見るQRコードは黒白のものですが、別に黒でないといけない理由なんてありません。
改めてQRコードを確認してみると、角が黒くなっています。どのQRコードにも絶対に必要な部分です。
しかし、ほかの部分は赤だったり緑だったり青だったり...中途半端な色もあるようです。
この時点で察しの良い方はこの中に3つのQRコードが存在していることが分かるかと思います。
つまり、赤のQRコード、緑のQRコード、青のQRコードです。
良い感じにプログラムを書いていきます。
実行すると3つのQRコードが出てきます。
これらを読み込むとFlagが3つに分けてあるので繋げればFlagの完成です。
Flag:MaidakeCTF{Images_can_be_represented_in_RGB}
Barely[300]
ギリギリ。
弊研究室の写真です。
モニターにとても怪しいQRコードが表示されていますが、右下がノートPCに隠れているためギリギリ読めません。
拡大して頑張って読もうとしても、大抵のアプリはQRコードを読み取ることができません。
なぜなら読み取れないように何度も撮り直したからです。私が。
しかし、そんな状況でも問題なく読み取ってくれるアプリもあります。たとえばDENSOとか。
iPhone
「公式QRコードリーダー“Q”」をApp Storeで
Android
https://play.google.com/store/apps/details?id=com.arara.q
QRコードはデンソーウェーブが1994年に開発したもので、言わばQRコードの元祖なわけです。
QRコードがちょっと欠けていても問題なく読み取ることができます。
実は普段から上記のアプリを使っている人は秒で解ける問題でした。
Flag:MaidakeCTF{Lock_it_when_you_leave_your_computer}
※席を離れるときはPCをロックしましょう
QR Puzzle[300]
QRコードでパズルを作ってみました。
スライドパズルになっていて実際に動かすことができます。
空白を右下に持ってきた状態で送信ボタンを押すと右下が埋まります。
ようはこのパズルを解けばいいのですが、運が悪いと解けないことがあります。
とは言うものの、所詮javascriptとCSSで動いているのでデベロッパーツールなどで無理やり場所を変えることが可能です。
四隅は確定しているので実質5!通りです。
QRコードを知り尽くしている人は必然的にパズルが完成するのかもしれません。
3×3程度なら自力でも解けますが、2ndと3rdが控えているのでプログラムを書いてしまいます。
パズルについてはstyle.cssで各ファイル名が分かるのでダウンロードが可能です。
というわけで四隅以外を総当りするプログラムです。
120通りぐらいならすぐ終わります。
Flag:MaidakeCTF{QR_code_slide_puzzles_are_very_very_difficult}
QR Puzzle 2nd[400]
2ndは4×4です。
マスの数は増えましたが余白があるので実は3×3のやつより簡単です。
よく見るとマスから微妙にはみ出ていて綺麗に分割されていないので、真ん中の4マス以外は確定できます。
つまり総当りは4!で24通りしかありません。
なんなら誤り訂正で頑張って普通に解けたりします。
しかしここではプログラムで解きます。
Flag:MaidakeCTF{It_becomes_more_difficult_when_it_comes_to_16_slide_puzzles}
QR Puzzle 3rd[500]
もはや面倒くさいだけの5×5です。
真ん中の9マスのうち、中心は確定できるので8!=40320通りになります。
プログラムはこんな感じ。
毎回画像を作ってQRコードの読み取りまで行うので4万回でもそれなりに時間がかかります。
1分半弱かかりました。
Flag:MaidakeCTF{It_can_no_longer_be_solved_manually_so_we_should_rely_on_machine_power}
QR Puzzle Final[600]
本当の最後のQR Puzzleは3×3です。
余白もあるのでパズルを解くのはデベロッパーツールも使えば楽勝です。
デベロッパーツールを使って解いた人は気付いたかと思いますが、パズルが左上から右下にかけてちゃんと番号順になっています。
このQRコードを読み取ると以下のようになっています。
4910b4bb34215367afd5e281954b1f6d
謎の文字列ですが、察する人は察するのかもしれません。
実はこれ、いつかのSECCONで出題されたQubic Rubeのパクリです。
qiita.com
おそらくこの問題を知っていた人は読み取ったQRコードが次の問題のURLだと気付いたのではないでしょうか。
URLに「4910b4bb34215367afd5e281954b1f6d」を付け加えてアクセスしてみると次のQR Puzzleが現れます。
何回も手で解くのは億劫なのでプログラムを書きます。
最初に手で解いたのも含めて50回解くとFlagが得られます。
Flag:MaidakeCTF{I_don't_know_why_I_made_many_QR_code_problem}