PE ImageBase adresi bellekte neden değişiyor?
Kötü amaçlı bir 32-bit x86 Windows yürütülebilir dosyasını tersine çeviriyorum. Ghidra'daki PE başlıklarını statik olarak gözden geçirirken, bunun beklendiği gibi ImageBase
ayarlandığını görüyorum 0x400000
. Bununla birlikte, ikili belleğe yüklendiğinde, ilk RVA ImageBase
dosyada tanımlananla eşleşmez . Örneğin, bellek içi temel adresin 0x4B0000
ve olarak ayarlandığını gördüm 0x900000
. Bu davranış, temiz bir VM'de ve Immunity ve x32dbg'nin yanı sıra IDA Free ile hata ayıklarken ortaya çıkar.
Anladığım kadarıyla Windows yükleyici ImageBase
, bölümleri sanal adres alanına eşlemeye başlamak için bu ofseti okur ve kullanır. Sistem kodu yüklemeyi ele aldığından ve sistemim ilk çalıştırmada temiz olduğundan, benim varsayımım, olağandışı ImageBase
olanın kurcalanmaktan ziyade bir yükleyici nüansının belirtisi olduğu yönündedir. Bu senaryoyla hiç karşılaşmadım ve herhangi bir kavrayıştan memnun olurum.
MD5: 1f63d04ee95ea041f2f6b1e818d94a7c
SHA1: 823ad6abb05f2393c44cf4b7f1d00e32ac04d1d1
ImageBase
ayarlı 0x400000
Ghidra PE başlıklarını görüntülerken:

ImageBase
bellek eşlemeli PE üstbilgisindeki ( 0x4B0000
) ImageBase
statik dosyadaki kümeyle eşleşmiyor :

PE kesitler belleğe eşleştirilir ImageBase
de0x4B0000

Yanıtlar
Bu sadece tercih edilen bir adrestir. Windows, ikili dosyayı hemen hemen her adrese yükleyebilir ve bu yeni konuma yeniden yükleyebilir.
ImageBase: Belleğe yüklendiğinde görüntünün ilk baytının tercih edilen adresi; 64 K'nin katı olmalıdır. DLL'ler için varsayılan 0x10000000'dir. Windows CE EXE'leri için varsayılan 0x00010000'dür. Windows NT, Windows 2000, Windows XP, Windows 95, Windows 98 ve Windows Me için varsayılan 0x00400000'dir.
Kaynak: MSDN