Merih Forum Programlama ve yazılım algoritmalar programlama c# c++ Keylogger nasıl yapılır çalışır?

Dota 2. MMR sıralamada Türkler

Tr bayraklı Neqroman sadece listeye 163. sıradan girebildi

ABD'nin terörist sevgisi

ABD'nin, terör örgütü PYD/PKK’ya DEAŞ ile mücadele adı altında askeri sevkiyatları sürüyor.

DOTA2 - 2017 THE INTERNATIONAL CHAMPIONSHIP

2017 yazında düzenlenen turnuvada Team Liquid şampiyon oldu

  • Toplam: 0 Oy - Ortalama: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Keylogger nasıl yapılır çalışır?

 
#1

Selamun Aleyküm
Hayırlı ve bereketli ramazanlar..

Keylogger serisi v1
Öncelikle keylogger nedir?
Basit anlatımıyla bilgisayarın tuş kayıtlarını sömürmek anlamına getirebiliriz.

Sömürmek
Bir kurban olduğunu varsayarak gitmeyeceğiz.Sebebi şudur;
Keylogger ’ın neler yaptığını herkes biliyor.Bizim amacımız program tarafında
keylogger sömürüsü nasıl gerçekleştirilir.Eğer bu durumu ele alırsak, tuş kaydı en önemli aracımız olacak.
Ancak bu işi daha karmaşık hale getirmek mümkün.Peki biz ne yapacağız?
Sistem tarafında Windows ’un tuş kayıtlarını alıp bir kurbana neler yapabileceğiz serisini hazırlayacağız.
Baştan söylüyorum alakanız yoksa seriyide devam ettirmeyeceğim.
Keyloggerın kavramlarını ele alacağız bunların içinde haliyle(Binder,Stub,Undetected,Crypter) gibi konular yer alacaktır.

İlk etapta C# ile yapıyor olsakta ilgi görürse C++ veya işin Assembly tarafında neler yapabiliriz sömürü için bunlarıda göstereceğiz.

Başlıyoruz
Sistemi ele geçirmek nedir?
Karşı tarafı istek/yanıt ilişkisinde dolandırmaktır.
Sistemi ele geçirmek kavramına çok geniş bakılacak olursa
aslında (istek/yanıt ilişkisinde dolandırmaktır) manası anlamlı bulunur.En iyi korunma yöntemide dışarıyla bir bağlantınızın olmamasıdır.
Ne kadar kapalı kutu olursanız o kadar güvendesiniz demektir.


Keylogger nasıl yapılır?
Keyboard Hook
Bir C# projesi üzerinden gideceğiz.Aslında C++ içinde şablonu birebir alabilirsiniz.

C#’da IntPtr tipi pointer ’dır.C/C++ ile yazılmış dll’lere erişim için ihtiyacımız olur.

Bir Console projesi oluşturalım;

Okuyucular tarafında C# bilmeyende olacağı için C# üzerinde fazla durmayacağım önemli olan kısım Windows pencerelerine nasıl kanca atıyoruz ona bakacağız.Ancak yinede örnek Visual Studio ortamında C# Console Application olacak
Burada dikkat edilmesi gereken References kısmından
System.Windows.Forms ’u projeye dahil etmeniz..

namespaces.png

Resimde gördüğünüz namespace ’lerinden bilmeniz gereken System.Runtime.InteropServices Windows ’un 
kernel32.dll
user32.dll’ 
system32.dll’ 
dosyalarına erişim için eklemeniz gerekmektedir.

set_hook.png

Yine adımlayarak gidiyoruz.
Mevcuttaki Process ’i buluyor ve bir ProcessModule örneği oluşturarak bu Process ’in MainModule(Ana modül) örneğinin ismini alıyoruz.
Bildiğiniz üzre geri dönüş değeri bir Pointer bu alana devam edecek şekilde bırakıp
aşağıdaki resimi inceliyoruz;

windows_dlls.png

Şimdi diğer fonksiyonların içerisine girmeden ve alttaki 2 fonksiyonu incelemeden 
user32.dll’ ve ’kernel32.dll’ DLL ’lerini inceleyelim burada önceki konudan devam edersek
SetHook fonksiyonumuz içerisinde aslında SetWindowsHookEx metoduna atamalar yapıyoruz.İşte bu esnada
yönetimi devralmış oluruz tabi Kod tarafında bu metodların içerisini göremeyiz.Bunlar yönetilmeyen metod ’lardır.
Daha önce P/Invoke konusunda buna değinmiştim.Resimde gördüğünüz üzre yaklaşık 3 fonksiyonun geri dönüş değeri
yine pointer oluyor.az önceki fonksiyonumuzada bu pointer değerini vermiş olduk.Resimleri incelerseniz daha iyi anlarsınız...
En alttaki SW_HIDE console projemizi gizlemek amaçlı sabit 0 atanmıştır.

main_LowLevelKeyboard.png

Şimdi Console projesinin Main kısmını inceleyelim.
Handle ve ShowWindow satırlarını geçebiliriz.Önce Console ekranını alıp daha sonra gizliyor.Az önceki dll ’lerin altında göstermediğim 2 metodu çalıştırıyor.
İlk seferde _hookId pointer değeri Zero atanmıştı.Şimdi az önce SetHook ’dan dönen pointer değerimizi bu sabite atadık.
UnhookWindowsEx etmeden projemizi çalıştırdık.Pseudocode düşünürsek.

Son olarak - Tuşları kaydedelim
Çalışma örneğini önce C# ile inceyelim 1 tanede C dilinde örnek göstererek Windows işlemleri için ikisininde birebir çalıştığını görebilirsiniz.

c-end.png

C örneği

c-end6532b.png

Gördüğünüz gibi
private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);

Bu delegate artık iş görebilir.
Bu sebeple nCode,wParam,lParam parametleri artık her tuşa bastığımızda dolu gelecek.
Tanımladığımız WM_KEYDOWN sabiti işte burada kontrol amaçlı işimize yarıyor.
Marshall yardımı ile lParam pointer ’ın int tipinde değerini aldık.Bu int değeri artık
(Keys) ’e çevirdiğimiz an basılan her tuşu kayıt altına alacağız.

Sonuç olarak ;
24aca8.png
37234a.png

Çalıştırdığınızda proje arkada çalışacak 
log.txt dosyasına klavyede basılan her tuşun Keys değerini yazacak
Tabi bunun avantajı Process ile bir şey açıp ona erişmeye çalışmıyoruz.
Windows ’un yönetilmeyen dll kopyalarını oluşturup Dll bizimmiş gibi davranıyoruz.



Ara
Cevapla

 
#2

Good job



Ara
Cevapla

 
#3

nice



Ara
Cevapla


[-]
Hızlı Cevap

İnsan Doğrulama:
Aşağıda görünen onay kutusunu işaretleyiniz. Bu işlem otomatik spam kayıtları önlemek için kullanılır.

Digg   Delicious   Reddit   Facebook   Twitter   StumbleUpon  


Konuyu Okuyanlar:
1 Ziyaretçi

   
Türkçe Çeviri: MCTR, Forum Yazılımı: MyBB, © 2002-2018 MyBB Group.  



Merih Forum® bilgi paylaşım platformu. 2015-2017 Tüm hakları saklıdır.