Soru:
Windows 32 / 64bit (WOW64) geçişi nasıl araştırılır
Shmuel Fomberg
2017-08-28 16:22:26 UTC
view on stackexchange narkive permalink

Windows WOW64 mekanizması hakkında şaşırtıcı derecede az bilgi var.
Araştırmaya çalışıyorum.

Bu nedenle, 32-ülkede sistem çağrımız olduğunda, FS 'de saklanan bir adresi çağırır ve bu da bizi tuhaf bir jmp ile 033: önek.
Doğru anlarsam, bu atlama bizi 64-land'a aktarıyor, ancak yine de kullanıcı modunda. Çekirdek moduna geçiş daha sonra gerçekleşmeli.

Bu sıçramayı takip etmek istiyorum. Hata ayıklayıcım bunu yapmaz. Bunu nasıl yapabilirim?

x86 hata ayıklayıcı kullanıyor musunuz? hangisi?
Russinovitch ve ark. Tarafından "Windows Internals" ı okudunuz mu? ?
Ayrıca ilgili: https://reverseengineering.stackexchange.com/questions/14848/what-is-this-hidden-stack-used-by-syscalls-on-windows TLDR: WinDbg kullanın.
Bir cevap:
NirIzr
2017-08-28 20:42:42 UTC
view on stackexchange narkive permalink

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:

  1. " 33: segmentine garip sıçrama" nın açıklaması.
  2. İş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.
  3. Çok kısa bir açıklama gerçekleşen akış ve tarihsel olarak "Cennetin kapısı" terimini anahtarlayan makale.
  4. Başka bir ayrıntılı açıklama.
  5. 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:

  1. Bu bazı doğrudan 64 bit işletim sistemi işlemlerini uygulayan bir kod parçacığıdır.
  2. Bu tam anlamıyla bir cennet kapısı uygulamasıdır.
  3. Bu bir başka, daha sonra, tam anlamıyla cennetin kapısı uygulamasıdır.
x64dbg bunu yapamaz. biri x86 ve diğeri x64 için olmak üzere bir çift hata ayıklayıcıdır. ikisini birden yapan değil.
@ShmuelFomberg Hiçbir fikrim yok dediğim gibi açıklama için teşekkürler. Cevabımı düzelteceğim.
WinDbg (x64) bu sorunu çözebilir. Çeşitli teknik nedenlerle x64dbg'de uygulanmadı ...
@mrexodia Şu anda yanıtın belirttiği bu değil mi? Bir şey mi kaçırıyorum?
Derp haklısın (sadece uyandın ve tekrar oku) ... Ancak bu hatayı gidermek için bir çekirdek modu hata ayıklayıcısına ihtiyacınız yok.
Endişelenmeyin;) ve @mrexodia,'nin düzenlediği düzeltme için teşekkürler!
Tam olarak yapmak istediğim şeyi yapan bir kitaplık buldum: https://github.com/rwfpl/rewolf-wow64ext
Oh. Bunlardan birkaçı var ... Cevabımda bağlantı kurmak aklımı geçmedi ...
@ShmuelFomberg Heaven's kapısının üç uygulaması eklendi. İstediğini al!


Bu Soru-Cevap, otomatik olarak İngilizce dilinden çevrilmiştir.Orijinal içerik, dağıtıldığı cc by-sa 3.0 lisansı için teşekkür ettiğimiz stackexchange'ta mevcuttur.
Loading...