32 bitlik WOW64-ed işleminden 64 bit koda atlama tekniği, manuel olarak yapıldığında genellikle "Cennetin kapısı" olarak adlandırılır. Bu genellikle 64 bit özellikleri kullanmak için (Windows API'lerinin 64 bit sürümlerini çağırarak 64 bit işlemleri manipüle etmek gibi) veya hata ayıklamayı daha zor hale getirmek için kötü amaçlı yazılımlar tarafından yapılır, bu tesadüfen yaşadığınız şeydir;).
Bu terimi çevrimiçi olarak aramak daha fazla sonuç verebilir.
Çoğu kullanıcı modu hata ayıklayıcı, birden çok nedenden dolayı bu geçişi iyi bir şekilde yerine getirmez (hata ayıklayıcı olmak 32 bitlik bir süreci varsayarken, siz şu anda 64 bit kod, başka bir kullanıcı modu hata ayıklama API'leri bunu desteklemez).
TL; DR: Bu durumun "çözümü", açıkça yapılmış bir hata ayıklayıcı kullanarak hata ayıklamaktır. 32 ve 64 bit aralıklı işlemleri destekleme çabası. Bu genellikle çekirdek modu hata ayıklayıcı için daha kolay olsa da, windbg veya hem 32 hem de 64 bit modlarını destekleyen diğer hata ayıklayıcılar ( x64dbg bunu yapabilmelidir, ancak hiç denemedim x64dbg yorumları bunu yapamaz).
Heaven's gate hakkında kısa bir açıklama
64bit Windows ortamlarında 32bit işlemlere yüklenmiş özel bir DLL var, bu DLL wow64cpu .dll
. Bu DLL, WOW64 büyüsünün çoğundan ve özellikle 32 bit işlemlerde (WOW64-ed süreçler) 32 bitten 64 bit'e geçişin uygulanmasından sorumludur.
Bu zorunludur çünkü işletim sistemi doğal olarak 64 bit, tüm yardımcı programlar, API'ler ve düşük seviyeli işlevler 64 bit kod kullanılarak gerçekleştirilir (aksi takdirde 64 bit işletim sistemlerine sahip olmanın anlamı nedir ??). Bu nedenle, bir WOW64-ed işleminin bir işletim sistemi desteği gerektirdiği her seferinde, önce 32 bit CPU modundan 64 bit CPU moduna çevrilmesi gerekir.
Peki, geçiş nasıl yapılır ve bahsettiğiniz wow64cpu.dll nedir? bununla ne alakası var?
Uzun lafın kısası, fs: [0c0h]
adresindeki değer wow64cpu.dll
içindeki bir adrese ayarlanır. Bu alana WOW32Reserved
adı verilir ve 033
segmentini kullanarak belirli bir adrese uzak bir sıçramayı işaret eder. Segment seçiciyi 33
olarak değiştirmek (32bit kod için kullanılan 23
'den) kod seçiciyi veya temel adreslemeyi değiştirmez, yalnızca GDT girişi, özellikle hedef kodu yürütmek için kullanılır - 4. GDT'yi 6. ile değiştirirsiniz.
4 ve 6 numaralı GDT girişleri yalnızca ayarlanan birkaç bayrakta farklılık gösterir - CPU 16, 32 ve 64 modlarda çalışıyor (evet, bu GDT girişleri yalnızca 32 ve 64 bit modları için ayarlanmış bayraklara sahiptir, ancak 16 bit'e geçiş benzer şekilde sağlanabilir).
Buradan nereye gidebilirim?
Bu büyük ve karmaşık bir konu olduğu için, zaten yaptığımdan daha çok, buradaki alt düzey ayrıntılara dokunmak yerine sizi ilgili makalelere yönlendirmeyi tercih ediyorum. Burada, şeylerin daha teorik yönüyle ilgili birkaç yararlı makale yer almaktadır:
- "
33:
segmentine garip sıçrama" nın açıklaması. - İşlemin perspektifinden tüm WOW64 mekanizmasının açıklaması, bunun gerçekleştiğini görmek için nasıl hata ayıklanacağı da dahil.
- Çok kısa bir açıklama gerçekleşen akış ve tarihsel olarak "Cennetin kapısı" terimini anahtarlayan makale.
- Başka bir ayrıntılı açıklama.
- Windows Internals kitap serisi.
Ek olarak, burada WOW64
-ed 32 bit işlem içinde 64 bit kodun yerel olarak çalıştırılmasına ilişkin birkaç gerçek açık kaynak uygulaması vardır:
- Bu bazı doğrudan 64 bit işletim sistemi işlemlerini uygulayan bir kod parçacığıdır.
- Bu tam anlamıyla bir cennet kapısı uygulamasıdır.
- Bu bir başka, daha sonra, tam anlamıyla cennetin kapısı uygulamasıdır.