こんにちは。

本日はマルウェア解析のチュートリアルです。
使うツールはなんとGhidraです。2019年3月5日、NSA(アメリカ国家安全保障局)が、Ghidraを公開してくれました!わーい。
これはリバースエンジニアリングのツールです。逆アセンブルとも言えますでしょうか。今まではHopper Disassembler v4とかが同じツールでありますが個人的にアレの使い方がよくわからなかったのでこれを機に乗り換えます。では早速、インストールに移りましょう。個人的にJavaのインストールにかなり手間取ったのでその辺詳しく説明します。

Ghidraのインストール(Mac)

まずはGhidra本体のダウンロードを行います。 上のリンクからダウンロードを押すだけです。そしてフォルダの中身を見てみると次のようになっているかと思います
docsをダブルクリックしてみると installationGuide.html というものがあるのでそれを読んでみるとJDK11が必要であることがわかります。なのでインストールしていきましょう。 まずは上をダウンロードして
  1. $ tar xvf ./Downloads/openjdk-11.0.2_osx-x64_bin.tar
  2. $ vim ~/.bashrc
  3. export PATH=~/jdk-11.0.2.jdk/bin:$PATH の1行を追加
で、ターミナルで
  1. $ java –version
  2. $ /usr/libexec/java_home -V
とやってみて11が確認できればいいのですがおそらくできていないと思うので最後に からMacOSのものをダウンロードして解答後 pkg をダブルクリックでインストールするとjavaがインストールできたはずです!

Ghidraの起動

先ほどダウンロードしたGhidraのフォルダの中にghidraRunという実行ファイルがあるのでダブルクリックすると起動します。(batじゃないよ)またはターミナルで次をタイプします。
  • $ /Users/username/ghidra_9.0.4/ghidraRun ; exit;

Malware解析の超絶入門

ではマルウェア解析の練習、いや、基礎の基礎、いや、Ghidraの使い方、を学びましょう。 から練習問題をダウンロードします。そしてGhidraを起動し、Newprojectを適当に作ってから先ほどダウンロードしたstring1を解答したもの(exe)をドラッグします。すると
このようになると思うのでダブルクリックで起動。
Yesをクリックしてオプションを選択させられますが無視してAnalyzeをクリック。警告など出ればとりあえずOK押してください。

さて、string1をダウンロードしたサイトによればFLAGを見つける問題のようなので探します。CTFですね。
strings1.exe contains an un-encrypted flag stored within the executable. When run, the program will output an MD5 hash of the flag but not the original. Can you extract the flag?

なぜか僕の環境ではダブルクリックで開くことができなかったんですがそれはおいておいて、hash化されているようなので左のFilterでhashとフィルタリングします。
アセンブラにはあまり詳しくないのですがここをみるとmd5_hashという関数がハッシュ化する関数だということが予測できます。そしてスクロールダウンすると
おっと、ありましたね、しかもFLAGって書いてあります。ここをダブルクリックしてみると

たくさんフラグがありますね。他のものは無視して
FLAG{CAN-I-MAKE-IT-ANYMORE-OBVIOUS}
をコピペして先ほどのサイトに入力します。
CHECK FLAGをクリックすると正解と出ました。やったあああ。

感想

リバースエンジニアリングには非常に興味がありますが、アセンブリの知識がまだまだ素人です。なのでこのサイトの問題を解きつつわからないキーワードを調べて勉強していこうと思います。

Reference