IDAの操作メモ - データ領域のコード解析 - | reverse-eg-mal-memoのブログ

reverse-eg-mal-memoのブログ

サイバーセキュリティに関して、あれこれとメモするという、チラシの裏的存在。
medium(英語):https://sachiel-archangel.medium.com/

前回の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