Panda Banker 解析 (1) - 解析メモ ... 軽く動作確認
Panda Banker 解析 (2) - 解析メモ ... UnhandledExceptionFilter による耐解析機能
Panda Banker 解析 (3) - 解析メモ ... アンパック
Panda Banker 解析 (4) - 解析メモ ... Extended Attribute (EA) による耐解析機能
Panda Banker 解析 (5) - 解析メモ ... コードインジェクション解明
前回コードインジェクションしている手法は判明しているので、今度はインジェクション先(svchost.exe)をデバッグしてみたい。できればエントリポイントからのデバッグがしたい。
コードインジェクションは API Monitor のログを見ると、CreateProcessW でプロセス作成、コード注入後、CreateRemoteThread でスレッド開始の流れ。それぞれにブレイクポイントを貼ってみる。
CreateProcessW()
CreateRemoteThread()
ここで、CreateRemoteThread の引数を確認してみる。
MSDN - CreateRemoteThread function (Windows) によると以下の通り。
HANDLE WINAPI CreateRemoteThread(
_In_ HANDLE hProcess,
_In_ LPSECURITY_ATTRIBUTES lpThreadAttributes,
_In_ SIZE_T dwStackSize,
_In_ LPTHREAD_START_ROUTINE lpStartAddress,
_In_ LPVOID lpParameter,
_In_ DWORD dwCreationFlags,
_Out_ LPDWORD lpThreadId
);
4つ目の引数が lpStartAddress なので、Thread の開始アドレスがここに入っていると思う。デバッガをもう一つ起動して、svchost.exe にアタッチ&実行。ブレイクポイントを lpStartAddress に貼ってみる。その後、CreateRemoteThread 以降を実行。
svchost.exe の方のデバッガが無事エントリポイント(lpStartAddress)でブレイクがかかる。以降はステップ実行でデバッグできる。
ちなみに、CrateRemoteThread でブレイクかけた時の RWX 属性の 120KB はProcessHacker で取得することができて、MZ から始まる実行ファイルが取得できる。
ただし、実行してもエラー終了する。
IDA Pro でも見れるが、アドレスが違っていたり(0x8987E→0x10BA47E)、インポートテーブルが見れなかったりと散々な結果になる。