Neler yeni

Yazılım Forum

Tüm özelliklerimize erişmek için şimdi bize katılın. Kayıt olduktan ve giriş yaptıktan sonra konu oluşturabilecek, mevcut konulara yanıt gönderebilecek, itibar kazanabilecek, özel mesajlaşmaya erişebilecek ve çok daha fazlasını yapabileceksiniz! Bu hizmetlerimiz ise tamamen ücretsiz ve kurallara uyulduğu sürece sınırsızdır, o zaman ne bekliyorsunuz? Hadi, sizde aramıza katılın!

Windows Taşınabilir Çalıştırılabilir (PE) Formatının Derinlemesine Analizi ve Sırları

Windows işletim sisteminin kalbinde yer alan ve çalıştırılabilir dosyaların, dinamik bağlantı kütüphanelerinin (DLL) ve diğer bazı sistem dosyalarının temelini oluşturan yapıya Taşınabilir Çalıştırılabilir (Portable Executable - PE) Formatı denir. Bu format, programların belleğe nasıl yükleneceğini, fonksiyonların nasıl içe ve dışa aktarılacağını, kaynakların nasıl depolanacağını ve programın yürütülmesi için gereken diğer kritik bilgileri tanımlayan karmaşık bir yapıdır. PE formatını anlamak, tersine mühendislik (reverse engineering), kötü amaçlı yazılım analizi (malware analysis) ve sistem programlama gibi alanlarda temel bir yetkinliktir.

Bir PE dosyasının genel yapısı, geçmişten günümüze Windows'un evrimini yansıtan katmanlı bir düzeni takip eder. Bu katmanlar, dosyanın okunabilirliğini ve işlevselliğini sağlayan bir dizi başlıktan (header) ve bölümden (section) oluşur. Genel olarak, bir PE dosyası şu ana bileşenlerden meydana gelir:


  • [li]DOS Header: Geriye dönük uyumluluk için ilk başlık.[/li]
    [li]DOS Stub Programı: DOS ortamında çalıştırıldığında bir mesaj gösteren küçük bir program.[/li]
    [li]NT Headers: PE dosyasının asıl yapısını ve özelliklerini tanımlayan ana başlık bloğu.[/li]
    [li]Section Headers: Dosyanın kod, veri ve kaynak gibi farklı mantıksal bölümlerini tanımlar.[/li]
    [li]Sections (Bölümler): Gerçek kodun, verinin ve kaynakların bulunduğu alanlar.[/li]

Şimdi bu bileşenleri daha ayrıntılı inceleyelim:

