アオカケスの鳥かご

日々の出来事を綴っていきたい

MaidakeCTF2019 writeup QR編

Web問題のwriteupです。

A little missing QR[100]

ちょっと欠けているQRコードです。

f:id:aokakes:20190924154345p:plain

見ての通り角の四角部分が欠けているだけなので、良い感じに書き加えてあげます。

f:id:aokakes:20190924154430p:plain

あとは完成したQRコードを読み込むだけです。


Flag:MaidakeCTF{restoring_qr_code_corners_is_easy}

white or black[200]

黒か白か。

csvファイルの中身は0と1だけで構成されています。
ジャンルがQRなので察しが付くかと思いますが、0と1でQRコードを表現しています。

遠目に見るとQRコードが浮き上がってくるのではないでしょうか。
f:id:aokakes:20190924154838p:plain

正攻法としてはcsvファイルを読み込んで画像にすることですが、ほかにも方法はあります。
たとえばExcelなどの条件付き書式などで0を白に、1を黒にしたりするとか。


Flag:MaidakeCTF{qr_codes_can_be_represented_as_0_and_1}

Three codes[300]

3つのコード。
気持ちの悪いQRコードが渡されます。

f:id:aokakes:20190924155250p:plain

私たちが普段よく見るQRコードは黒白のものですが、別に黒でないといけない理由なんてありません。

改めてQRコードを確認してみると、角が黒くなっています。どのQRコードにも絶対に必要な部分です。
しかし、ほかの部分は赤だったり緑だったり青だったり...中途半端な色もあるようです。

この時点で察しの良い方はこの中に3つのQRコードが存在していることが分かるかと思います。
つまり、赤のQRコード、緑のQRコード、青のQRコードです。


良い感じにプログラムを書いていきます。

実行すると3つのQRコードが出てきます。
f:id:aokakes:20190924160444p:plain
f:id:aokakes:20190924160454p:plain
f:id:aokakes:20190924160456p:plain

これらを読み込むとFlagが3つに分けてあるので繋げればFlagの完成です。
f:id:aokakes:20190924160521p:plain


Flag:MaidakeCTF{Images_can_be_represented_in_RGB}

Barely[300]

ギリギリ。

弊研究室の写真です。
f:id:aokakes:20190924160746j:plain

モニターにとても怪しい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コードでパズルを作ってみました。

スライドパズルになっていて実際に動かすことができます。
f:id:aokakes:20190926220037p:plain

空白を右下に持ってきた状態で送信ボタンを押すと右下が埋まります。
f:id:aokakes:20190926220122p:plain

ようはこのパズルを解けばいいのですが、運が悪いと解けないことがあります。
とは言うものの、所詮javascriptCSSで動いているのでデベロッパーツールなどで無理やり場所を変えることが可能です。


四隅は確定しているので実質5!通りです。
QRコードを知り尽くしている人は必然的にパズルが完成するのかもしれません。


3×3程度なら自力でも解けますが、2ndと3rdが控えているのでプログラムを書いてしまいます。
パズルについてはstyle.cssで各ファイル名が分かるのでダウンロードが可能です。

というわけで四隅以外を総当りするプログラムです。

120通りぐらいならすぐ終わります。
f:id:aokakes:20190926221036p:plain


Flag:MaidakeCTF{QR_code_slide_puzzles_are_very_very_difficult}

QR Puzzle 2nd[400]

2ndは4×4です。

マスの数は増えましたが余白があるので実は3×3のやつより簡単です。
f:id:aokakes:20190926221150p:plain

よく見るとマスから微妙にはみ出ていて綺麗に分割されていないので、真ん中の4マス以外は確定できます。
つまり総当りは4!で24通りしかありません。

なんなら誤り訂正で頑張って普通に解けたりします。


しかしここではプログラムで解きます。

f:id:aokakes:20190926222200p:plain


Flag:MaidakeCTF{It_becomes_more_difficult_when_it_comes_to_16_slide_puzzles}

QR Puzzle 3rd[500]

もはや面倒くさいだけの5×5です。
f:id:aokakes:20190926222416p:plain

真ん中の9マスのうち、中心は確定できるので8!=40320通りになります。
プログラムはこんな感じ。

毎回画像を作ってQRコードの読み取りまで行うので4万回でもそれなりに時間がかかります。
f:id:aokakes:20190926223940p:plain

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です。
f:id:aokakes:20190926224138p:plain

余白もあるのでパズルを解くのはデベロッパーツールも使えば楽勝です。
デベロッパーツールを使って解いた人は気付いたかと思いますが、パズルが左上から右下にかけてちゃんと番号順になっています。
f:id:aokakes:20190926224447p:plain

このQRコードを読み取ると以下のようになっています。

4910b4bb34215367afd5e281954b1f6d

謎の文字列ですが、察する人は察するのかもしれません。
実はこれ、いつかのSECCONで出題されたQubic Rubeのパクリです。
qiita.com

おそらくこの問題を知っていた人は読み取ったQRコードが次の問題のURLだと気付いたのではないでしょうか。

URLに「4910b4bb34215367afd5e281954b1f6d」を付け加えてアクセスしてみると次のQR Puzzleが現れます。
f:id:aokakes:20190926225137p:plain

何回も手で解くのは億劫なのでプログラムを書きます。

最初に手で解いたのも含めて50回解くとFlagが得られます。
f:id:aokakes:20190926225426p:plain


Flag:MaidakeCTF{I_don't_know_why_I_made_many_QR_code_problem}

まとめ

本当になんでこんなにQRコードの問題を作ったのでしょうか。
でもQRコードって問題を作りやすいんですよね。

どの問題も頑張れば手で解けるので点数稼ぎしやすかったのではないでしょうか。