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*)
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”
“Windows Belleğiyle Konuşan Kodlar”
hacker