1. DOS Header (IMAGE_DOS_HEADER):
Her PE dosyasının başında yer alan bu yapı, eski MS-DOS sistemleriyle geriye dönük uyumluluğu sağlamak için tasarlanmıştır. En kritik alanı, bir
Kod:
WORD
değeri olan
Kod:
e_magic
alanıdır ve bu değer her zaman
Kod:
0x5A4D
(ASCII'de 'MZ') olmalıdır. Bu imza, bir dosyanın geçerli bir DOS veya PE yürütülebilir dosyası olduğunu gösterir. Diğer önemli bir alan ise
Kod:
e_lfanew
'dir; bu, DOS başlığının başlangıcından NT Başlıklarının (NT Headers) başlangıcına kadar olan bayt cinsinden ofseti gösterir. Modern Windows sistemleri bu başlığı genellikle atlar ve doğrudan NT Başlıklarına geçer.

2. DOS Stub Programı:
Kod:
IMAGE_DOS_HEADER
ile
Kod:
NT Headers
arasında yer alan bu küçük program genellikle "This program cannot be run in DOS mode." (Bu program DOS modunda çalıştırılamaz.) mesajını gösteren basit bir yürütülebilir koddur. Günümüzde pratik bir işlevi olmasa da, PE formatının tarihi kökenlerini temsil eder.

3. NT Headers (IMAGE_NT_HEADERS):
Bu, PE dosyasının kalbidir ve dosyanın Windows işletim sistemi tarafından nasıl yorumlanacağını belirleyen hayati bilgileri içerir. Üç ana bileşeni vardır:


  • [li]Signature (İmza): Dört baytlık
    Kod:
    0x00004550
    değeri ('PE\0\0' olarak okunur). Bu imza, dosyanın bir PE dosyası olduğunu kesin olarak doğrular.[/li]
    [li]File Header (IMAGE_FILE_HEADER): CPU mimarisi (
    Kod:
    Machine
    ), bölüm sayısı (
    Kod:
    NumberOfSections
    ), zaman damgası (
    Kod:
    TimeDateStamp
    ) ve dosyanın niteliklerini (
    Kod:
    Characteristics
    – DLL mi, yürütülebilir mi vb.) içeren temel bilgileri barındırır. Örneğin, bir dosyanın DLL olup olmadığını
    Kod:
    Characteristics
    bayraklarından anlayabiliriz.[/li]
    [li]Optional Header (IMAGE_OPTIONAL_HEADER): Adının aksine, bu başlık kesinlikle isteğe bağlı değildir ve PE dosyasının bellekte nasıl yükleneceği ve yürütüleceği hakkında kritik bilgiler içerir. Giriş noktası adresi (
    Kod:
    AddressOfEntryPoint
    ), programın bellekte yükleneceği tercih edilen adres (
    Kod:
    ImageBase
    ), bölüm ve dosya hizalama değerleri (
    Kod:
    SectionAlignment
    ,
    Kod:
    FileAlignment
    ) gibi önemli veriler buradadır. Ayrıca, işletim sistemi versiyonları ve alt sistem bilgileri de bu başlıkta bulunur. Bu başlığın en önemli kısımlarından biri de Data Directories dizisidir. [/li]

Veri Dizinleri (Data Directories):
Kod:
IMAGE_OPTIONAL_HEADER
yapısının sonunda yer alan bu dizin, PE dosyasının içerdiği çeşitli tabloların (import, export, kaynak vb.) adreslerini ve boyutlarını tutan bir yapıdır. Her biri
Kod:
IMAGE_DATA_DIRECTORY
yapısıdır ve sanal adres (RVA) ve boyut içerir. En sık karşılaşılan veri dizinleri şunlardır:


  • [li]Export Table: Modülün dışa aktardığı fonksiyonların ve değişkenlerin listesi. Diğer programlar veya DLL'ler bu tablolar aracılığıyla fonksiyonları çağırabilir.[/li]
    [li]Import Table: Modülün diğer DLL'lerden içe aktardığı fonksiyonların listesi. Bir programın dış fonksiyonları nasıl çağırdığını gösterir. Import Address Table (IAT) özellikle dinamik olarak yüklenen fonksiyonların adreslerinin çalışma zamanında çözümlenmesi için kritik öneme sahiptir.[/li]
    [li]Resource Table: Programın kullandığı ikonlar, menüler, stringler, dialog kutuları gibi kaynakların bulunduğu yerdir.[/li]
    [li]Exception Table: Özel durum işleyicileri (exception handlers) ile ilgili bilgileri içerir.[/li]
    [li]Certificate Table: Dosya bütünlüğünü ve orijinalliğini doğrulamak için kullanılan dijital imzaları içerir.[/li]
    [li]Base Relocation Table: Programın tercih edilen
    Kod:
    ImageBase
    adresine yüklenemediği durumlarda adres sabitlemelerini (relocations) yapmak için gereken bilgileri tutar. Bu, programın bellekte herhangi bir yere yüklenebilmesini sağlar.[/li]
    [li]Debug Table: Hata ayıklama bilgileri.[/li]
    [li]TLS (Thread Local Storage) Table: İş parçacığına özgü veri depolama için gerekli bilgileri içerir.[/li]

Bu dizinler hakkında daha fazla detay için Microsoft'un PE Format Dokümantasyonuna başvurulabilir.

4. Section Headers (Bölüm Başlıkları):
Kod:
NT Headers
'dan hemen sonra gelen bu başlıklar dizisi, PE dosyasının her bir mantıksal bölümü hakkında bilgi sağlar. Her
Kod:
IMAGE_SECTION_HEADER
yapısı, bölümün adı (örneğin, ".text", ".data"), sanal boyutu (
Kod:
VirtualSize
), sanal adresi (
Kod:
VirtualAddress
), ham veri boyutu (
Kod:
SizeOfRawData
), ham verinin dosyadaki ofseti (
Kod:
PointerToRawData
) ve bölümün özelliklerini (
Kod:
Characteristics
– okunabilir mi, yazılabilir mi, yürütülebilir mi vb.) içerir. Bu başlıklar, işletim sisteminin her bir bölümü belleğe nasıl yükleyeceğini ve hangi izinlerle erişeceğini belirlemesine olanak tanır.

5. Sections (Bölümler):
PE dosyasının gerçek kodunu, verisini ve kaynaklarını barındıran asıl alanlardır. Bölüm başlıklarında tanımlanan özelliklere göre belleğe yüklenirler. Tipik bölümler şunlardır:


  • [li].text veya .code: Programın yürütülebilir makine kodunu içerir.[/li]
    [li].rdata: Salt okunur veri (read-only data) içerir. Sabitler, string değişmezleri, import/export tabloları gibi veriler buradadır.[/li]
    [li].data: Başlatılan, okunabilir ve yazılabilir veriyi içerir (global değişkenler gibi).[/li]
    [li].bss: Başlatılmamış veriyi içerir. Bu bölüm dosya üzerinde yer kaplamaz, bellekte ayrılır.[/li]
    [li].rsrc: Programın kullandığı tüm kaynakları (ikonlar, imleçler, bitmapler, dialoglar, string tabloları) barındırır.[/li]
    [li].idata: İçe aktarılan (imported) fonksiyonların adları ve DLL referansları gibi import verileri.[/li]
    [li].edata: Dışa aktarılan (exported) fonksiyonların adları ve giriş noktaları gibi export verileri.[/li]
    [li].reloc: Taban adresi sabitleme (base relocation) verileri.[/li]

RVA (Relative Virtual Address) ve VA (Virtual Address) İlişkisi:
PE formatını anlamanın temel taşlarından biri de adresleme mantığıdır.
RVA, bir modülün bellekte yüklendiği başlangıç adresi (
Kod:
ImageBase
) baz alınarak hesaplanan göreceli bir adrestir.
Örneğin, bir fonksiyonun RVA'sı 0x1000 ise ve modül 0x400000 adresine yüklendiyse, fonksiyonun gerçek sanal adresi (VA) 0x401000 olacaktır. Bu göreceli adresleme, programın bellekte farklı adreslere yüklenebilmesine olanak tanır, bu da modern işletim sistemlerinin bellek yönetiminde esneklik sağlar ve güvenlik mekanizmalarına (ASLR - Address Space Layout Randomization) yardımcı olur.

Malware Analizindeki Önemi:
Kötü amaçlı yazılımlar genellikle PE formatının yapısını manipüle ederek tespit edilmekten kaçınmaya çalışır. Örneğin, bir zararlı yazılım yeni bölümler ekleyebilir (section injection), Import Address Table (IAT)'ı ele geçirebilir (IAT hooking) veya PE başlıklarındaki bilgileri tahrif edebilir. Bu tür saldırıları tespit etmek ve analiz etmek için PE formatının her ayrıntısını bilmek kritik öneme sahiptir. Tersine mühendisler, yürütülebilir dosyanın nasıl çalıştığını anlamak için bu formatı adım adım inceler, potansiyel güvenlik açıklarını veya kötü niyetli davranışları ortaya çıkarır.

Sonuç:
PE formatı, Windows işletim sisteminin karmaşık mimarisinin temel bir parçasıdır. Geriye dönük uyumluluktan modern güvenlik özelliklerine kadar birçok kavramı bünyesinde barındırır. Bu formatın derinlemesine anlaşılması, sadece bir teknik bilgi birikimi değil, aynı zamanda yazılım güvenliği, sistem programlama ve kötü amaçlı yazılım analizinde ileri düzeyde yetkinlik kazanmanın anahtarıdır. Windows üzerinde çalışan herhangi bir programın "nasıl" çalıştığını merak eden herkes için PE formatının sırlarını çözmek, gerçek bir aydınlanma deneyimi sunacaktır.
 
shape1
shape2
shape3
shape4
shape5
shape6
Üst

Bu web sitenin performansı Hazal Host tarafından sağlanmaktadır.

YazilimForum.com.tr internet sitesi, 5651 sayılı Kanun’un 2. maddesinin 1. fıkrasının (m) bendi ve aynı Kanun’un 5. maddesi kapsamında Yer Sağlayıcı konumundadır. Sitede yer alan içerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır.

YazilimForum.com.tr, kullanıcılar tarafından paylaşılan içeriklerin doğruluğunu, güncelliğini veya hukuka uygunluğunu garanti etmez ve içeriklerin kontrolü veya araştırılması ile yükümlü değildir. Kullanıcılar, paylaştıkları içeriklerden tamamen kendileri sorumludur.

Hukuka aykırı içerikleri fark ettiğinizde lütfen bize bildirin: lydexcoding@gmail.com

Sitemiz, kullanıcıların paylaştığı içerik ve bilgileri 6698 sayılı KVKK kapsamında işlemektedir. Kullanıcılar, kişisel verileriyle ilgili haklarını KVKK Politikası sayfasından inceleyebilir.

Sitede yer alan reklamlar veya üçüncü taraf bağlantılar için YazilimForum.com.tr herhangi bir sorumluluk kabul etmez.

Sitemizi kullanarak Forum Kuralları’nı kabul etmiş sayılırsınız.

DMCA.com Protection Status Copyrighted.com Registered & Protected