好奇心の足跡

飽きっぽくすぐ他のことをしてしまうので、忘れないため・形にして頭に残すための備忘録。

Rice Tea Cat Panda CTF writeup [Binary/Excecutable]

2020 1/21(火) 1:00 ~ 1/25(土) 16:59 JST に開催された、Rice Tea Cat Panda CTF の Binary/Excecutable ジャンルのwriteup。

Excecutableが後で付け足されたような気がする…。あまりバイナリ解析関係ない問題ばかりだったのでジャンルに付け足したのかな…?

writeup一覧・戦績はこちら

kusuwada.hatenablog.com

[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コマンドじゃ見えてこないんだなぁ。

f:id:kusuwada:20200204155049p:plain

バイナリエディタでとりあえず開いて眺めてみるのも癖にしたい。

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

f:id:kusuwada:20200204155122p:plain

こんなゲームが始まります。ティーカップをクリックすると、Scoreが1ずつ増えていくので、999999999999回クリックすれば良さそう…。

gdbで動かしながら999999999999 = 0xE8D4A50FFFが格納されている値を書き換えるのしたかったけど、やり方がよく分からなかった。

writeupを見てみると、日本だと「うさみみハリケーン」、海外だと「CheatEngine」を使っているのが見つかった。うさみみハリケーンもよくwriteupで見かけるので気になりますが、まずは王道っぽいCheatEngineを使ってみることにします。

今回はMac用の実行ファイルも配布されている、かつCheatEngineのMac版もあるので、Macでやってみました。

CheatEngineを立ち上げます。

f:id:kusuwada:20200204155140p:plain

実行ファイル(Tea Clicker)を立ち上げます。アプリの名前はunnamedになっています。

f:id:kusuwada:20200204155153p:plain

CheatEngine側で、今立ち上げたアプリを特定、開きます。

f:id:kusuwada:20200204160852p:plain

書き換えたい値の変化をたどることで、対象のアドレスを特定・値を書き換えるのがCheatEngineの基本の使い方のよう。ちょっとお茶をクリックして値を5まで進めておいて、「First Scan」を実施します。型は4byteではないだろうけど(999999999なので)不明なので、Allを選択しておきます。

f:id:kusuwada:20200204155229p:plain

沢山候補のアドレスが出てきました。
また数回お茶をclickして7まで値を進めてから、「Next Scan」をします。すると、5から7に値が変化したアドレスがまたズラーッと出てきます。再度、9まで進めて同様に Next Scan をすると、候補のアドレスが一つになりました。

f:id:kusuwada:20200204155250p:plain

このアドレスをダブルクリックしてアドレスリストに登録し、ここで値を999999999999に書き換えると、フラグが出ました!

f:id:kusuwada:20200204155303p:plain

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版を落としました。

起動してみると、マリオみたいなゲームが始まった。

f:id:kusuwada:20200204155323p:plain

でも敵に攻撃もできないし、敵も攻撃してこない。問題文にある通り、ゴールが見えない。
問題文のbeta-testというのが気になります。デバッグモード的な扱いがあるのかも。

と、深く追わずに終わってしまいました。
再度競技期間終了後に立ち上げていじってみると、Start地点から逆走できます…。

f:id:kusuwada:20200204160504p:plain

逆走した先には高い壁があり、なんとかジャンプでよじ登っていきます。

f:id:kusuwada:20200204160524p:plain

頂点まで行ってもなにもないので更に逆走して落ちてみるとGameOver?なのか画面が真っ黒に。右上にFlagが出ました…。Binary問…?

f:id:kusuwada:20200204160549p:plain

[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を実行すると、普通のスネークゲームが楽しめます。

f:id:kusuwada:20200204160619p:plain

メニューは

  1. Basic Play
  2. Advanced Play
  3. ランキングを見る

って感じです。Basic/Advancedを一通り遊んでみましたが、特に気になることはなし。Advanceは、GameOverになったあとに「Replay」を選択すると、障害物が増えていく仕組みでした。この障害物がどんどん増えていったらFlagの文字列になるのかな?と思ったんですが、そんなことはなく。一定回数GameOverになると、強制的にアプリが終了してしまいました。

f:id:kusuwada:20200204160631p:plain

問題文の Come and get your points where they aren't supposed to go から、蛇が壁を突き抜けたり、変なところに入れるのかと思ったのですが、特にそういった穴は見つけられませんでした。

競技終了後、他のwriteupを読んでみると、Exceptionを起こすとflagのalertがあがる仕組みだったらしい。上の文章から推測できる範囲内か…。

最初のメニュー選択時に0を入れるか、配布されたランキング用のファイルを消してランキングメニューを開くとFlagが出てきました。

f:id:kusuwada:20200204160646p:plain

全体的に実行ファイル関連ではあるけど、picoCTFのBinary分野とは全然違ったなぁ…。