Image

Malware giriş.

Malware

BlackNullSec Path #: PE Parsing

🚀En basit tanım: PE Parsing = Byte dizisini anlamlı yapılara dönüştürmek.

Yani:

Diskte duran .exe dosyası aslında şudur:
4D 5A 90 00 03 00 00 00 ...
CPU için bu sadece byte’dır.

🎯Ama Windows şunu yapar:

"Bu byte’lar DOS HEADER"
"Bu byte’lar NT HEADER"
"Bu byte’lar SECTION"

PE Parsing = “byte yorumlama sanatı”

KRİTİK DÜŞÜNCE

Bir .exe dosyası:
"Düzensiz veri değil." Aslında:
"Kurallı memory layout" tır. Yani PE dosyası: "STRUCT’ların art arda dizilmiş halidir."

PE Parsing'in Gerçek Akışı

Image placeholder

EN TEMEL YAPI

1. DOS HEADER

PE dosyasının başlangıcıdır.
İlk 2 byte: "4D 5A" ASCII: "MZ" Windows şunu der: “Tamam bu executable olabilir.” Ama asıl önemli alan: "e_lfanewPE dosyasının başlangıcıdır." Ama asıl önemli alan: "e_lfanew"

e_lfanew NEDİR?

Bu alan:
"NT Header’ın offset’i" dir.
Yani:
“Asıl PE yapısı burada başlıyor.” demektir.

ÖRNEK

Farz et:
"e_lfanew = 0x80" Bu ne demek?
Şu demek:
"buffer + 0x80" adresinde:
"PE\0\0" imzası var.

NEDEN KRİTİK?

Çünkü DOS HEADER sadece giriş kapısıdır. Gerçek PE burada başlar:
"IMAGE_NT_HEADERS"

KRİTİK MANTIK

Image placeholder

Çünkü burada:

Image placeholder

BUFFER + OFFSET MANTIĞI

Image placeholder

demek:
“Byte dizisinde 0x80 ileri git.” demektir.
Yani PE parsing aslında sürekli şunu yapar: "BASE ADDRESS + OFFSET"

2. NT HEADERS

DOS HEADER sadece “kapıyı” gösterir. Asıl önemli yapı: "NT HEADERS" çünkü Windows loader’ın büyük kısmı burada karar verir. Kodunda şu satır:

Image placeholder

NT HEADER’a geçiş yapıyordu.

NT HEADER Başlangıcı

İlk 4 byte: "50 45 00 00" ASCII: "PE\0\0" Windows bunu görünce: “Tamam, bu gerçek PE formatı.” der.

NT HEADERS Yapısı

Image placeholder

Yani memory’de:

Image placeholder

EN KRİTİK DÜŞÜNCE

PE parsing aslında şudur:
Byte akışı içinde Windows struct’larını gezmek
"BYTE* -> STRUCT*"

1.PE SIGNATURE

Bu alan: "PE\0\0" imzasıdır. Kod:

Image placeholder

Kontrol edilir:

Image placeholder

2.FILE HEADER

Burası: “Bu executable nasıl bir executable?” sorusunun cevabıdır.

FILE HEADER İçindeki Önemli Alanlar

>Machine Hangi mimari? "0x14c -> x86"
"0x8664 -> x64"
Kod:

Image placeholder

NumberOfSections

Kaç section var?

Image placeholder

Kod:

Image placeholder

TimeDateStamp

Derlenme zamanı.
Bazı malware’ler bunu değiştirir.
Çünkü analyst’ler buradan iz sürer.

3. OPTIONAL HEADER

İsmi “optional”.
Ama aslında:
"EN ÖNEMLİ KISIM"
Loader’ın büyük kısmı burayı kullanır.

OPTIONAL HEADER NEDİR?

Burası executable’ın: “Memory’de nasıl çalışacağını” anlatır.

EN KRİTİK ALANLAR

ImageBase

EXE memory’de nereye yüklenmek istiyor?
Kod:

Image placeholder

Örnek:
0x400000

AddressOfEntryPoint (AEP)

Programın başlayacağı yer.
Yani:
CPU ilk nereye zıplayacak?
Kod:

Image placeholder

ÇOK KRİTİK

Entry Point:
Gerçek başlangıç noktasıdır
Malware analyst’ler ilk buna bakar.
Çünkü:
"unpacking
shellcode
loader
anti-debug"
genelde burada başlar.

RVA MANTIĞI

AddressOfEntryPoint direkt gerçek adres değildir.
Bu bir:
RVA (Relative Virtual Address) dir.
Yani:
"ImageBase + RVA" hesaplanır.
Formül:
"Real Address=ImageBase+RVA"

ÖRNEK

Farz et:

Image placeholder

Gerçek adres:

Image placeholder

⚠️ Kritik Uyarı

Bu teknikler yalnızca eğitim amaçlıdır. Gerçek sistemlere uygulanması yasadışı olabilir. Asla gerçek ortamlarda test etme.

🌟 Sonraki Yazı: Pe_Parsing_2

← Önceki Sonraki →
BlackNullSec
“Windows Belleğiyle Konuşan Kodlar”