解析にあたっては、「コードの流れ」や「注目するコード」を見ていく必要があります。
そのために、任意のアドレスや関数を簡単に参照できる機能があることは、非常に重要になってきます。
確認した範囲では、Ghidraには概ね以下のような移動方法がありました。
- 指定したアドレス、ラベルなどにダイレクトにジャンプする。
- マウスなどでレンジ指定していた箇所にジャンプする。
- アナリストがハイライトを指定していた箇所にジャンプする。
- 現在位置から次に見つかる関数、ラベルなどにジャンプする。
- Listing画面で関数名や変数名のラベルをダブルクリックすることでその先頭位置へ移動する。
概ねの特徴(というか、個人的な感想)は以下の通りです。
●指定したアドレス、ラベルなどにダイレクトにジャンプする。
個人的には、とても頻繁に使います。
もちろん、自分で指定する以上、そこに何か意味があることが分かっている場合なのですが。
デバッガ機能を用いたマルウェアの解析においては、解析環境が不安定になることがよくあります。
その場合、不安定になると、環境を元に戻してしまいます。すると、そのときまでに解析環境上で記録していた情報が消えてしまいます。
そのため、私の場合はホスト側のスプレッドシートなどに解析情報をメモっていく手法を用いています。
この際、関数のアドレスや機能を記録しています。
こうしておくことで、環境を戻しても、解析の続きができます。このときに、アドレス指定ジャンプを多用する、というワケです。
私の場合、どうしても見切りである程度実行してみるという、半分動的解析のようなこともしてしまうので。
スキルの高い人には、縁の無い話かもしれないですがw
●マウスなどでレンジ指定していた箇所にジャンプする。
調査している行を選択状態にしておき、上下にスクロールして別のコードを参照していた場合に元の場所に戻る場合などに使えそうです。
もっとも、私の場合、別の行を見ているときも無駄に画面をクリックしてしまう癖があり、そのときに元のレンジが解除されてしまうので、個人的にはあまり使わないかも・・・。
●アナリストがハイライトを指定していた箇所にジャンプする。
解析で重要な箇所をハイライト設定をしておき、他のコードをみた後に戻る場合や、ハイライト間を移動する場合に便利そうです。
レンジ指定と違い、ハイライトは残るため、画面をクリックしたりしても利用でき、慣れれば結構使いそうです。
問題は、ハイライトを増やしすぎると、使い勝手が下がる点です。
デバッガの場合でも、ブレークポイントを増やしすぎる癖があるので・・・。
ハイライトも、解析が終わったらラベルやブックマークを付け、ハイライトを解除するといった手もありそうです。
●現在位置から次に見つかる関数、ラベルなどにジャンプする。
現在のカーソル位置から、前後どちらかでサーチし、条件に適合した箇所に移動します。
個人的には、使いそうであまり使わないかも、という機能ですね。
というのは、関数の位置関係は、機能が関連しているものが物理的なアドレスで前後に配置されているとは限らない、という点が挙げられます。ラベルのジャンプでも同じことが言えるかと思います。
それなら、ラベル名をちゃんと振りなおして、ラベル名でサーチ&ジャンプをするかなーといったところです。
関数の先頭に戻る場合くらいは使うかも、といったところです。
あと、データの領域間のジャンプは、もしかすると使うかも。
●Listing画面で関数名や変数名のラベルをダブルクリックすることでその先頭位置へ移動する。
個人的には、一番頻繁に使います。
やはり、気になる関数名やパラメータは、それを見たいと思いますが、それを見に行くのに最も直感的な操作ですので。
なお、ジャンプした後、ジャンプ前の位置に戻る場合は、上のメニューアイコンの「←」を押して戻れます(その後、色々移動しまくると戻れなかったりもしますが)。
文字ばっかりの説明な上、概要と言いつつ、長くてタイトル詐欺な上、画像も無くて分かりづらいかもですね。
それにしても・・・GWにやった検証のメモのつもりが、全然時間がかかっていて。5月中に終わるのかなぁ・・・?(汗)