Windows Internals Nedir ?

0xd2

Katılımcı Üye
15 Mar 2018
765
211
Merhabalar, Bu gün sizlerle "Windows Internals" konusunu inceleyeceğiz.
Peki nedir bu ?
Kısaca kernel diyelim hiç kafanıza karıştırmaya gerek yok.
Peki neler öğreneceğiz ?
virtual memory, kernel mode ve user mode, win32 api ve dahası.
Tabii bunları anlatırken size üstünkörü bir şekilde kötü amaçlı yazılımı analiz edebilmeyi anlatacağım. Aksi halde bunun için bir kitap yazmamız gerekir.

Ilk başlığımız "Virtual Memory"

Virtual memory
(Sanal bellek) dediğimiz arkadaşımız kısaca direkt olarak fiziksel belleğe direkt göndermek yerine CPU ve işletim sistemi arasında görünmez bir alan oluşturur. Yani kısaca işletim sistemi tarafından hayali bir ortam oluşturulur.

işletim sistemimiz, cpu tarafından çağrılan işlem için bir tablo oluşturur buna "page table" olarak adlandırılır.
Sanal bellek işleyişi bu şekildedir.


Sırada "Kernel ve User Mode"
Kısaca kafanızı karıştırmadan anlatmak gerekirse kernel modunda çalışan uygulamalar sistemde tam yetkiye sahiptir herhangi bir sınırlama olmadan erişim sağlayabilir (rootkit dediğimiz virüs türü kernel mode üzerinde çalışmaktadır). User mode ise doğrudan donanımlara erişemezler. İşletim sistemlerinin api'leri aracılığyla cpu, ram gibi kaynaklara erişim sağlayabilirler. yani sadece kendi kaynaklarında çalışabilirler.

Basit olarak kernel32.dll'i inceleyelim. Böyle bir durumda neler karşımıza çıkabilir neler görebiliriz.
İhtiyaç listemiz: cff explorer ve C:\Windows\System32\Kernel32.dll
Cff explorer uygulamamızı açıp system32 klasöründen kernel32.dll dosyasını seçip açalım. Ardından “Export directory” bölümüne ufak bir tık yapalım ve karşımıza çıkan bölüm -

Üzerinden bu kernel32.dll arkadaşımızın ne tür yetkileri olduğunu, nelere eriştiğini, neleri değiştirebileceğini rahatlıkla görebiliriz. Bunu herhangi bir virüs üzerinde tekrar olarak gözlemleyebilirsiniz.

Evet şimdi sırada Win32 API’yi anlatalım.

Windows işletim sisteminde çok fazla API bulunmaktadır. Lakin en popüleri Win32 Api olarak söyleyebiliriz. Bu api hem 32 bit hem 64 bit üzerinde sorunsuz çalışmaktadır. Bir program/yazılım yaparken aktif olarak winapi kullanırız ve tahmin edeceğiniz üzere bu API’yi kötü amaçlı yazılımlarda kullanır.

Zararlı analizi yaparken karşınıza bol bol API çıkar. Lakin bu yazılımın zararlı olduğu anlamına gelmez günlük yaşantımızda kullandığımız bir çok program bunu kullanıyor. Bunun kötü amaçlı bir yazılım olduğunu anlamak için API’nin kullanım şeklini incelememiz daha doğru olacaktır.

Peki bunun nasıl kötü amaçlı bir yazılım olduğunu anlayacağız ?

API Logları (Obtaining API Logs) ile bu sorunu çözeceğiz;
Exe üzerinde PE dosyası ile analizi yaparken API adlarıyla karşılaşabiliriz. Ancak API’lere statik olarak bakmak yukarda belirttiğimiz gibi işimize pek yaramaz. Bu noktada bizim ihtiyacımız olan şey dinamik analizdir veya debug yaparak tersine mühendislik ile uğraşmamız gerekecektir.

API Loglarına bakarken imdadımıza APIMiner koşuyor. APIMiner sayesinde dinamik analiz yaparken API’lerin loglarına ulaşabiliyoruz. APIMiner Github: GitHub - poona/APIMiner: API Logger for Windows Executables

