Image

Malware giriş.

Malware

BlackNullSec Path #2: Pointer 2 Nedir?

🚀 Amaç:Bir pointer, bellekteki bir adresi tutan değişkendir. Yani başka bir değişkenin adresini saklar.

🔎 Neden Pointer Kullanırız?

  • Bellek Yönetimi: Dinamik hafıza ayırmak için (malloc, calloc, free).
  • Fonksiyonlara Veri Aktarımı: Referansla parametre göndererek gerçek değişkenleri değiştirebiliriz.
  • Verimli Kod: Kopyalama yerine adresle işlem yapmak daha hızlıdır.
  • Düşük Seviye Erişim: Donanım, işletim sistemi ya da özel bellek alanlarına erişim sağlamak için.

🧪 Pointer ile Değer Değiştirme
    
&-> degişkenin adresini alır
*-> pointer'ıdereference ederek işaret ettigi degere eşit
NULL-> Hiçbir adresi gostermeyen ozel bir pointer degeri

Örnek:
int x=42;
int *p=&x; // P,X'in adresini tutar
printf(%d\n,*p); Çıktı 42 (p'nin işaret ettigi)

NOT= burada x'e 42 degeri verildi sonra(&x) ile adresi alındı sonra(*p içine adresteki veriyi yaz) 

NOT:*p=adresi yazmaz degeri yazar yani "x=42"'nin adresini alır '
(&x) ise x'in adresini alır "42" in 

  

1. Malwarede Pointer


    LPVOID remoteMem=VirtualAlocEx(hProcess,NULL,size,mem_commmıt,PAGE_READWRITE);

    remote->başka bir prosesin bellegindeayırdıgımız adres
    shellcode->Bizim pointer'ımız (unsigned char*) bellekteki shellcode verisini gosteriyor 

    NOT= shellcode-> içerigi
    remoteMem-> hedef adres
    pointer mantıgı-> neyi nereye yazagacımızı belirtir

  

Stack(Yıgın Bellek)


  1.)Otomatik  2.)Küçük ve hızlı 3.) Genelde int a=5
  

Heap (Yıgın Bellek)

 
    1) programcı tarafından yonetilir 
    2.) Büyük boyutlu veri depolamak
    3.)malloc(),relloc(),calloc()ayrılır
    4.)Free() ile manuel temizlenir.

    malloc(size)=Heaptan(size) kadar byte ayırır
    Free(ptr) = Daha once mallox ile ayrılmış alanı temizler

    memset(ptr,val,size)=belirtilen(ptr) adresinden itibaren (size) kadar 
    alanı(val) ile doldurur

    memcpy(dest,src,size)=kaynak(src)veriyi hedef(dest)kopyalar

  

memset(ptr,val,size)

 
   xptr=Hedef bellek adresi (başlangiç noktası)
   xval=Hangi degerle doldurulacagı (or=0)
   xsize=kaç byte dolduralacagı 
   Görevi=Bellegi belirli bir kısmında tek bir sabit degerle doldurmak
   Genellikle bellek sıfırlama val=0 kullanılır
    int arr [10]:
    memset(arr,0,sizeof(arr)); // arr içindeki tüm byte0 yapar


  

memcpy(dest,src,size)

 
   dest=verinin kopyalanacagı hedef adres
   src=kaynak adres(verinin bulundugu yer)
   size=kaç byte bellek kopyalandıgı

   Ör:char source[]="Merhaba"
   char destination[10];
   memcpy(destination,source,strlen(source)+1);

   Not: Kaynaktan hedefe bellek kopyadan shellcode,dosya verisi,bellek 
   üzerinden bir baska bir yere taşıma
  

malloc

Bellekten dinamik olarak yer ayırmanı saglar.,,

 
   Ör:
   int *ptr=(int *)malloc(sizeof(int)),

   malloc(sizeof(int))->Bellekte inr kadar yer ayır 
  

⚠️ Kritik Uyarı

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

BlackNullSec
“Windows Belleğiyle Konuşan Kodlar”