MASM32 Assembly ile Windows 32bit mi 64bit mi?

Kategori Assembly
13.09.2018
3327 Okunma

Esen;
Windows işletim sistemimizin kaç bit olduğunu “Windows+Pause” tuş kombinasyonunu kullanarak öğrenebilirsiniz. Ancak bugünkü konumuz, masm32 assembly de kodladığımız uygulamamız ile işletim sistemimizin bit durumunu döndürmek olacak. İnternet’te de değişik kaynaklarda farklı farklı yöntemler bulabilirsiniz. Hadi kodlara dönelim:

GetNativeSystemInfo APIsi Kullanarak

Windows, yazılım geliştirirken kullanabileceğimiz bir yapı sunuyor bize; adı: SYSTEM_INFO
Aşağıda MSDN ağından çektiğim yapının ayrıntılarını görüyorsunuz. Bu yapı birçok harika bilgi için alan yaratıyor. İşlemci seviyesi, “revision” numarası gibi.

Bize gereken ise Windows işletim sisteminin bit durumudur. Bunu da wProcessorArchitecture değişkeninden çekiyoruz:

MSDN’de açıklandığı gibi bu değişken yüklenen işletim sisteminin işlemci mimarisini taşır. O zaman GetNativeSystemInfo APIsini çağıralım:

Bu API tek bir parametre alıyor o da yukarıda bahsettiğim SYSTEM_INFO yapısı. GetNativeSystemInfo koşunca SYSTEM_INFO yapısının içinde tanımlı boş değişkenlere ilgili bilgileri atıyor. Biz de gereksindiğimiz değişkenleri alıp isteğimiz doğrultusunda kullanacağız.

Dikkat ederseniz ebx.SYSTEM_INFO.wProcessorArchitecture içinde bir değer var ve biz bu değeri PROCESSOR_ARCHITECTURE_AMD64 ile karşılaştırıyoruz. Peki bu değerler nereden geliyor? Yeniden SYSTEM_INFO yapımızın MSDN ağına dallanalım ve şunlara bakalım:

PROCESSOR_ARCHITECTURE_AMD64 değeri 9. Karşılaştırma tarafında sistemden çekilen değeri 9 ile karşılaştırıyoruz. Eğer 9 ise sistem 64 bit değilse 32 bit yazdırıyoruz. Aslında daha çok if yapısı kullanılarak diğer seçenekler de ekrana bastırılabilir.

IsWow64Process Kullanarak

IsWow64Process APIsinin yapısı aşağıdaki gibidir. hProcess değeri olarak bir işlem/process veriyoruz. Belirtilen işlem WOW64 altında mı koşuyor? Sorusunu IsWow64Process soruyor ve yanıtını TRUE/FALSE olarak “PBOOL Wow64Process” değişkenine döndürüyor.

WOW64 demek 64bit mimarideki işletim sisteminde varolan ve 32 bitlik uygulamaların da 64bitlik işletim sisteminde çalışmasını sağlayan framework. Eğer benim processim/işlemim bu çatı altında koşuyorsa ben 64bitlik bir işletim sistemi içerisindeyim demektir.

C:\Windows\SysWow64 dizinini denetleyerek

Windows 64 bit sistemlerde “C:\Windows\SysWow64” dizini bulunur. Bu dizin var mı yok mu diye denetlersek sistemin bit seviyesini bulabiliriz.

Not: fexist MASM32 kitaplığında bulunan bir makro. Dizin denetlemsi yapıyor.

hasherezade’nin yöntemini kullanarak

hasherezade’nin belirttiğine göre aşağıdaki kod kronos zararlısından geliyor. Yöntem çok temiz çalışıyor. CS – Code Segment ‘inin verdiği değer 32 bit ya da 64 bit olmasına göre değişir. 32bit sistemlerde 5bitlik bir değer dönerken 64 bit sistemlerde 6 bitlik bir değer dönüyor. Buna göre sistemimizin bit durumunu denetleyebiliyoruz.

[dm]170[/dm]
[dm]171[/dm]

Comments of this post

Henüz yorum bulunmuyor!