[Writeup] ASUSN CTFをやってみた

新年あけましておめでとうございます。

2024年1発目の記事は、2023年12月30日から2024年1月3日まで開催されました、ASUSN CTFのWriteup記事です!

(人生初のWriteup記事です)
今回は、数ある問題の中で、自分で面白い解き方したなと思うものを厳選して公開いたします。

Reversing フラッシュ機械語

x86_64の命令を実行した結果として、レジスタraxの値がFlagとなる問題です。

x86_64命令を調べたところでよくわからん。ということで、GPTさんに聞いてみる事としました。今回使ったGPTのは、AzureのGPT4です。

まずは、素直にGPT4に聞いてみると

x86_64の命令として実行した場合のレジスタraxの値を教えて
48 31 c0 48 ff c0 48 ff c8

まさかの、解説付きで教えてくれるじゃないかい!(大感謝)

あなたが提供した命令列をx86_64アーキテクチャで解釈すると、次のようになります:
1. 48 31 c0: XOR RAX, RAX(RAXレジスタの値を0にリセット)
2. 48 ff c0: INC RAX(RAXレジスタの値を1増加)
3. 48 ff c8: DEC RAX(RAXレジスタの値を1減少)
したがって、これらの命令が順に実行された後のRAXレジスタの値は0になります。

そこで調子に乗り、次の問題も聞いてみる。

48 c7 c0 12 34 56 78 の場合は?

またしても、解説付きで答えてくれた!!!!(最高)

あなたが提供した命令列をx86_64アーキテクチャで解釈すると、次のようになります:
48 c7 c0 12 34 56 78: MOV RAX, 0x78563412
したがって、この命令が実行された後のRAXレジスタの値は0x78563412になります。

Flagは10進数での入力なので、変換もしてもらいましょう。

RAXレジスタの値を10進数に変換して

変換もちゃんとできるやん(それぐらい自分でやれ)

RAXレジスタの値0x78563412を10進数に変換すると、それは2018915346になります。

GPT4が賢くてとてもありがたい。本来の解き方では無いと思いますが、GPTをうまく使う事でCTFも解けるんだなと楽しくなってきました。

では、最後の問題もGPTに聞いてみると

48 31 c0 48 05 80 f0 fa 02 48 2d 9b 19 c6 01 の場合は?

ふむふむ

1. 48 31 c0: XOR RAX, RAX(RAXレジスタの値を0にリセット)
2. 48 05 80 f0 fa 02: ADD RAX, 0x2faf080(RAXレジスタに0x2faf080を加算)
3. 48 2d 9b 19 c6 01: SUB RAX, 0x1c6199b(RAXレジスタから0x1c6199bを減算)
したがって、これらの命令が順に実行された後のRAXレジスタの値は0x2faf080 - 0x1c6199b = 0xE4E6E5になります。

先ほどと同じように、10進数に変換してもらってと。

RAXレジスタの値を10進数に変換して
RAXレジスタの値0xE4E6E5を10進数に変換すると、それは14912325になります。

そのまま、得られたFlagを投げると間違いと出てきました。(おいおいおい。最後にGPTさんバカしやがった!)

ということで、どこから間違えたのかを考えましょう。

1, 2, 3 の命令の解説は今までの回答を見ていると、当たっている可能性が高い。と言うことは、計算が間違っている可能性があると思い、0x2faf080 - 0x1c6199b をGoogle先生に解いてもらうと、

0x134D6E5

おっと、GPTさんの計算結果と異なるぞ!GPTさんはやはり計算は不得意ですね。。。10進数への変換くらいはやってくれるでしょうと、聞いてみると

0x134D6E5 を 10進数に変換して

ふむふむ

16進数の値0x134D6E5を10進数に変換すると、それは20202021になります。

得られたFlagを投げると間違いとなりました。。。(オイオイオイオイ
さっきの問題、10進数への変換できてたのに。。。

仕方ないので、変換サイトに投げて得られた結果で正解することができました。

まとめ

GPTを使ってFlagを得ることはできる。だが、やはり万能ではない。が、Binaryの解説をしてくれる事は分かったので、上手く使えばいいパートナーになりそうですね。

ASUSN CTF とても楽しめました。IPPONも取ることができ5位とのことで大満足です。

次回も参加してみたいな。

それでは。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です