ÇALIŞTIRILABİLİR WİNDOWS DOSYA FORMATI  (PORTABLE EXECUTABLE FİLE FORMAT)-2

12.01.2010

Serimizin ikinci yazısında yine beraberiz. Umarım ilk yazımız sizleri birazda olsun nette gördüğünüz tonlarca aynı yazı ve bilgi monotonluğundan kurtarmış ve dosyaların sadece bir tıklamayla açılan programlar olmadığını size hatırlatmıştır Unutmayalım ki program dünyasında gerçekten işlerin nasıl yürüdüğünü anlamak istiyorsanız sığ sularda yüzmek değil derin sularda dalmak zorundasınızdır. Bu yazıdaki amacım ilk yazıdaki kavramlara uzak olan yada içine sindirememiş kişilere yardımcı olmaktır aslında açıklama yazısı da diyebiliriz kısaca

Şimdi öğrendiğimiz bilgileri şöyle bi toparlayıp özetleyecek olursak; Öncelikle Bir PE dosyasında windows’un anlayabileceği bir düzen olmalıdır. Çok basit şekilde bunu şöyle örnekleyelim; Şimdi MASM 32 yi çalıştırıp aşağıdaki kodu yazalım ( bunu herangi bir programala diliylede yazabilirsiniz bu fark etmez zira derleyici sonuçta bunu yine de Windows’un anlayabileceği bir yapıya yani PE yapısına çevirecektir tabiî ki eğer windowsa program yazıyorsanız )

Şekil 1

Yan tarafta Masm32 ile yazılmış programcılığa yeni adım atan birinin bile bildiği basit bir programcığı görüyoruz. Şimdi bunu derleyip exe dosya ( Aslında PE Dosya ) yapalım ve sonrada bu exe dosyamıza “deneme.exe” ismini verdikten sonra çift tıklayıp çalıştıralım

Şekil 2

 

 

Görüldüğü üzere bu yazdığımız programı derleyip çalıştırdığımızda ekrandaki görüntüyü alıyoruz yani mesaj başlığı ve içindede mesaj yazısı olan boş bir pencere . Şimdi Derin sulara inmek için bu kadar sığ sularda gezinti yeterli. Hadi derinlere gidelim .. Şimdi satır satır gidelim; ne oldu da program derlenince Windows bunu anladı ve bu şekilde çalıştırıp bize sundu ?? . Çok basit sadece yazılan programla derleyici sayesinde ortak bir bağ kurdu ve onu anladı. Biz programı yazdıktan sonra derleyiciler programı derlerlerken aslında PE dosya yapısında Windows’un anlayabileceği şekilde dosyayı oluştururular. Bu yapıyı az sonra daha da açacağım ama unutmayalım ki yazdığımız dil ne olursa olsun sonuçta Windows için program yapıyorsak tüm programların derleyicilerinin yaptığı iş hep aynıdır yani Windows’un program yürütücüsü daha doğrusu program yükleyicisinin anlayabileceği bir dilde düzenleme yapmak.. Biz “deneme.exe” yi Mouse ile çift tıkladığımızda işte derlenmiş exe programımız tıklamayla beraber aslında Windows yükleyicisini (Loader) devreye sokar ve Yükleyici o programın Windows işletim sistemiyle uyumluluğunu denetleyip programı hafızaya belli kurallar içinde yükleyerek çalıştırır . Şimdi hala tam derine inmedik buraya kadarını zaten biliyoduk öyle değil mi? Hadi o zaman ekte size verdiğim “Deneme.exe” OllyDebug ile açıp dosya yapısını iyice inceleyelim.

Şekil 3

Yazdığımız programı açık şekilde OllyDebug ta görebiliyoruz şimdi Dump ekranından dosyanın başladığı ilk kodlara gidelim . Önce OllyDebugtaki memory (“M” ) butonuna basıp aşağıdaki görüntüyü alalım.

Şekil 4

Şimdi de işaretli yere yani “PE Header” yazan yere çift tıklayıp aşağıdaki görüntüyü alalım.

Şekil 5

Evet artık derinlerdeyiz. Şimdi birinci dersten hatırlayalım PE dosya yapısını. Derlenmiş bir programda önce Dos MS Header denilen bir başlık bölümü ve onu takip eden DOS stub bölümü olurdu. Dos MS Header ascii “MZ” karakterini içererek başlardı. İşte adresi OllyDebug bize gösteriyor bile..400000 .. Bu başlık aslında DOS içindir yani şöyle düşünelim. Windows Yükleyicisi “deneme.exe” programını çalıştırdığında satır satır dosyayı tararken önce bu başlığa bakar ama bu başlıkla ve sonrası DOS Stub ile işi yoktur normalde. Çünkü bu başlık DOS içindir ve DOS işletim sistemi bu dosyayı okuyup çalıştırdığında başlıktaki bilgilerden sonra DOS stub bölümüne geçer ama Windows Yükleyicisi için MS DOS stubun bi önemi yoktur onu sadece DOS MS Headerın sonundaki PE dosya ofsetini veren değer ilgilendirmektedir. Özetlersek “Deneme.exe” dosyasını MS DOS işletim sisteminde çalıştırdığımızda Dos MS Header ve sonra DOS stub çalışır ve program sonlanır . ve DOS ekranında Dos Stub’da yazan “Bu bir Windows programıdır DOS’ta çalışmaz ” gibi bir yazı çıkarır . Aynı programı Windowsta çalıştırdığımızda ise Windows Yükleyici Dos MS Header bölümünün sonundaki ofset değerine bakarak ( virtual address ) Dos MS Header’a bu değeri ilave edip PE Header ‘a gider. Yine yukardaki şekle bakarsak 0040003C adresinde offset to PE Signature yazısı bize PE Headarın adresini verir . 0040003C adresinde görünen değer “000000B0” dır yani 00400000 + 000000B0 = 004000B0

