Ghidraのコード再解析機能と真のルート発見の例で、別のコードに見えている部分を、再解析することで真のコードを見つけることを書きました。
IDAでもそれは可能なので、同じ例を挙げてみます。
今回は簡単な方法として、デバッガでステップ実行するだけでできちゃう、という例です。
まず、Ghidraで表示した、hltで終わっているように見えるコードの部分を再掲します。
同じ箇所を、IDAで解析した画面は以下となりました。
デバッガで実行し、0x00496567までステップ実行して止まっているところです。
表示の仕方は多少違いますが、0x00496578のhltまでは、やっぱり同じコード解析結果となっています。IDAの場合、デフォルトでの解析でも、hltの続きは解析してくれています。スタックに値を積んでcallしているなどが見られることから、続きもコードのようだ、ということは分かります。
一方で、Ghidraの記事で触れたとおり、最初の解析結果では正しくなっていません。
IDAのデバッガを使う場合、実は非常に再解析できます。「ステップ実行で、1ステップ実行するだけ」でOKです。
このケースでは、0x00496567から、「Step in (F7)」または「Step over (F8)」を一回押します。すると、以下のようなアラートが表示されます。
「既に解析された命令コードの間にEIPが行こうとしてて、下手するとエラー起こすけど、EIPの位置で直にコードを作っちゃっていい?」と聞かれてる(えらい意訳だな・・・)ので、Yesを押します。
すると、ステップは0x00496576に移動し、以下のようなコードになります。
hltは無くなり、「mov eax, [ebp - 0Ch]」に置き換わりました。これが本当に実行されるコードというわけです。
ユーザは難しい操作しなくても、ステップ実行を一つ押して、アラートに対して承認するだけで、あとは勝手にやってくれちゃいます。このあたりの使い勝手の良さが、慣れると離れられないIDAの魅力かなと思っています。
同じ部分の、Ghidraでの画面も再掲します。当たり前ですが、内容は同じですね。
それぞれ、慣れと利点を上手く使うことが、解析の効率、成功率の上昇に繋がるので、それぞれの特徴は把握しておくといいのではと思います。
2019/6/15追記:
検体のハッシュ値
MD5:5A80F4F7307ED946DB450DD42EEA2F77
SHA1:5398F2F77C5DCEC3A98041E8D61B67D06B452FDF