2020 1/21(火) 1:00 ~ 1/25(土) 16:59 JST に開催された、Rice Tea Cat Panda CTF の Binary/Excecutable ジャンルのwriteup。
Excecutableが後で付け足されたような気がする…。あまりバイナリ解析関係ない問題ばかりだったのでジャンルに付け足したのかな…?
writeup一覧・戦績はこちら
[Binary] print(f) to Pay Respects (100pt)
Lulu recently began to collect rice granules, she needs so many! (like over 9999) Jake says it might be a cure to Lulu's disease. Go help her get enough by throwing rice at the portal, print(f) to pay respects.
Hint
Careful not to throw rice in the wrong direction, just thow it close by (not into) the portal - Jake can pick it up later.
Portal.zip
が配布されます。
$ unzip Portal.zip Archive: Portal.zip inflating: Portal.deps.json inflating: Portal.dll inflating: Portal.exe inflating: Portal.pdb inflating: Portal.runtimeconfig.json
exeファイルのようです。
競技中はghidraで解析してみたりしたけども、どうにも情報量が多すぎて無理そうだったのでギブアップしました。
すべてのファイルをstrings
コマンドにかけてみたりはしていたのですが、他のwriteupを読むと、バイナリエディタで開くとflagが見えた模様。一文字飛ばしとかで書いてあると、strings
コマンドじゃ見えてこないんだなぁ。
バイナリエディタでとりあえず開いて眺めてみるのも癖にしたい。
rtcp{s0m3t1m35_0n1y_s0m3tImEz_sn^k3z_ar3_u5EfuL}
[Binary] Tea Clicker (150pt)
It's not too far back in my memory when cookie clickers were all the rage. But this new one with tea and cats has such great art and themes, I'm hooked! Unfortunately, the only reward is so many clicks away, and even if I spend double the time, I still can't get it!
Hint
https://github.com/JEF1056/riceteacatpanda/raw/master/Tea Clicker (150)/Tea Clicker.zip
リンク先からTea Clicker.zip
がDLできます。解凍してみると
$ unzip Tea\ Clicker.zip Archive: Tea Clicker.zip creating: x86_64-darwin/Tea Clicker.app/ creating: x86_64-darwin/Tea Clicker.app/Contents/ inflating: x86_64-darwin/Tea Clicker.app/Contents/Info.plist creating: x86_64-darwin/Tea Clicker.app/Contents/MacOS/ inflating: x86_64-darwin/Tea Clicker.app/Contents/MacOS/TeaClicker creating: x86_64-darwin/Tea Clicker.app/Contents/Resources/ inflating: x86_64-darwin/Tea Clicker.app/Contents/Resources/game.arcd inflating: x86_64-darwin/Tea Clicker.app/Contents/Resources/game.arci inflating: x86_64-darwin/Tea Clicker.app/Contents/Resources/game.dmanifest inflating: x86_64-darwin/Tea Clicker.app/Contents/Resources/game.projectc extracting: x86_64-darwin/Tea Clicker.app/Contents/Resources/game.public.der creating: x86_64-linux/Tea Clicker/ inflating: x86_64-linux/Tea Clicker/game.arcd inflating: x86_64-linux/Tea Clicker/game.arci inflating: x86_64-linux/Tea Clicker/game.dmanifest inflating: x86_64-linux/Tea Clicker/game.projectc extracting: x86_64-linux/Tea Clicker/game.public.der inflating: x86_64-linux/Tea Clicker/TeaClicker.x86_64 creating: x86_64-win32/Tea Clicker/ inflating: x86_64-win32/Tea Clicker/game.arcd inflating: x86_64-win32/Tea Clicker/game.arci inflating: x86_64-win32/Tea Clicker/game.dmanifest inflating: x86_64-win32/Tea Clicker/game.projectc extracting: x86_64-win32/Tea Clicker/game.public.der inflating: x86_64-win32/Tea Clicker/OpenAL32.dll inflating: x86_64-win32/Tea Clicker/TeaClicker.exe inflating: x86_64-win32/Tea Clicker/wrap_oal.dll
幾つかのアーキテクチャ用に用意されているみたいなので、linuxのものを見てみます。
$ file TeaClicker.x86_64 TeaClicker.x86_64: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/l, for GNU/Linux 2.6.32, BuildID[sha1]=19fd7f45ad869d5779bd097b704b20c07ea396b3, stripped
実行ファイルがありました。実行してみます。
$ ./TeaClicker.x86_64
こんなゲームが始まります。ティーカップをクリックすると、Scoreが1ずつ増えていくので、999999999999回クリックすれば良さそう…。
gdbで動かしながら999999999999 = 0xE8D4A50FFF
が格納されている値を書き換えるのしたかったけど、やり方がよく分からなかった。
writeupを見てみると、日本だと「うさみみハリケーン」、海外だと「CheatEngine」を使っているのが見つかった。うさみみハリケーンもよくwriteupで見かけるので気になりますが、まずは王道っぽいCheatEngineを使ってみることにします。
今回はMac用の実行ファイルも配布されている、かつCheatEngineのMac版もあるので、Macでやってみました。
CheatEngineを立ち上げます。
実行ファイル(Tea Clicker)を立ち上げます。アプリの名前はunnamed
になっています。
CheatEngine側で、今立ち上げたアプリを特定、開きます。
書き換えたい値の変化をたどることで、対象のアドレスを特定・値を書き換えるのがCheatEngineの基本の使い方のよう。ちょっとお茶をクリックして値を5まで進めておいて、「First Scan」を実施します。型は4byteではないだろうけど(999999999なので)不明なので、Allを選択しておきます。
沢山候補のアドレスが出てきました。
また数回お茶をclickして7まで値を進めてから、「Next Scan」をします。すると、5から7に値が変化したアドレスがまたズラーッと出てきます。再度、9まで進めて同様に Next Scan をすると、候補のアドレスが一つになりました。
このアドレスをダブルクリックしてアドレスリストに登録し、ここで値を999999999999に書き換えると、フラグが出ました!
wow! I'm not a gamer! I'm just a cheater!!! :P
[Binary] Work In Progress (400pt)
I was asked to beta-test this game, but it's so incomplete, it's kind of doesn't even have a goal... The developer said there's a flag, though, so I guess I'll just leave you to it!
Hint
https://github.com/JEF1056/riceteacatpanda/tree/master/Work In Progress (400)
Have you ever played Skyrim? Well, you don't need a horse for this one.
リンク先には、先程と同じく幾つかのアーキテクチャ用にデータが用意されていましたが、Mac版が動かなかったのでlinux版を落としました。
起動してみると、マリオみたいなゲームが始まった。
でも敵に攻撃もできないし、敵も攻撃してこない。問題文にある通り、ゴールが見えない。
問題文のbeta-test
というのが気になります。デバッグモード的な扱いがあるのかも。
と、深く追わずに終わってしまいました。
再度競技期間終了後に立ち上げていじってみると、Start地点から逆走できます…。
逆走した先には高い壁があり、なんとかジャンプでよじ登っていきます。
頂点まで行ってもなにもないので更に逆走して落ちてみるとGameOver?なのか画面が真っ黒に。右上にFlagが出ました…。Binary問…?
[Binary] Snakes (500pt)
♪ Should've known,
Should've known,
Should've known,
Should've known -
Snakes don't have no shoulders to lean on
They just need a prey they can feed on
They get some points so they can drag them home
original cold-blood killer
never knew something so wicked, oh
Come and get your points where they aren't supposed to go.
Hints
https://github.com/JEF1056/riceteacatpanda/tree/master/Snakes (500)
リンク先からは
- advanced_scores.txt
- basic_scores.txt
- snake.exe
がDLできます。txtの方は2つとも
unnamed 0 unnamed 0 unnamed 0 unnamed 0 unnamed 0
と書いてあるだけ。
ここを書き換えると、メニュー3(ランキング表示)機能で書き換えたものが表示されます。
snale.exe
を実行すると、普通のスネークゲームが楽しめます。
メニューは
- Basic Play
- Advanced Play
- ランキングを見る
って感じです。Basic/Advancedを一通り遊んでみましたが、特に気になることはなし。Advanceは、GameOverになったあとに「Replay」を選択すると、障害物が増えていく仕組みでした。この障害物がどんどん増えていったらFlagの文字列になるのかな?と思ったんですが、そんなことはなく。一定回数GameOverになると、強制的にアプリが終了してしまいました。
問題文の Come and get your points where they aren't supposed to go
から、蛇が壁を突き抜けたり、変なところに入れるのかと思ったのですが、特にそういった穴は見つけられませんでした。
競技終了後、他のwriteupを読んでみると、Exception
を起こすとflagのalertがあがる仕組みだったらしい。上の文章から推測できる範囲内か…。
最初のメニュー選択時に0
を入れるか、配布されたランキング用のファイルを消してランキングメニューを開くとFlagが出てきました。
全体的に実行ファイル関連ではあるけど、picoCTFのBinary分野とは全然違ったなぁ…。