1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

picoCTF 2023 Writeup : Reverse Engineering

Posted at

最初に

picoCTF 2023のReverse Engineeringの問題を解いていきます!

全部で9問ですね
image.png

Writeup

解いていきます!!!

timer

  1. APKファイルが与えられるので、拡張子を「.zip」にして解凍
  2. 解凍したフォルダーで、grep -rl "pico" ./ 2>/dev/nullをして、picoの文字列があるファイルを特定(classes3.dexでした)
  3. strings ./classes3.dex| grep picoでフラグゲット

Reverse

実行ファイルらしいものをダウンロードできたので、少し内容を見てみました


$ file ret           
ret: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=64856d07d138e412faf30b9722d92f507e3b5c9c, for GNU/Linux 3.2.0, not stripped
$ checksec --file=ret
RELRO           STACK CANARY      NX            PIE             RPATH      RUNPATH      Symbols         FORTIFY Fortified       Fortifiable     FILE
Full RELRO      Canary found      NX enabled    PIE enabled     No RPATH   No RUNPATH   69 Symbols        No    0               1               ret

Ghidraで逆解析したら、一発でした
image.png

Safe Opener 2

strings でgrepしたら終わってしまいました。。。

$ strings SafeOpener.class| grep pico
,picoCTF{SAf3_0p3n3rr_y0u_solv3d_it_de45efd6}

Ready Gladiator 0

以下のアセンブリコード(っぽいコード)だけが記載されたテキストファイルがダウンロードできます

;redcode
;name Imp Ex
;assert 1
mov 0, 1
end

アセンブリのコメントは;なので、実質は4行目だけですね、、(後から追記:アセンブリじゃないです笑)

4行目は、レジスタ0の値をレジスタ1に転送しています(後から追記:アセンブリじゃないです笑)

実際に環境で動かしてみると、以下のようになります

nc saturn.picoctf.net 52731 < imp.red
;redcode
;name Imp Ex
;assert 1
mov 0, 1
end
Submit your warrior: (enter 'end' when done)

Warrior1:
;redcode
;name Imp Ex
;assert 1
mov 0, 1
end

Rounds: 100
Warrior 1 wins: 0
Warrior 2 wins: 0
Ties: 100
Try again. Your warrior (warrior 1) must lose all rounds, no ties.
                                                                       

何をしているんだ。。。。となったので、CoreWarを少し調べてみました。

『コア戦争』(コアせんそう、英:Core War または Core Wars)はプログラミングゲームのひとつである。専用に設計された仮想機械中で、互いに干渉しうるプログラム同士が戦うというもので、敵対するプログラムを終了させ、自分は生き残ってマシンを占領するのがゲームの目的である。

初期化し無内容としたコアの上に複数のRedcodeプログラム(Warrior、戦士)を配置し動作させ(=戦わせ)、最後まで動作し生き残ったものを勝者とする。プログラムは自分の分身を作る、他者のコードを上書き破壊するなどして戦う。

なるほど、他のプログラムは止めるけど、自分のプログラムは止まらないようにすれば、勝ちになるのか!
そして、そのプログラムはCore Wars独自のコードが使われるみたいです

ということは上記の問題は、imp.redに記載されているコードを動かし続けて、Warrier2のプログラムを停止した回数が、Warrior 1 wins:なのか

そして、それを100回やったんだと思われますね
(上記の結果だと、100回引き分けています)

ただ、この問題は「負け続ける」ようにしないといけないので、endだけ入力したら、フラグが手に入りました!

Ready Gladiator 1

Core Warsの「戦士」のモデルが以下のサイトに記載されていました

これのDarfを使えば、何度か勝利できました!
(ただし、仕組はそこまで理解できていない、、、)

nc saturn.picoctf.net 49538 < Dwarf
ADD #4, 3        ; execution begins here
MOV 2, @2
JMP -2
DAT #0, #0
end
Submit your warrior: (enter 'end' when done)

Warrior1:
ADD #4, 3        ; execution begins here
MOV 2, @2
JMP -2
DAT #0, #0
end

Warning:
        Missing ';assert'. Warrior may not work with the current setting
Number of warnings: 1

Rounds: 100
Warrior 1 wins: 25
Warrior 2 wins: 0
Ties: 75
You did it!
picoCTF{1mp_1n_7h3_cr055h41r5_ec57a42e}

Ready Gladiator 2

こんどは全勝を目指さないといけないみたいですね。。。

Imp対策がされているWarriorが以下のWebページに記載されていたので、いろいろ試してみました

しかし、うまくいかず、、、

いろいろ探していると、以下のWebページがありましたが、PicoCTF2023当時の質問みたいですね笑

記載されているJMP 0, <-5を試したらうまくいきました!

Virtual Machine 0

Zipファイルには「.dae」のファイルが格納されている。
初めて見る拡張子ですが、COLLADAファイルという3Dデータのファイルのようです。

適当にWebで探した可視化できるサイトでとりあえず可視化してみます。

可視化したのですが、赤色しかない、、、
あと、ギアっぽいものもありますね

image.png

以下のWriteupを見てみると、右側が青い軸みたいなので、これを参考に続行します

ギア数を数えたところ、右側の軸(青)のギアが1回転で8、左側は40なので、左側の赤い軸を1回転させると、右側の青い軸は5回転します

つまり、赤軸を1回回転させれば、青軸が5回回転するので、input.txtの数値を5倍する必要があります

5倍した値は以下

198614235373674103788002620892906122161486462450519980432607127393331851645

上記のWriteupでは、これをHex Stringにするとありましたが、一度16進数に変換する必要がありますね(だいぶ悩んだ💦)

10進数の数値 → 16進数に変換 → HEX Stringに変換
でフラグが手に入ります!

No way out

Unityで作られたゲームを攻略する問題です。

少しゲームで遊びましたが、旗が立っているところにいけない、、、

以下のWriteupを見てみました。
コードを書き換えるのか、、、そんなことありなんだ、、、

Writeupの通りにやってみたら、うまくいきました!

リバースエンジニアリングで、コードを書き換えて実行する、ということもあるんですね、、、

dnSPyのトロイの木馬版があるみたい

以下のWebページに記載がありました。
このWebページの内容も正しいとは限らないですが、注意してください

Virtual Machine 0

上記のWritupを見てみましたが、ちょっと無理かな、、、、、

最後に

今回学んだことは以下です

  • Core Warsというゲームがあること
  • リバースエンジニアリングで、コードを書き換えることは多分初めて、、、
1
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?