1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

CpawCTFで学ぶCutter入門

Last updated at Posted at 2020-07-21

CpawCTFのReversingの問題を通してCutterの使い方を書いていく。
CpawCTF

Cutterについて

https://cutter.re
radare2を搭載したOSSのGUIリバースエンジニアリングツール
ファイルの情報やディスアセンブルやデコンパイルなど色々と出来る。

問題を解いてみる

[Level1] Can you execute ?

ファイルを実行してくださいという問題。
では、Cutterを起動してSelectボタンを押す。
スクリーンショット 2020-06-28 21.31.59.png
そうするとファイルをインポートできる。
exec_meを選択したら、Openボタンを押すと以下のようになる。
スクリーンショット 2020-06-28 21.35.46.png
ここでは、どれくらい解析するか選べる。radare2のaaaやaaaaにあたる。
今回は適当にAuto-Analysis(aaa)で解析してみる。
OKボタンを押すと解析が始まり、解析が終わると以下のように色々と解析結果が表示される。
スクリーンショット 2020-06-28 22.43.32.png
下の「Dashboard」タブを開くと解析したファイルの情報が表示される。
スクリーンショット 2020-06-28 22.46.46.png
ここでは、ファイルの種類やHash値などの情報が分かる。
OVERVIEWの部分を見る限り、exec_meは64bitのelfファイルだと分かる。
Linuxのfileコマンドと似たような情報が出てくる。
elfファイルだとわかったので、Linux環境で実行するとflagが出てくる。

[Level2] reversing easy!

出力がないファイルからフラグを探す問題。
ファイルのインポートは先ほどと同じようにしてみる。
「Dashboard」タブのOVERVIEWの部分を見ると、32bitのelfファイルだと分かる。
次に「Strings」タブを開いてみると以下のようになる。
スクリーンショット 2020-07-05 15.34.34.png
ここの部分はLinuxのstringsコマンドと同じような出力が表示されていることが分かる。
中身を見ていくとflagらしき文字列が表示されている。
スクリーンショット 2020-07-05 15.39.16.png
念のため「Disassembly」タブも見てみる。
スクリーンショット 2020-07-05 15.54.52.png
ここでディスアセンブルした結果を見ることができる。
上の画像はmainの部分をディスアセンブルした結果を表示している。
内容を見てみると、先ほど表示されていたflagらしき文字列をそのまま変数に入れてることが分かる。
これがflagで良さそうなので、これを入力する。

[Level3] またやらかした!

さっきと同様出力がないファイルからフラグを探す問題。
ファイルをインポートし、「Dashboard」タブを見てみよう。
スクリーンショット 2020-07-21 16.59.05.png
今回も32bitのelfファイルだと分かる。
「Strings」タブも見てみるが、特にflagらしき文字列は見当たらない。
「Disassembly」タブでmainの部分を見てみる。
スクリーンショット 2020-07-21 17.06.40.png
上の画像を見てみると、前回の問題みたいに何かの文字列を変数に代入していることが分かる。
それ以降の処理を見てみる。
スクリーンショット 2020-07-21 17.48.08.png
0x8048478~0x8048495でループしていることが分かる。
「Graph」タブを開くと分かりやすくなる。
スクリーンショット 2020-07-21 17.28.10.png
グラフビュー形式で表示することができる。
ループの内容をざっと確認してみる。
・[var_80th]が0xd(13)以下ならループする
・eaxと[var_7ch]をxorする
・[var_80th]に1を代入する

[var_80th]は0、[var_7ch]は0x19(25)が代入されている。
つまり、[var_80th]が0~13の間ループするので、eaxと0x19(25)を14回xorしている。
最初に出てきた謎の文字列の文字数と一致しているので、xorしている時のeaxはおそらく謎の文字列が代入されてそう。
一応確認してみる。

一文字目:0x7a(z) xor 0x19 → 0x63(c)
二文字目:0x69(i) xor 0x19 → 0x70(p)
三文字目:0x78(x) xor 0x19 → 0x61(a)
四文字目:0x6e(n) xor 0x19 → 0x77(w)

先頭四文字しか確認してないが、flagっぽい文字列が出たので、eaxに謎の文字列が代入されているのだろう。
そして、xorされたやつがflagになる。

ちなみに、「Decompiler」タブでデコンパイルした内容を確認できる。
スクリーンショット 2020-07-21 19.23.22.png

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?