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

WTF!?

オンサイトCTFのWriteupとか書いてく.

TWCTFで作問したやつの解説のようなもの

TWCTFで作問したやつの解説のようなものです.

github.com

の公開に合わせて投稿しました.

解けなかった方はこれとGitHubのsolverを参考にして解いていただけたら嬉しいです.

あと今のところUnpackGoとSteganographerのWriteupが見つかっていないので見つけた若しくは書いたという方が居らっしゃいましたら教えていただけると嬉しいです.

解いたチームが多い順に解説していきます.

ReverseBox (Reversing, Warmup 50)

$ ./reverse_box ${FLAG}
95eeaf95ef94234999582f722f492f72b19a7aaf72e6e776b57aee722fe77ab5ad9aaeb156729676ae7a236d99b1df4a
reverse_box.7z

Solved: 148 teams

解説のようなもの

Warmupの中ではdeadnasに次いで2番目に解けた人が少なかったです.

こんな感じで,作り始めるまで一番時間がかかり,

作り始めて完成するまでは一番早かった問題です.

ツイートにも書いてあるように中身はランダムに初期値(?)を選択した

AES(Rijndael)のS-BOX(と言っていいのか分からない変な変換テーブル)です.

シードにあたるものが256通りしか無いのでどうにでもなるでしょう.

煮るなり焼くなり好きにしてあげてください.

Cocktail (Misc 200pts)

Is the order a cocktail??
cocktail.7z

Solved: 27 teams

解説のようなm(ry

自分が作った問題の中で唯一Reversingではないものです.

9人の声とホワイトノイズを異なる比率で混ぜた音源が10個用意されていて,

フラグが読み上げられていくのでどうにかして聞き取ってねという問題です.

これは最初作ったときはホワイトノイズが乗っておらず人の声も5つしかありませんでした.

検証してもらったら素でも4人まで聞き取れたらしかったので,声の数を増やしてホワイトノイズを乗っけることで対処しました.

この問題のモデルとしては人混みの中で盗聴するにはどうすればいいかな的なものを想定しながら作っていました.

作り方が適当だったのでホワイトノイズの大きさから音量の比率を定めた(ランダムに生成された)行列の逆行列を求めるという解き方が生まれてしまいました.

個人的にこの解き方は面白かったので良いと思っています.

この解き方をしたチームが殆どで,想定解法で解いたチームは居なさそうという気はしています.

想定解法のヒントとしては

  • 混ざった音源が混ざる前の音源の数だけ存在する
  • カクテルパーティ

といったところでしょうか.

まあリスニングの練習にでも使ってやってください.

Cello Rule (Reversing 250pts)

cello_rule.7z

Solved: 12 teams

解説のようn(ry

いきなりSolvedが減りましたね.

日本のチームではkatagaitaiのbataさんとdodododoのakiymさんが解いて下さいました. 本当に有難うございます.

作る経緯としては↓こんな感じです.

Celloっていう頭おかしいライブラリ(変数をvarで宣言したりforeachが使えたり簡易GCが実装されてたり)があって,

色々作ってバイナリで見てみると結構面白かったのでこれでrev問作りたいなっていうところから始まりました.

あとセル・オートマトンを絡めた何かも作りたいと思っていたので,

この二つをくっつけた結果,あのよくわからないバイナリが出来上がりました.

解くときは,セル・オートマトン使った乱数生成あたりを調べたら参考になると思います.

UnpackGo (Reversing 350pts)

unpack_go.7z

Solved: 3 teams

解s(ry

更にSolvedが減りました.

解いたのは毎度お馴染みPPPとangrで解いたのかもしれない(無いな)Shellphishとルーマニアキチガイ集団PwnThyBytesです.

これは名前からも分かるようにunpack meとgolang問をくっつけた問題です.

動機としてはgolangGUIのプログラム作りたかったというだけです.

綺麗にunpackさえ出来ればシンボルが残ってるgolang問なので比較的解きやすいほうかな(Solvedが10チームぐらい出る)と思っていたのですが,意外と解かれませんでした.

Goという文字が忌避を誘ってしまったのかもしれないですね.

解く為のヒントとしては

  • パッカーはUPXを少しだけ書き換えたもの
  • アンパックしたら処理を2つ取り除くだけでフラグが得られる

と言ったところです.

シンボル情報を参考にしながらできるだけ読み飛ばせれば解けると思います.

解けた時のインパクトは良い問題なので解けたら楽しいかも.

Steganographer (Reversing 400pts)

steganographer.7z

Solved: 2 teams

k(ry

解いたチームは案の定のPPPと台湾の変態集団217です.

作問した中で一番のお気に入りの問題です.

これは素のcのプログラムをコンパイルしてるだけ(最適化はかかっています)なのでCello RuleとUnpackGoに比べたら解析はやりやすいと思います.

使われている技術としては電子透かしとかでよく使われているやつです.

これが解ければksnの人間問題も解けるかも(?)

これだけヒント出せば後は気合で解けるでしょう.

(個人的には)とても面白い問題なので是非解いて下さい.

まとめ

TWCTFに参加して下さった皆様本当にありがとうございます!!!

今回のTWCTFのvotingのレートが良いのはインフラが安定していたことや良質なCrypto問などのおかげであって,自分の問題は評価に繋げられていないと思っています.

次回開けたらもっと良い問題を出してTWCTF全体の評価に繋げられるよう,

今のうちにコツコツと作問していく所存です.