読者です 読者をやめる 読者になる 読者になる

iwasiblog

イワシブログ - Activity log of an iwasi -

SECCON 2015 Online CTF Writeup

SECCON 2015 Online CTFに参加したので、解いた問題のwriteup.
以下の問題について書いた.

  • Agenda
    • SECCON WARS 2015 (Stegano 100pts)
    • Reverse-Engineering Android APK 1 (Binary 100pts)
    • Steganography 1 (Stegano 100pts)
    • Steganography 2 (Stegano 100pts)
    • Steganography 3 (Stegano 100pts)
    • Last Challenge (Thank you for playing) (Exercises 50pts)

SECCON WARS 2015 (Stegano 100pts)

https://youtu.be/8SFsln4VyEk

Youtubeにアップロードされている動画からflagを探す.
動画を見ると,去年も見たようなSTAR WARS風の動画が,QRコードでマスクされているものだった.
瞬時に方針が定まる.
※過去にTDUCTFで似た問題を作成したから⇒TDU CTF:運営として参加しました
当時作ったソルバを流用(先述の記事に乗ってるやつ).
前を遮るSECCONの文字が落ち着いた,映像の中央部を1000フレームほど切り出して処理する.
一度でも閾値を超えて明るくなったピクセルを白,その他を黒といった具合に処理すると,ぼやけた感じのQRコードが現れるので.向きや色の調整をして読み取るとflag.

f:id:kuroiwasi:20151206190114j:plain

Flag : SECCON{TH3F0RC3AVVAK3N53P7}

Reverse-Engineering Android APK 1 (Binary 100pts)

じゃんけんに1000回連続で勝ち続けよ

rps.apk

Androidのアプリが降ってくるので,即デコンパイルWebサービスに投げる.
javaのコードにデコンパイルされるので,処理を追う.
じゃんけんに勝つとカウントアップされ,1000回連続で勝利した時点で特定の処理が行われてflagが出力される仕組みだった.
flag生成処理の途中にDLLの関数を呼んでいる部分がある.
f:id:kuroiwasi:20151206185814j:plain
幸いなことに,各種プラットフォーム用のライブラリが用意されていたので,IDAFreeで開いてみた.
f:id:kuroiwasi:20151206185822j:plain
ただ単に7を返すだけの関数であった.
よって,(1000+7)*107の結果がflagである.

Flag : SECCON{107749}

Steganography 1 (Stegano 100pts)

Find image files in the file
MrFusion.gpjb
Please input flag like this format-->SECCON{*** ** **** ****}
There is no bonus in this question

MrFusionなるGIFファイルをもらう.
MrFusionとは映画BTTFに登場する,あらゆるごみから電力を作り出す融合炉のこと.
きっといろんなものが混ざってるだろうなーと想像してバイナリエディタへ投入.
予想通り,様々なファイルが混ざっていた.
画像ファイルと思わしき部分をいくつか取り出してみると,flagの一部の画像だった.画像を取り出すのにはスペシャねこまんま57号が便利.
緑色の7セグメントLED,日付のような文字列,MrFusion...
これらのヒントがあれば,flagすべての文字を見つける必要はもはやない.
BTTFで彼らが行った未来の(現実では過去になってしまったが)日時は,2015年10月21日午後7時28分である.
これを,タイムサーキットの表示と同じように,flagのフォーマットに打ち込んでやればOK.

f:id:kuroiwasi:20151206182441j:plain
(2が見つからなかった...)

Flag : SECCON{OCT 21 2015 0728}

Steganography 2 (Stegano 100pts)

ファイルからflagをさがせ.
sunrise.zip

zipでpngの写真がもらえる.
Exif情報は残っているが,特にflagのような情報はなし.
ただ,バイナリエディタに突っ込むと,写真には見られないような規則的なパターンが見つかった.
f:id:kuroiwasi:20151206183527j:plain
はじめは,何か別のバイナリが埋め込まれているのではと思ったが,該当するパターンのものは覚えがないし,ググっても出て来ない.
しばらく悩んでいたが,最後のIDATチャンクだけが長く,本来の写真の末尾に余計なデータがくっついていること,規則的なパターンは,色の変化のない画像をpngにした時にもみられることを考えて,写真の領域外にflagがあるとにらんだ.
IHDRの縦の長さを書き換えると,flagが出現した.
f:id:kuroiwasi:20151207123610j:plain

f:id:kuroiwasi:20151206183336j:plain

Flag : SECCON{Metadata_modification_is_used_for_information_hiding.}

Steganography 3 (Stegano 100pts)

デスクトップのキャプチャに成功した!
秘密のメッセージを読み取ってほしい
desktop_capture.png

バイナリエディタとブラウザとmspaintを開いたデスクトップのスクショがもらえる.
バイナリエディタでは,実行ファイル(ELF)と思わしきものが開かれている.
ブラウザに表示されているWebページには,以下のような見出しがついている.
“This problem can be solved by pre-school children....(略)”
文字を記号として認識せず,ただの図形として見ることで,幼稚園児のほうが解きやすいといわれる問題がある.
特に,数字の丸の部分(6の下半分とか0とか)の数を数式のように表した問題はよく見かける.
そして,デスクトップに開かれたmspaint...
これは,文字の丸く囲まれた領域の並びがflagを形作るに違いない.
mspaintで,バイナリエディタの白い部分を塗りつぶせばflagが手に入る.

f:id:kuroiwasi:20151206184248j:plain

Flag : SECCON{the_hidden_message_ever}

Last Challenge (Thank you for playing) (Exercises 50pts)

ex1
Cipher:PXFR}QIVTMSZCNDKUWAGJB{LHYEO
Plain: ABCDEFGHIJKLMNOPQRSTUVWXYZ{}

ex2
Cipher:EV}ZZD{DWZRA}FFDNFGQO
Plain: {HELLOWORLDSECCONCTF}

quiz
Cipher:A}FFDNEA}}HDJN}LGH}PWO
Plain: ??????????????????????

There is no bonus in this question

換字式暗号である.ex1が対応表そのものなので,
それに従って変換すればflag

Flag : SECCON{SEEYOUNEXTYEAR}