Eh sene olmuş 2022 Windows işletim sistemi ve SDK’ları tarafından gelen yüzlerce WIN32 Api mevcut. Şimdi bu API’lere nerede nasıl ulaşabiliriz ve bu arkadaşlarımızın kullanımlarını inceleyelim.

Win32 DLLleri
Win32 API’lerini “C:\Windows\System32” klasöründe bulabiliriz. Yani kısaca system32. Yukarda gösterdiğimiz gibi tekrardan CFF explorer ile kernel32.dll dosyasını inceleyebilirsiniz.

Aşağıda belirttiğim .DLL dosyaları hem Windows’un çalışması için gereken hemde virüslerimizin sıkça kullandığı dll dosyalarıdır bknz:

NTDLL.DLL

KERNEL32.DLL

KERNELBASE.DLL

USER32.DLL

NETAPI32.DLL

Ve uzar gider...

Bunlarda SDK’lar tarafından (visual studio ile gelen dll dosyalarını örnek göstereceğim) gelen dll dosyaları. Sonlarında bulunan 60, 120, 20... Gibi bulunan sayılar SDK’ların sürümlerini belirtmektedir.

MSVCRT.DLL

MSVCP100.dll

MSVBVM60.DLL

VCRUNTIME140.DLL

C# VB.NET gibi dillerde yazılmış programlar .NET framework’ünün kendi dll’lerini kullanır. An Yukarıda bahsettiğimiz dll’ler genel olarak sürekli karşımıza çıkacaktır. Şimdi ise Win32 API’leri hakkında bilgi toplamak için MSDN kullanarak DLL’lerin ne gibi özellikleri olduğunu neler yapabilecekleri gibi bilgileri toplayacağız.

MSDN Kullanarak Win32 API hakkında bilgi toplamak
Bir API hakkında bir şey öğrenmek için en ama en yararlı yer MSDN’dir. (Microsoft software developer network) Zaten google (veyahut diğer arama motorları) üzerinde arattığımız zaman en başta çıkmaktadır.


CreateFile() Win32 API için MSDN belgesi


Bu günlük bu kadar yeter okuduğunuz için teşekkürler hepinize iyi günler dilerim.​
 

JohnWick51

Uzman üye
20 Mar 2022
1,866
770
28
Merhabalar, Bu gün sizlerle "Windows Internals" konusunu inceleyeceğiz.
Peki nedir bu ?
Kısaca kernel diyelim hiç kafanıza karıştırmaya gerek yok.
Peki neler öğreneceğiz ?
virtual memory, kernel mode ve user mode, win32 api ve dahası.
Tabii bunları anlatırken size üstünkörü bir şekilde kötü amaçlı yazılımı analiz edebilmeyi anlatacağım. Aksi halde bunun için bir kitap yazmamız gerekir.

Ilk başlığımız "Virtual Memory"

Virtual memory
(Sanal bellek) dediğimiz arkadaşımız kısaca direkt olarak fiziksel belleğe direkt göndermek yerine CPU ve işletim sistemi arasında görünmez bir alan oluşturur. Yani kısaca işletim sistemi tarafından hayali bir ortam oluşturulur.

işletim sistemimiz, cpu tarafından çağrılan işlem için bir tablo oluşturur buna "page table" olarak adlandırılır.
Sanal bellek işleyişi bu şekildedir.


Sırada "Kernel ve User Mode"
Kısaca kafanızı karıştırmadan anlatmak gerekirse kernel modunda çalışan uygulamalar sistemde tam yetkiye sahiptir herhangi bir sınırlama olmadan erişim sağlayabilir (rootkit dediğimiz virüs türü kernel mode üzerinde çalışmaktadır). User mode ise doğrudan donanımlara erişemezler. İşletim sistemlerinin api'leri aracılığyla cpu, ram gibi kaynaklara erişim sağlayabilirler. yani sadece kendi kaynaklarında çalışabilirler.

Basit olarak kernel32.dll'i inceleyelim. Böyle bir durumda neler karşımıza çıkabilir neler görebiliriz.
İhtiyaç listemiz: cff explorer ve C:\Windows\System32\Kernel32.dll
Cff explorer uygulamamızı açıp system32 klasöründen kernel32.dll dosyasını seçip açalım. Ardından “Export directory” bölümüne ufak bir tık yapalım ve karşımıza çıkan bölüm -

