PE ImageBase adresi bellekte neden değişiyor?

Aug 17 2020

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 ImageBaseayarlandığını görüyorum 0x400000. Bununla birlikte, ikili belleğe yüklendiğinde, ilk RVA ImageBasedosyada tanımlananla eşleşmez . Örneğin, bellek içi temel adresin 0x4B0000ve 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ışı ImageBaseolanı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


ImageBaseayarlı 0x400000Ghidra PE başlıklarını görüntülerken:


ImageBasebellek eşlemeli PE üstbilgisindeki ( 0x4B0000) ImageBasestatik dosyadaki kümeyle eşleşmiyor :


PE kesitler belleğe eşleştirilir ImageBasede0x4B0000

Yanıtlar

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

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