マルウェア解析において、マニュアルアンパックは重要なテーマである。
マニュアルアンパックのコツはいろいろあるが、今回は、本来のプログラムで呼び出される可能性が高いAPIに着目する方法を説明する。
解析対象のマルウェアは、起動後、インターネットエクスプローラのプロセスを一時停止で開始し、ヒープメモリに悪性コードを書き込んだ後、停止位置を書き換え、再開させる。
いわゆるProcess Hollowing(プロセス ハロウィング)である。
このマルウェアは、CreateDialogIndirectParamAなどの関数呼び出しにより、x64dbgでの追跡が難しい。
そこで、bp GetThreadContext などで、プロセス ハロウィングしているところのAPIにブレークさせて解析したいと考えた。
ところが、LoadLibraryAやGetProcAddressなどで動的にAPIを呼び出しているためか、絶対に使っているはずのAPI GetThreadContext でブレークしない。
どうやったら、動的に呼び出しているAPIにブレークポイントを設定できるのだろうか?
知ってれば簡単かもしれないが、x64dbgのプラグインに xAnalyzer を追加するだけ。
マニュアルアンパックやOEP発見アプローチが桁違いに楽になる。