Windows API – Hook KEYSTROKE LOGGİNG(KLAVYE DİNLEME SİSTEMİ) MAİL GÖNDERİMİ AES ŞİFRELEME
Hook nedir ? Ne yapacağız?
Nasıl oluyor?
•Kanca,çengel,yakalamak
anlamlarına gelmektedir.
BİLGİSAYARDA BU KAVRAMIN NE ANLAMI VAR ?
•Birçoğumuz düşünmüşüzdür;
•bir
program açılıp kapatıldığında,
•fareyi
ekranda sürüklediğimizde ya da klavyede bir tuşa bastığımızda acaba windowsun sistem seviyesinde
neler olup bitiyor.Bu işlemleri nasıl gerçekleştiriyor diye.
•Bu
işlemlerden Windows API lerini kullanıp mesajları
yakalayarak(hook) az çok haberimiz
olabilir.
Nasıl oluyor?
•Windows
üzerinde çalışan uygulamalar sahip oldukları fonksiyonları çalıştırırken
genelde direkt olarak işletim sistemi üzerinden sistem çağrısı(system call) yaratmazlar.
•Fonksiyonlar
öncelikle Win32 DLL’lerine çağrıyı yapar ve
ardından bu DLL’ler kalan kısmı üstlenir.
Kabaca şöyle bir yapı
:
•Misal C#’ta process
oluşturmak için Process.Start fonksiyonunu
kullanıyoruz.
•Bu fonksiyon önce gidiyor Kernel32.dll
üzerinden CreateProcessW fonksiyonunu
çağırıyor.
•Ardından o fonksiyon NTDLL üzerinden NtCreateUserProcess’i
çağırıyor.
Hooking dediğimiz işlem bu fonksiyon çağrılarının arasında bulunup
ilgili fonksiyonu incelemek, yönetmek, yönlendirmek, sonlandırmak…
Canımız ne isterse kısaca.
İşte biz de
(birkaç tane win32 api fonksiyonlarını kullanarak)
•SetWindowsHookEx,
•UnhookWindowsHookEx ve CallNextHookEx Win32 API fonksiyonlarını kullanarak hook işlemlerini gerçekleştireceğiz.
•Hook işlemleri Win32 de mesajların ele geçirilmesidir (Bir nevi mesaj casusluğu da diyebiliriz).
•Yani hook işlemleri bizim windows mesajlarını sistemden önce ele geçirip üzerinde işlemler yapmamıza olanak sağlar.
•Bir
çok sistem düzeyinde hook türü vardır. Kısaca
inceleyelim:
WH_CALLWNDPROC : Sendmessage fonksiyonu çağrıldığı zaman bu hook türü gerçekleşir. Bu mesaj üzerinde değişiklik yapamayız.
WH_GETMESSAGE : GetMessage ve PeekMessage fonksiyonları çağrıldığı zaman bu hook türü gerçekleşir.SendMessage ile gönderilen mesajlar yakalanamaz.
WH_KEYBOARD : GetMessage ve PeekMessage fonksiyonlarından WM_CHAR veya WM_KEYDOWN, WM_SYSKEYUP, WM_SYSKEYDOWN messajları döndüğü zaman bu hook türü gerçekleşir.
WH_MOUSE : GetMessage ve PeekMessage fonksiyonları ile mouse ile ilgili bir mesaj alındığında bu hook türü gerçekleşir.
WH_MSGFILTER : Dialog Box, Message Box, ScroolBar yada menulerden bir mesaj alındığı zaman bu hook türü gerçekleşir.
WH_SYSMSGFILTER : Sadece sistem düzeyinde hook için kullanılabilir. WH_MSGFILTER ile aynı özelliklere sahiptir.
WH_CALLWNDPROC : Sendmessage fonksiyonu çağrıldığı zaman bu hook türü gerçekleşir. Bu mesaj üzerinde değişiklik yapamayız.
WH_GETMESSAGE : GetMessage ve PeekMessage fonksiyonları çağrıldığı zaman bu hook türü gerçekleşir.SendMessage ile gönderilen mesajlar yakalanamaz.
WH_KEYBOARD : GetMessage ve PeekMessage fonksiyonlarından WM_CHAR veya WM_KEYDOWN, WM_SYSKEYUP, WM_SYSKEYDOWN messajları döndüğü zaman bu hook türü gerçekleşir.
WH_MOUSE : GetMessage ve PeekMessage fonksiyonları ile mouse ile ilgili bir mesaj alındığında bu hook türü gerçekleşir.
WH_MSGFILTER : Dialog Box, Message Box, ScroolBar yada menulerden bir mesaj alındığı zaman bu hook türü gerçekleşir.
WH_SYSMSGFILTER : Sadece sistem düzeyinde hook için kullanılabilir. WH_MSGFILTER ile aynı özelliklere sahiptir.
BAŞLAYALIM
Kullanacağımız
fonksiyonlar ?
SetWindowsHookEx,UnhookWindowsHookEx,CallNextHookEx
•Hook işlemi için öncelikle hook fonksiyonunu içeren bir DLL hazırlanmalıdır. Nedeni ise daha önce de
bahsettiğimiz gibi bir process başka bir processin alanına
erişemeyeceğinden bizim hazırladığımız hook fonksiyonu başka process tarafından çağrılamayacaktır.
•Ama
hazırlamış olduğumuz DLL belleğe yüklendiğinde başka bir process bizim hook fonksiyonumuzu çağırmak
istediğinde DLL dosyamızın bir kopyası oluşturulacak ve bu DLL içinden ilgili hook fonksiyonumuz
çağrılacaktır.
Projemize
diğer tanımlamaları yapalım
3-Mail() gönderme
C# smtp kullanılmıştır.
4-AES(Advanced Encryption Standard)
•Gelişmiş
sifreleme standartıdır.
•1997
yılında NIST organizasyon firmasının,DES 64 bit’lik anahtar şifreleme yapan bir
mimariye sahip algoritmanın yerine başka bir algoritma yarışması düzenlenmiş,
toplamda 4 yıl değerlendirmeler sonucunda AES ismiyle kabul edilmiştir.
•AES
kısaca nasıl çalısıyor?
•AES
simetrik bir şifreleme algoritmasıdır yani hem şifreleme hem şifre çözme
işlemleri için aynı anahtar kullanılır. AES için girdi ve çıktı matrisleri her
zaman 128 bit olmak zorundadır ancak anahtar uzunluğu 128, 192 veya 256 bit
olabilir.
•Girişten
gelen metin 128 bitlik parçalara bölünür. Her parça durum matrisine
yerleştirilir.
•AES
algoritması Bayt Değiştirme, Satır Kaydırma, Sütun Karıştırma ve Tur Anahtarı
ile Toplama gibi adımların tekrar etmesi şeklinde düşünülebilir.
•Aynı
şekilde önceden alınan 128 bitlik anahtarda bu durum matrisi halinde işlem
görür. Giriş metninin yazıldığı durum matrisi ilk olarak anahtar ile
toplanır ve metin şifrelenir.
Yorumlar
Yorum Gönder