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ışı

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
Çünkü burada:
BUFFER + OFFSET MANTIĞI
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:
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ı
Yani memory’de:
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:
Kontrol edilir:
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:
NumberOfSections
Kaç section var?
Kod:
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:
Örnek:
0x400000
AddressOfEntryPoint (AEP)
Programın başlayacağı yer.
Yani:
CPU ilk nereye zıplayacak?
Kod:
Ç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:
Gerçek adres:
⚠️ 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 →“Windows Belleğiyle Konuşan Kodlar”
hacker