Function Hooking
Function hooking bir programın kod akışını kendi yazdığımız kod ile değiştirmemizi sağlar.
Örnek verirsek:
Topla isimli bir fonksiyonumuz olsun ve bu fonksiyon verilen iki sayıyı (x, y) toplasın. Ancak biz bu iki sayının çıkarılmasını istiyoruz. Bu sebeple bu fonksiyonu ele geçirmemiz ve bu fonksiyon yerine kendi yazdığımız fonksiyonu çalıştırmamız gerek.
Üstteki fonksiyon ise bizim asıl fonksiyon yerine koymak istediğimiz fonksiyon. Fonksiyon verilen değerleri toplamak yerine çıkarıyor.
ve bizim HookFunction isimli bir fonksiyonumuz var. Bu fonksiyon verilen adresteki fonksiyonu bizim kendi fonksiyonumuzla değiştiriyor.
Ve fonksiyonu çağırdığımız zaman artık bizim fonksiyonumuz normal fonksiyonun üzerine yazılıyor ve kod akışı bizim fonksiyonumuzdan devam ediyor. Veriler toplanmak yerine çıkarılıyor.
Umarım verdiğim örneği anlamışsınızdır.
Bir çok function hooking yöntemi vardır.
Örn. VMT Hooking, IAT/EAT Hooking, Byte Patching vs.
Windows API
Windows API, Microsoft tarafından çoğunlukla C ile yazılan ve programların Windows'a bir şey yaptırmak istediklerinde kullandıkları veri ve fonksiyon setidir.
Örnek veriyorum bir program bir dosyaya yazı yazarken, okurken veya kayıt ederken Windows API kullanmalıdır.
Bizler ise bu API fonksiyonları üstte anlattığım yöntem ile ele geçirip kendi irademize göre kullanabiliriz. Örnek veriyorum dosya silme fonksiyonunu ele geçirip dosyaların silinmesini engelleyebiliriz veya görev yöneticisinde bir programı gösteren fonksiyonu ele geçirip programı görev yöneticisinden saklayabiliriz.
Ünlü virüsler sizin bilgisayarınızı ele geçirmek için bazen de biraz ürkütücü olmak için bu yöntemleri kullanabilir.
DLL Dosyası Oluşturma
Öncelikle Visual Studio'da bir C++ projesi açalım. (Boş Proje)
Ardından projemize sağ tıklayıp özelliklere geliyoruz.
Ardından Yapılandırma Türünü Dinamik Kütüphane (.dll)'ye çeviriyoruz. Ardından uygulayıp kapatıyoruz.
Ardından kaynak dosyalarına programızın entry pointinin bulunacağı bir dllmain.cpp dosyası açıyoruz
Artık kodlamaya başlayabiliriz. Klasik DLL Entrypointimizi yazıyoruz. Ben direk buradaki entrypoint'i kopyalayıp yapıştırdım.
Artık kodlamaya hazırız. Sonraki ders asıl kodlamaya geçeceğiz.
İyi Forumlar!
Son düzenleme: