Image

Malware giriş.

Malware

BlackNullSec Path : Pointer_4

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

🔎 Neden Pointer Kullanırız?


Void Pointer

Void Pointer nedir= void* tipi belli olmayan pointer yani "bu bir adres ama içinde ne var bilmiyorum" AMA void olunca tür yok-> boyut yok-> arithmetrics yok Neden WİNDOWS apı neden hep void* kullanır. Çünkü her türden veri verecegim her türlü veri ile çalışırsam sebep tek bit fonksiyon farklı veri tipleriyle çalışabilsin
ÖNEMLİ: Void Pointer ile çalışabilmenin sırrı= cast etmek dogru türe cast etmek
  ÖRNEK=

  void *p;
  int x=1337;
  p=&x;
  int val=*(int*)p;
Doğru Türe Cast Etme

1.)void *p; → türsüz bir pointer oluşturur. 2.)int x = 1337; → integer değişken yaratır. 3.)p = &x; → x'in adresi türsüz pointer’a atanır. 4.)(int*)p → p’deki adresi int pointer olarak yorumlar. 5.)*(int*)p → adresin işaret ettiği integer değeri okur. 6.)val değişkeni 1337 olur.

Cast+Pointer

Cast: Bir pointerin veya degerin türünü degiştirmek demek. (int*) -> p'yi int poniter yapar (int)p -> bu adresteki 4byte'i int olark oku byte-byte memory walking casting yapar

(int*) -> p'yi int poniter yapar
(int)p -> bu adresteki 4byte'i int olark oku
byte-byte memory walking casting yapar


Casting+Function Pointer

GetProcAddress fopnksiyonunu adresini FARPROC(void*) benzeri ile dondürür
ÖNEMLİ: CreateFileA typedef HANDLE (WINAPI *FnCreateFileA)( LPCSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE );
Adresini alıyoruz: FARPROC addr=GetProcAddress(h,"CreateFileA")
Cast ediyoruz: FnCreateFileA CreateFileA=(FnCreateFileA)addr; CreateFileA("test.txt"...);

Cast'in 3 altın kuraLı

1.) Okuma için mutlaka cast gerekir çünkü derleyici boyutları bilmez
2.)
Memory walking -> "unsignedchar* " +cast
ilerle = p+offset
castet = (int*)
oku = *(int*)
3.) Function pointer -> cast edilmeden cagrılamaz çünkü imza bilinemez
Önemli: *p neden var çünkü pointer bir adres tutar

int *p=(int*)(p byte+4);
int value=*p
byte-byte memory walking casting yapar
1-) Bellekte ilerledik
2-) Doğru tipe cast ettik
3-) Pointer degişkenine koyduk
4-) x p ile degeri okuduk


🌟 Sonraki Yazı: Pointer_5

← Önceki Sonraki →

⚠️ Kritik Uyarı

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

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