İşte bu 004000B0 değeri PE Headerin adresidir.

Yukardaki şekilde OllyDebug Dump ekranında Dos MS Header ın satır satır açılımını merak eden olabilir diye şimdi bunları da yazıyorum.

DOS_MS
HEADER

DOS EXE İşareti

00400000  ASCII "MZ"

DOS_PartPag

00400002  DW 0090

DOS_PageCnt

00400004  DW 0003

DOS_ReloCnt

00400006  DW 0000

DOS_HdrSize

00400008  DW 0004

DOS_MinMem

0040000A  DW 0000

DOS_MaxMem

0040000C  DW FFFF

DOS_ReloSS

0040000E  DW 0000

DOS_ExeSP

00400010  DW 00B8

DOS_ChkSum

00400012  DW 0000

DOS_ExeIPP

00400014  DW 0000

DOS_ReloCS

00400016  DW 0000

DOS_TablOff

00400018  DW 0040

DOS_Overlay

0040001A  DW 0000

?
Ayrılmış  word ’ler
?

0040001C  DB 00
?
?
?
0000003B  DB 00
 

PE işaretinin adresi

0000003C  DD 000000F0

DOS_STUB

 

00400040  
­?
.?.?!?\L?!This program canno

00400060  t be run in DOS mode....$.......

Şekil 6

 

Daha da açarsak ;

00400000 word 'MZ' veya 'ZM', DOS EXE tanıtıcısı
00400002 word Programın belleğe yüklenecek miktarı MOD 512
00400004 word Programın belleğe yüklenecek miktarı DIV 512
00400006 word Yeniden konumlandırılacak adres sayısı
00400008 word Exe başlığı oluşturan paragraf sayısı
0040000A word Minimum gerekli ek paragraf sayısı
0040000C word Maksimum gerekli ek paragraf sayısı
0040000E word Program çalıştırılınca SS içeriği
00400010 word Program çalıştırılınca SP içeriği
00400012 word Checksum
00400014 word Program çalışınca IP değeri
00400016 word Program çalışınca CS içeriği
00400018 word Yeniden konumlandırma tablosunun adresi
0040001A word Overlay sayısı
0040001C 4 byte Ayrılmış 00400020 word OEM tanıcıtıcısı
00400022 word OEM bilgisi 00400024 word Ayrılmış bölüm
0040003C dword NE/PE.. başlığın adresi

İşte bu kadar . Sanırım Ms Dos Header olayını bitirdik . Şimdi OllyDebug CPU ekranında DUMP bölümüne gelip sağ tık >Go to>expression> 004000B0 yazın

Şekil 7

ve aşağıdaki şekle bakın

Şekil 8

Gördüğünüz gibi PE yazısıyla beraber DUMP Ekranında PE Header karşınızda saygıyla size bakmaktadır ama hala garip bir şeyler vardır çünkü DUMP Ekranında PE Headeri görüyoruz ve Windows yükleyicinin buraya kadar çalışmasını anladıkda ee ama yukardaki CPU ekranında programımızın esas çalıştığı başlama adresi 00401000 gözüküyor ??? Evet haklısınız ama unutmayalım daha PE Headerdayız ve henüz programın başladığı yere ulaşmadık tabiî ki şimdilik Hadi derinlerdeyiz ama yeterince değil. Şimdi de ilk derse dönüp Dos MS Header denilen bir başlık bölümü ve onu takip eden DOS stub bölümünden sonra ne geliyordu bir hafızamızı zorlayalım bakalım.. Evet sanırım cevabınız PE Header ve sonrasındada Section tabloları .. Şimdi PE headerda ne var neler oluyor programlar nasıl burada işlem görüyor ona bakalım. Hatırlarsak küçük örneğimizde Windows yükleyicisiyle PE Headera kadar gelmiştik. Önce bize daha iyi yardımcı olsun diye olly debugdaki memory ekranına tekrar gidelim ( Şekil 5 ) ve ekranı kaydırıp biraz aşağılara bakalım.

Şekil 9

İşte gerçekten Dipteyiz şimdi. Belki de crackingde en önemli yerlerden biridir burası. Zira bu gördüğünüz kodlardan bir çok koruma yöntemleri ve aldatma taktikleri uygulanmakta ve programlarda buradaki birçok değer değiştirilerek program kodlarını OllyDebug gibi debuggerlerden koruma yöntemleri yapılmaktadır. Tabiî ki bu olayın bir boyutudur ama bizim için eğer amacımız dosya yapısını öğrenmekse bu bölüm daha da önemlidir. Zira neredeyse programın tüm geçerlilik kontolü bu bölümde yapılmakta. Windows Yükleyicisinin buradaki değerlere göre geçerlilik kontolü ile section tablolar ve diğer bölümlere geçilebilmektedir . Şimdi bunları inceleyeceğiz ama tabiî ki diğer yazımızda :)

Diğer konularla ilgili 3.yazıda görüşmek üzere sevgiyle kalın

b1u3D4rK,darkshade,zugo,Gırgır,Caliber

hiaxi,MoNZa,mendenn

blue_devil, rvaZero

and All GencliQ CT members...

[GencliQ CT Home Page]

Bu programı kullanarak para kazanıyorsanız lütfen satın alın. Bu yazının yazılma amacı program yazanlara programlarını daha iyi korumaları konusunda yol göstermektir. Lisanssız kullanımda Dokümanı hazırlayan sorumlu değildir.
Diyeceğim şudurki: Emek verilipte yapılmış bir şeyi çalma, onu satın al.


_CC_
Web: www.trgct.com