Üzerinden bu kernel32.dll arkadaşımızın ne tür yetkileri olduğunu, nelere eriştiğini, neleri değiştirebileceğini rahatlıkla görebiliriz. Bunu herhangi bir virüs üzerinde tekrar olarak gözlemleyebilirsiniz.

Evet şimdi sırada Win32 API’yi anlatalım.

Windows işletim sisteminde çok fazla API bulunmaktadır. Lakin en popüleri Win32 Api olarak söyleyebiliriz. Bu api hem 32 bit hem 64 bit üzerinde sorunsuz çalışmaktadır. Bir program/yazılım yaparken aktif olarak winapi kullanırız ve tahmin edeceğiniz üzere bu API’yi kötü amaçlı yazılımlarda kullanır.

Zararlı analizi yaparken karşınıza bol bol API çıkar. Lakin bu yazılımın zararlı olduğu anlamına gelmez günlük yaşantımızda kullandığımız bir çok program bunu kullanıyor. Bunun kötü amaçlı bir yazılım olduğunu anlamak için API’nin kullanım şeklini incelememiz daha doğru olacaktır.

Peki bunun nasıl kötü amaçlı bir yazılım olduğunu anlayacağız ?

API Logları (Obtaining API Logs) ile bu sorunu çözeceğiz;
Exe üzerinde PE dosyası ile analizi yaparken API adlarıyla karşılaşabiliriz. Ancak API’lere statik olarak bakmak yukarda belirttiğimiz gibi işimize pek yaramaz. Bu noktada bizim ihtiyacımız olan şey dinamik analizdir veya debug yaparak tersine mühendislik ile uğraşmamız gerekecektir.

API Loglarına bakarken imdadımıza APIMiner koşuyor. APIMiner sayesinde dinamik analiz yaparken API’lerin loglarına ulaşabiliyoruz. APIMiner Github: GitHub - poona/APIMiner: API Logger for Windows Executables

Eh sene olmuş 2022 Windows işletim sistemi ve SDK’ları tarafından gelen yüzlerce WIN32 Api mevcut. Şimdi bu API’lere nerede nasıl ulaşabiliriz ve bu arkadaşlarımızın kullanımlarını inceleyelim.

Win32 DLLleri
Win32 API’lerini “C:\Windows\System32” klasöründe bulabiliriz. Yani kısaca system32. Yukarda gösterdiğimiz gibi tekrardan CFF explorer ile kernel32.dll dosyasını inceleyebilirsiniz.

Aşağıda belirttiğim .DLL dosyaları hem Windows’un çalışması için gereken hemde virüslerimizin sıkça kullandığı dll dosyalarıdır bknz:

NTDLL.DLL

KERNEL32.DLL

KERNELBASE.DLL

USER32.DLL

NETAPI32.DLL

Ve uzar gider...

Bunlarda SDK’lar tarafından (visual studio ile gelen dll dosyalarını örnek göstereceğim) gelen dll dosyaları. Sonlarında bulunan 60, 120, 20... Gibi bulunan sayılar SDK’ların sürümlerini belirtmektedir.

MSVCRT.DLL

MSVCP100.dll

MSVBVM60.DLL

VCRUNTIME140.DLL

C# VB.NET gibi dillerde yazılmış programlar .NET framework’ünün kendi dll’lerini kullanır. An Yukarıda bahsettiğimiz dll’ler genel olarak sürekli karşımıza çıkacaktır. Şimdi ise Win32 API’leri hakkında bilgi toplamak için MSDN kullanarak DLL’lerin ne gibi özellikleri olduğunu neler yapabilecekleri gibi bilgileri toplayacağız.

MSDN Kullanarak Win32 API hakkında bilgi toplamak
Bir API hakkında bir şey öğrenmek için en ama en yararlı yer MSDN’dir. (Microsoft software developer network) Zaten google (veyahut diğer arama motorları) üzerinde arattığımız zaman en başta çıkmaktadır.


CreateFile() Win32 API için MSDN belgesi


Bu günlük bu kadar yeter okuduğunuz için teşekkürler hepinize iyi günler dilerim.​
Ellerine saglik
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.