前回のIDAの操作メモ - ハードウェアブレークポイントの使用例 -で、暗号化された情報が復号されたことを解析しました。
こういった復号をする場合、復号されたデータがプログラムのコードだったり、パラメータや文字列といったデータだったり、ケースにより様々です。このケースでは、解析した領域にEIPをジャンプさせる処理が見つかったので、コードだということが分かります。
そこで、このコード領域を解析する必要があります。
IDAの操作メモ - コードの再解析 -では、ステップを進めていき、未解析の領域にEIPが到達すれば自動的に解析してくれることは述べました。今回は、範囲選択をして右クリックで表示されるポップアップメニューを使って再解析させる方法のメモです。
メニューを使って再解析する簡単な方法は、カーソルで範囲選択し、「Analyze selected area」を押すことです。これで、選択した範囲を再解析することができます。ただし、これはコードセグメントの場合は問題ないのですが、データセグメントの場合はちょっとしたコツがあります。
まず、前回の復号処理は、複数回の演算の後、最終的には以下のようになりました。
0x004E4A88以降の、赤枠で囲まれた領域が復号の結果です。
IDA Viewを0x004E4A88へ移動させ、範囲選択をして右クリックでポップアップメニューを表示させます。
すると、以下のようになってしまいました。
本来は、上図の楕円の場所に「Analyze selected area」が表示されるのですが、このケースでは表示されません。
理由は、選択範囲がデータセグメントのためです。
このような場合、セグメントのクラスを変更することで解析が可能になります。
セグメントは、「View」メニューの「Open subviews」の「Segments」で表示させることが可能です(参考:IDAの操作メモ - メニュー編(その2) -)。
このケースでは、0x004E4A88以降が含まれる.dataセグメントを選択し、右クリックで表示されるメニューから「Edit segment」を選択します。
すると、以下のようなウィンドウが表示されます。
Segment classが「DATA」になっているので、「CODE」に変更します。
このとき、ドロップダウンメニューには、「CODE」が出てこないかもしれません。その場合、キーボードで手打ちで「CODE」にすればOKです。
また、分析では関係ない(?)ですが、私は一応Segment permissonsの「Execute」のチェックも併せていれています。もっとも、ここにチェックが入っていなくても、EIPがこのセグメント領域内にきたら、普通にデバッガで実行してる気もするのですが・・・。
この操作の後、再びIDA Viewを0x004E4A88へ移動させ、範囲選択をして右クリックでポップアップメニューを表示させます。
すると、以下のようになりました。
「Analyze selected area」を押すと、ポップアップでメッセージがでます。
「Analyze」、「Force」、「Cancel」のボタンがあります。
通常、「Analyze」で問題ないのですが、対象に解析済み領域が含まれていたりする場合、上手くいかないことがあります。その場合、範囲選択をしなおして「Analyze selected area」から「Force」をやると、思った通りいくことが多い、というのが直感的な感覚です。
まあ、私の場合雑に毎回「Force」にしている気もしますけどね。
この結果、復号されたデータセグメント領域上のコードが、見事解析されました。
下図に、0x004E4A88以降に続きのコードがあることが明確に分かると思います。
この後のコードを追うことで、引き続きマルウェアの解析を行うことができます。
セルフのパッカーやコードの暗号化を使うケースは比較的よく見られますので、IDAで解析する場合は、このあたりの操作ができるのは必須かなと思います。
なお、サンドボックスや動的解析の場合、この部分は基本的には障害にはならないと思います。むしろ、暗号化してたか、それはどのような方法だったか、すらスルーしそうではありますが。
検体のハッシュ値
MD5:5A80F4F7307ED946DB450DD42EEA2F77
SHA1:5398F2F77C5DCEC3A98041E8D61B67D06B452FDF