Windows API – Hook KEYSTROKE LOGGİNG(KLAVYE DİNLEME SİSTEMİ) MAİL GÖNDERİMİ AES ŞİFRELEME

Hook nedir ? Ne yapacağız?

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.

BAŞLAYALIM

Kullanacağımız fonksiyonlar ?
SetWindowsHookEx,UnhookWindowsHookEx,CallNextHookEx
DLL ÜZERİNDEN ÇAĞIRMAMIZIN SEBEBİ

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
1-)Kullanıcının klavyeden girecegi tüm değerleri  tanımlayalım. 
2-)Girilen değerlere basıldıysa kayıt(log) altına alıyoruz ve 75 den fazla kayıt(log) olursa Mail() gönderelim.

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.


Proje Çıktıları

Yorumlar

Bu blogdaki popüler yayınlar

Veri Madenciliği Bilgi Keşfi Nedir? Bilgi Keşfi Süreçleri Nelerdir?

QR Kod nedir? Ne İşe Yarar? Nerelerde Kullanılır? Nasıl Taranır?

Takviyeli/Pekiştirmeli Öğrenme (Reinforcement Learning)