PE ImageBaseアドレスがメモリ内で変更されるのはなぜですか?

Aug 17 2020

悪意のある32ビットx86Windows実行可能ファイルを元に戻しています。GhidraのPEヘッダーを静的に確認するImageBase0x400000、期待どおりに設定されていることがわかります。ただし、バイナリがメモリにロードされると、初期RVAはImageBaseファイルで定義されたものと一致しません。例えば、私はへのインメモリベースアドレスセットを見ている0x4B00000x900000。この動作は、クリーンなVMで、Immunityとx32dbg、およびIDAFreeを使用してデバッグするときに発生します。

私の理解では、WindowsローダーImageBaseはそのオフセットを読み取って使用し、セクションを仮想アドレス空間にマッピングし始めます。システムコードが読み込みを処理し、最初の実行時にシステムがクリーンであるため、異常ImageBaseは改ざんではなくローダーのニュアンスの症状であると想定しています。私はこのシナリオに遭遇したことがなく、洞察をいただければ幸いです。

MD5: 1f63d04ee95ea041f2f6b1e818d94a7c

SHA1: 823ad6abb05f2393c44cf4b7f1d00e32ac04d1d1


ImageBase0x400000GhidraでPEヘッダーを表示するときに設定します。


ImageBaseメモリマップされたPEヘッダー(0x4B0000)がImageBase静的ファイルのセットと一致しません:


ImageBaseatでメモリにマップされたPEセクション0x4B0000

回答

7 PawełŁukasik Aug 17 2020 at 12:44

これは単なる優先アドレスです。Windowsは、ほぼすべてのアドレスにバイナリをロードして、この新しい場所にリベースできます。

ImageBase:メモリにロードされたときの画像の最初のバイトの優先アドレス。64Kの倍数である必要があります。DLLのデフォルトは0x10000000です。Windows CEEXEのデフォルトは0x00010000です。Windows NT、Windows 2000、Windows XP、Windows 95、Windows 98、およびWindowsMeのデフォルトは0x00400000です。

出典:MSDN