mazinlabsのブログ

RubyとかCloudとかその辺の記事を書いたり書かなかったり

SECCON 2014 オンライン予選(英語)32時間 CTFに参加してました

12/6-7に行われていた32時間耐久SECCON 2014オンライン予選(英語)にctpmのメンバとして参加してました。

といいながら、子供の相手した李家の掃除とかしてからの参加だったので、1日目11時間ぐらいと2日目5時間ぐらいの計16時間ぐらいの参加でした。(上:瞬間最大風速、下:最終結果)

f:id:mazinlabs:20141211105128j:plain

f:id:mazinlabs:20141211105133p:plain

瞬間最大風速では全体3位、国内1位だったものの後半伸び悩んでズルズルとさがり、結果として全体25位(全802チーム中)、国内6位でした。 他のチームメンバに頑張ってもらいましたが、QRコード職人としての面目躍如の2問解いたのでwriteup書いておきます。

QR (Easy)

  • 問題文

    世界一面白いジョーク: 昨晩フランネルケーキを食べる夢を見たんだけど、 朝起きたらQRコードが半分なくなってたんだ!

というわけで、去年のオンライン予選よろしく半分になったQRコードの画像があるので復元開始。

このへんとか

Format and Version Information - QR Code Tutorial

このへんをみてフォーマットとタイミングパターンを補ってあげる。

Format and Version String Tables - QR Code Tutorial

分かるのはECC LevelがHでマスクパターンが(row) mod 2 == 0。 で、残ってるデータはどこまであるのかを確認してみると、データ部分はまるっと残っているらしい。

f:id:mazinlabs:20141211110206p:plain

ならこれ以上復元しなくても問題ないやと、あとはWindowsの人に投げてQRコードを読み込んでもらっておしまい。

※最初復元して読み込んだのに通らなかったけど黒塗りの漏れがあったので修正したら通った。

BBQR

  • 問題文

    Let's enjoy BBQR!

というわけで、今度こそ去年と同じ焼けたQRコード。 多分このサイトの最後の一文原因じゃないかなと思ったり。。。

SECCON CTF 2013 online予選 forensics 400 : Eleclog.

今度はQRコードの右半分が消えているので、つまりデータ領域がないので単純に復元はできない。

今回もECC LevelはHだが、マスクパターンは(row + column) mod 2 == 0

一応復元したQRコードにレイヤを重ねてみると幸いにパリティ部分はまるっと残っているのでそちらから復元しろということなのかなと思う。

f:id:mazinlabs:20141211111713p:plain

調べるとリード・ソロモン符号の複合とかになってちんぷんかんぷん。

リード・ソロモン符号 - Wikipedia

いろいろ考えてもできそうになし時間もないのでどうしようかなと考えた結果、Keyは英数字で文字数はQR(Easy)だと勝手に決めつけて、そちらからデータを引っ張ってくれば複合できるのではないかと思い試してみる。

ただ、単純にコピペだとダメそうな気がしたのでQR(Easy)のマスク(row) mod 2 == 0を外したものを、今回のQRコードのマスクである(row + column) mod 2 == 0に再度マスキングしておく。

f:id:mazinlabs:20141211112519p:plain

これをWindowsの人に読み込んでもらったらKeyが出て無事にSubmit。

というわけで、今度こそQRコードは煮たり焼いたり食べたりしないでくださいね!

結局、無事にQR担当のお役目は務めたもののそれ以外はHeartbleed問題用の環境をCloudnの上に構築した程度。 あんまり役に立てなかったのでチームの弱い部分を埋めるスキルを身につけるかな・・・