Mengapa alamat PE ImageBase berubah dalam memori?

Aug 17 2020

Saya membalikkan Windows 32-bit x86 yang dapat dieksekusi. Secara statis meninjau header PE di Ghidra, saya melihat itu ImageBasedisetel 0x400000seperti yang diharapkan. Namun, ketika biner dimuat ke memori, RVA awal tidak cocok dengan yang ImageBaseditentukan dalam file. Misalnya, saya telah melihat alamat basis dalam memori diatur ke 0x4B0000dan 0x900000. Perilaku ini terjadi pada VM bersih, dan saat debugging dengan Imunitas dan x32dbg serta IDA Gratis.

Pemahaman saya adalah bahwa pemuat Windows membaca ImageBasedan menggunakan offset itu untuk mulai memetakan bagian ke dalam ruang alamat virtual. Karena kode sistem menangani pemuatan, dan sistem saya bersih pada eksekusi pertama, asumsi saya adalah bahwa hal yang tidak biasa ImageBaseadalah gejala nuansa loader, bukan gangguan. Saya tidak pernah mengalami skenario ini dan akan menghargai semua wawasan.

MD5: 1f63d04ee95ea041f2f6b1e818d94a7c

SHA1: 823ad6abb05f2393c44cf4b7f1d00e32ac04d1d1


ImageBasedisetel ke 0x400000saat melihat header PE di Ghidra:


ImageBasedi header PE yang dipetakan memori ( 0x4B0000) tidak cocok dengan ImageBaseset di file statis:


Bagian PE dipetakan ke dalam memori dengan ImageBasedi0x4B0000

Jawaban

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

Ini hanya alamat yang disukai. Windows dapat memuat biner di hampir semua alamat dan melakukan rebase ke lokasi baru ini.

ImageBase: Alamat yang disukai dari byte pertama gambar saat dimuat ke memori; harus kelipatan 64 K. Default untuk DLL adalah 0x10000000. Default untuk Windows CE EXEs adalah 0x00010000. Default untuk Windows NT, Windows 2000, Windows XP, Windows 95, Windows 98, dan Windows Me adalah 0x00400000.

Sumber: MSDN