Kendi Windows NT Kernelimizi Derleyelim

Bu döküman Tahribat.Com'un ilk Video-Dökümanıdır. Hayırlı Olsun :)

Dökümanın Forum ve Yardım Konusu Linktedir : http://www.tahribat.com/Forum-Dokuman-Kendi-Windows-Nt-Kernelimizi-Derleyelim-147926/

Merhaba arkadaşlar, sizlere pek çoğunuzun bilmediği, ve hatta olmasına ihtimal vermediği bir olayı anlatacağım :) Windows NT 5.2 kernelini derleyeceğiz ve kendi kernelimizi test edeceğiz.

Öncelikle hemen açıklığa kavuşturayım, evet Microsoft NT 5.2'nin kaynak kodlarını çoktan açtı, ancak sadece belirli üniversitelere ve akademik amaçlı. Tabi ki internete de düştü :)

NT 5.2 nedir biraz daha açıklığa kavuşturmak adına, NT Kerneli versiyonları ile Windows versiyonlarını karşılaştıralım.

Windows 2000 NT 5.0
Windows XP NT 5.1
Windows Server 2003 NT 5.2
Windows XP 64 bit NT 5.2
Windows Vista NT 6.0
Windows 7 
NT 6.1
Windows Server 2008 NT 6.1
Windows 8 NT 6.2

İşte Microsoft'un akademik amaçlarla kaynaklarını açtığı kernel NT 5.2 yani Windows Server 2003 ve XP x64 işletim sistemlerinin çekirdeği.

Dolayısıyla bu kernel'i test etmek için, sanal makinaya server 2003 ya da xp 64 kurmalıyız.  Bunları anlatmadan önce, biraz NT kerneli hakkında bilgi vereyim, böylece elimizde neyin kaynak kodu olduğu daha netleşsin.

Windows NT kerneli aşağıdaki isimlerden birisi olabilir.

Ntoskrnl.exe   : Tek işlemcili bilgisayarlar için

Ntkrnlpa.exe   : Tek işlemcili bilgisayarlar için PAE destekli

Ntkrnlmp.exe  : Çok işlemcili bilgisayarlar için

Ntkrpamp.exe : Çok işlemcili bilgisayarlar için PAE destekli

Sonuncusu sadece 32 bit OS lar için geçerlidir zira 64 bit OS lar için PAE ye ihtiyaç yoktur. PAE nedir derseniz tamamen konu dışı olduğu için anlatmayacağım, sadece şunu söyleyim 32 bit işlemcilerin 64 GB a kadar bellek adresleyebilmesini sağlıyor. Normalde bu sınır 4 GB dır.

Nt kerneli gördüğünüz gibi tek bir exe dosyasından ibarettir ancak exe uzantısına aldanmayın, çift tıklayınca çalıştırabileceğiniz programlardan değil :) bir kaç katman içeren ve tüm kernel fonksiyonlarını export eden bir dosya.

Bu arada 64 bit versiyonlarda kernel ismi değişmez ama kernelin kendisi tamamen değişir. Ayrıca bu isimler özgün isimdir, yani kendi bilgisayarınızdaki kerneli bulup (çok işlemcili pc bile olsa ntoskrnl.exe olabilir) sağ tıklayın, ayrıntılardan özgün dosya ismine bakın, kernelin asıl ismi odur.

Bir de kısaca HAL dan bahsetmek istiyorum. Hardware abstraction layer, yani donanım soyutlama katmanı,  kernel'in farklı donanımlarda bile hiç bir değişiklik yapılmaksızın çalışmasını sağlar, yani donanımı soyutlar. Ancak burda donanımdan işlemci yani mimari anlaşılmasın. Mimari kernel'in işidir, ve her mimariye göre kernel değişir, ancak aynı mimaride (x86 örneğin) farklı anakartlar için farklı kerneller üretilmesini engeller. Yani Mimari dışındaki tüm donanım farklılıkları ile kendisi ilgilenir ve kernele standart bir arabirim sunar.

Özetle, donanıma bağımlı olan windows bileşenleri kernel ve hal'dır. Bunlar sayesinde sistemin gerikalanı değiştirilmeksizin, windows farklı mimarilere ve donanımlara uyarlanabilir.

Hal, kernel gibi system32 dizininde bulunur, dosya adı ise hal.dll dir. Tabi bu dosyada alelade bir dll dosyası değildir, isimler kafanızı karıştırmasın, sistemdeki en aşağı seviye kodlar bu dosyada çalışır.

Derliyoruz...

Peki nerede bu kaynak kodlar, öncelikle iyi haber, bildiğiniz gibi Windows'u linux'dan ayıran en önemli özelliği kolay ve kullanışlı olması.  Göreceksiniz ki, windows'un kernelini derlemek, linux da herhangi bir program kurmaktan bile daha kolay :)

Öncelikle aşağıdaki linkten kernel kodlarını ve derleme araçlarını indirin. Evet 15 mb lık bir zip dosyasında hem kernel hem de compiler, assembler, linker vb araçlar, hemde kernel ile ilgili ayrıntılı dökümanlar mevcut.

Ben olayı basitleştirmek adına bir build_x86.bat dosyası hazırladım,  aşağıdaki zip dosyasının içindeki WRK klasörünü C:\ dizini altına kopyalayın, C:\WRK olacak.

http://www.multiupload.com/QHZL1QQFGA

Dökümandaki herşey özgün olduğu gibi site de bana aittir :) Kaynak kodlara gözucuyla baktıysanız devam edelim.

Derlemek için tek yapmanız gereken, C:\WRK dizinine gelip build_x86.bat ı çalıştırmak, derleme işlemi bir kaç dakika sürecektir, devam etmek için bir tuşa basın'ı gördüğünüzde derleme işlemi tamamlanmıştır.

Derledik, peki kernelimiz nerde? C:\WRK\base\ntos\BUILD\EXE dizinine geliyoruz, wrkx86.exe dosyası bizim kernelimizdir.

İsmi neden ntoskrnl.exe gibi değil diye sormayın, zira bu kernel Windows Research Kernel olarak geçiyor ve closed source değil shared source :)

Kendi Kernelimizi Yaratalım Ve Deneyelim

Bu bölümü bir video olarak hazırladım, 30 dakikalık ayrıntılı bir video, sıfırdan tüm adımları gösteriyor. Video da sırasıyla şunları yapıyorum.

  • Kernel'i C:\ ye çıkar
  • Kodu dökümantasyonu ve derleme araçlarını göster
  • Kernel hakkında bilgi ver
  • Yeni kurulmuş temiz bir Windows Server 2003 aç ve göster
  • Kendi derlediğimiz kernel'i ekle ve o kernelden başlat ve göster
  • Kernel'e kod ekle, bu kod sayesinde yeni kernel, içinde tahribat kelimesi geçen hiç bir dosyayı açmayacak. Sistemi bu tahribat kerneli ile başlat sonuçlarını test et.

Evet arkadaşlar videodaki olay bu, benim kurduğum sanal makinanın linkleri aşağıda. Virtualbox varsa direkt çalıştırabilirsiniz.

Sanal makinamız :

http://www.sendspace.com/file/ieg2ax

http://www.sendspace.com/file/xddi2k

 

/Uploads/Media/Video/dokuman/WindowsNtKerneliDerleme.mp4

Tarih:
Hit: 507615
Yazar: Tugberk



Yorumlar


Siftahı yapan siz olun
Yorum yapabilmek için üye girişi yapmalısınız.