LT in 第93回 ゆるいハッキング大会(Pwn)
はじめに
こちらのイベントでLTさせてもらいました。
第93回 ゆるいハッキング大会 in TOKYO
LT内容としては Pwn の解説。
といっても以下イベントのPwn内容を参考にさせていただき、
発表したのは問題編の回答部分。
[オンライン] 第35回ゼロから始めるCTF入門勉強会 (初心者歓迎!)
それでは発表した内容を書いていこうと思います。
Pwn とは
まず Pwn とはなんとやら、よくあるものの一つとして、
起動するとパスワードを求められるのでそれをあてろ、というやつですね。
パスワードそのものが Flag であったり、正しいパスワードを入力すると Flag が表示されるものであったり。
今回解析するファイルはこちらになります。
※発表者の方からアップロード許可頂きました。
まずは Ghidra インストールと起動
最初にGhidraをダウンロードして実行。
ダウンロードはこちらから。
なお、JDKは必須です。バージョンは17を入れろと書かれてるのですが、
何気に19でも動いちゃいました…(保証はできません。)
java -version
java version "19.0.2" 2023-01-17
そしたら ghidraRun.bat を起動します。
プログラム解析
Ghidraを起動したらプログラムを読み込みます。
今回のお題は test2.exe ですが その前に helloworld.exe を見てみましょう。
これは hello world! と表示するだけのプログラム。良くあるアレですね。
Ghidraへのプログラムの読み込みは以下やっていきます。
・Ghidra起動からのNew Project
・特に共有はしないのでNon-Shared Projectで適当に名前を付けて作成
・作成出来たら緑のドラゴンのアイコンをクリック
・解析する実行ファイルをドラッグアンドドロップ
最後は解析をかけておきます。準備ができるとこんな画面になります。
文字列検索
Hello world の処理をどこでやっているか探してみようと思います。
まずは文字列検索。
そのままSearch。
すると Hello World! の文字列があるので選択してみて・・・
メインウインドウに戻ると Hello World の表示処理をしている部分に移動しています。
そしたら XREF[1]: というところをダブルクリックしてみると
小ウインドウが開くので MOV ... というのをクリックしてみます。
メインウィンドウにアセンブリ処理らしきものが表示されており、
右ウインドウには C言語 のような処理が書かれていて、
puts("Hello World!")
とあります。ここで Hello World! と表示しているのでしょう。
※昔C言語触った記憶では printf とかやってた覚えがあります…
あらためて問題のプログラム解析
それでは、問題のプログラムを解析してみます。
test2.exeを起動し、適当に数字を入れてみますが、何も起きません…
ということで、実行ファイルをGhidraで解析すべく、ドラッグアンドドロップ。
前回と同じように、Ghidraで実行ファイルを読み込んだら位、SearchStringしてみます。
correct とか怪しいですね。
処理を見ていくと、scanfで入力を文字列を読み取って check という関数で内容判定している?
そいうことで check 関数を追っていくと…
hello という文字列と比較しているので、答えは hello でしょうか?
答え合わせ
では答え合わせしてみます。
あたりでした。
まとめ&ふりかえり
今回で簡単な実行ファイル解析は分かるようになりました。
が基本手順通りにやっているだけなので全体的になぜこれで解析できるのかは理解できておらず…
まだまだCTFで問題解くのは厳しいですね。
とはいえ少しずつ、cryptoとかもやってみようと思います。
Discussion