iwystic
Veteran
10 Rozet
Seviye 10
İlk Paylaşım
Sharer I
Sharer II
Sharer III
İlk Mesaj
İlk Beğeni
İlk Çözüm
Yardımsever
Mentor
Usta Mentor
Hızlı Yardım
Profilini Tamamla
Doğrulanmış Üye

Merhaba değerli RC üyeleri,
Bu konuda “Sıfırdan Backdoor Trojan Yapımı” isimli serimizin muhtemelen son bölümünü okuyacaksınız. Normalde neredeyse iki bölümlük araştırma ve deneme yapmıştım; ancak 2 tane kısa konu yerine bir tane uzun konu yazma kararı aldım. O yüzden bu konu biraz daha uzun sürecek.
Önceki dört bölümde Trojan’ımızı çok ileri düzeyde olmasa da ortalama bir düzeye getirdik. Bu bölümde genel olarak 2 özellik daha ekleyeceğim. Giriş kısmında çok oyalanmak istemiyorum, bu yüzden genel başlıklara geçiyorum.
İçerik:
- Pynput Kütüphanesi Kullanımı
- Temel Keylogger Oluşturma
- Threading Kütüphanesi İle Keylogger Debugging
Pynput Kütüphanesi
İsminden de aslında ne olduğu belli olan bu kütüphaneyi kullanarak klavyede basılan her tuşu görebiliriz. Bazı belli parametreleri kullanarak keylogger’ımızı bu kütüphaneyi kullanarak oluşturacağız.
NOT: Bu bölümde anlatımı Kali üzerindeki bir hata yüzünden Windows ve Python’un kendi IDE’si üzerinden yapacağım.
İlk olarak Python’a eklemek için kütüphaneyi indirmeniz lazım. Sanırsam bazı sürümlerde zaten yüklü olarak geliyormuş ancak bende kurulu değildi, ben de sonradan kurdum. Kurmak için aşağıdaki komutu kullanabilirsiniz.
Kod:
C:\Python27\Scripts\pip.exe install pynput
Ardından, "Keylogger.py" isminde yeni bir Python çalışma dosyası oluşturalım. Virüse ekleme yapana kadar bu dosya üzerinde çalışacağız.
Ardından, import ile projemize ekleriz.

Ardından, bu yeni projemize pynput kütüphanemizi dahil edelim. ".keyboard" kısmını da eklememiz lazım; çünkü, bir keylogger yapacağız.

ilk olarak bu kütüphanenin en basit şekliyle çalışmasını göstereceğim. Bunun için öncelikle bizim tuşladığımız karakterleri yazan bir uygulama yapalım.
Bunun için de ilk olarak bir yazdırma fonksiyonu ekleyelim.
Bu fonksiyonu çağırmak için yazdığımız her tuşu izleyecek olan kod dizinini girelim.

Yazdıklarımızı ayırması; yani daha okunaklı hale getirmesi için, "join" fonksiyonunu kullanıyoruz.

İsterseniz bu keylogger.py programımızı kaydedelim. Ardından, çalıştırıp deneyelim.

Görebildiğiniz üzere, bastığım harfleri tek tek yazdı ancak şu an çok anlaşılabilir değil. U’ kısmından sonraki harflere bakarsak merhaba, RC ve Pyth.IO yazdığını görebilirsiniz. Aynı zamanda normal karakterlerin yanı sıra klavyedeki diğer tuşlara basıldığında da output verdi. Yani enter, control veya space gibi tuşları da yazdırdı.
Burada kısaca kütüphaneyi tanıttım; sırada keylogger’ı oluşturmaya başlamak var.
Temel Keylogger Oluşturmak
Temel şekilde keylogger oluşturma vakti geldi. Şimdi öncelikle bu bastığımız karakterleri ekrana yazdırmadan bir txt dosyasına kaydedelim. Bunun için öncelikle print(harf) kısmını silip dosya açıp dosyaya yazdırma kodlarını girelim.

Bu kod ile keylogger.txt isimli dosyamızı oluşturduk. “a” yani append değeri ise dosya yoksa oluşturur, varsa üstüne yazar.

Burada da bastığımız tüm tuşları bu açtığımız dosyanın içine yazdırdık. Deneyip göstermek gerekirse böyle çalışıyor:


Tüm tuşları bir dosyaya yazdırdık, evet; ancak aradaki diğer karakterler yüzünden okunaklı halde değil. Neredeyse kimse anlayamaz ne yazıldığını. Bu yüzden şimdi biz de bu dosyanın okunabilirliğini arttıralım.
Öncelikle projemize karakterler isminde bir değişken atayalım. İçini de şimdilik boş bırakalım.
Karakterler değişkenimizi, tus_yazdir fonksiyonunun içine global olarak alıyoruz. Aynı şekilde basılan tuşları char methodu ile düzenliyoruz.

Şimdilik sizlere göstermek amacı ile dosyaya yazdırmak yerine print() ile anlık komut satırına yazdıralım.

Şimdi ise çalıştırıp RealityCheats yazdıralım.

Normal harfler haricinde herhangi bir özel tuşa basarsak ne olur? Reality Cheats yazdıralım.

Gördüğünüz gibi boşluk tuşuna basar basmaz program çöktü; çünkü, char metodumuz özel karakterleri desteklemiyor. Bunun için ise AttributeError üzerinden
try-except bloğu oluşturacağız.

Bu bloğumuz tamam, düzgün çalışıyor; ancak bu şekilde yaparsak her özel tuş basıldığında boşluk tuşu olarak algılayacak. O yüzden bu kısmı bir if-else bloğuna alarak daha da düzenliyoruz.

Şu an kodumuzun düzgün olarak çalışması lazım. Space tuşuna basıldığı zaman boşluk koyulacak ve diğer özel tuşlarda ise bir boşluk ve
ardından hangi tuş olduğu yazacak.
Çalıştırıp deneyelim;

Evet, şu anlık basit keylogger bölümümüz bitti; ancak daha kullanışlı bir hale getirmek ve hataları düzeltmek lazım.
Bir sonraki bölümde biraz daha geliştireceğiz. O yüzden sonraki başlığa geçiyorum.
Threading Kütüphanesi İle Keylogger Debugging
Yukarıdaki resimlerde de gördüğünüz gibi yeni bir tuşa basınca program anında onu kaydedip yazdırıyor. Bu şekilde gayet büyük yer kaplayan ve anlaşılamaz dosyalar oluşur. Şimdi biz de burada bunun önüne geçmek için girilen karakterleri belli aralıklarla yazdıracağız. Bunun için de öncelikle threading kütüphanemizi eklememiz lazım.

Yazdırma işlemimizin zamanını ayarlamak için yeni bir fonksiyon oluşturuyoruz.

Print fonksiyonumuzu buranın içine alıyoruz, doğal olarak diğer print’leri de siliyoruz. Karakterler değişkenimizi buranın da içinde global olarak ayarlıyoruz.

Şimdi ise, threading’in timer modülünü kullanarak girilen değerleri belli aralıklarla yazacağız. Bunun için isterseniz time.sleep() de kullanabilirsiniz; ancak o zaman program size sorun yaşatır, yazıları okumaz.

Ben değeri 10 saniye olarak ayarladım; ancak siz bunu kendi isteğinize göre ayarlayabilirsiniz. Ardından, 10 saniyede bir olacak şekilde fonksiyonu çağırdık.

Bu kod ile de sayaç isimli işlemi başlattık. Aynı zamanda zaman fonksiyonunu da çağırdık. Dilerseniz şimdi gelin, çalıştırıp görelim.

Gördüğünüz üzere daha düzgün ve okunaklı şekilde çalışıyor. Ancak hala birkaç eksiği var. En basitinden space hariç diğer özel karakterleri yazıyor –ki bu da okunuşunu zorlaştırıyor- ve Türkçe karakter girince Unicode error veriyor. Örnek:

Şimdi bu hataları düzelteceğiz.
İlk olarak girilen diğer her özel karakter için else if blokları oluşturalım.

Gördüğünüz üzere burada bir sürü elif bloğu kullandık ve ona rağmen daha tüm özel tuşları ayarlayamadım. Sadece ayarladığım önemli şeyler enter’a basınca satır atlamak ve backspace’e basınca yazılan son karakterin silinmesi oldu. Bunu daha da geliştirebiliriz. Mesela Caps Lock tuşuna basılınca harfleri büyük yazabilir; ancak şimdilik bu kadar yeter.
Şimdi programımızı çalıştıralım.

Göründüğü üzere normal şekilde çalışıyor; ancak hala Türkçe bir karakter kullanırsak program çökecektir. Bunun için normalde encode-decode işlemi kullanabilirdik ancak python2 sürümünde keylogger oluştururken bu durumu düzeltmeye çalışırken çok fazla kez sistemim çöktü/ağırlaştı. O yüzden ben de Türkçe karakterler için yeni bir except bloğu oluşturup başka bir karakter atadım.

Eğer Türkçe bir karakter girilirse * karakterini yazacak. Bunun çok da büyük bir problem yaratmayacağından eminim.
İsterseniz deneyip görelim.

Örnekte de görüldüğü üzere çok bir sıkıntı yok genel olarak.
Şimdi ise buraya kadar geliştirdik keylogger’ı, sırada bunları bir dosyaya yazma vakti.
Burada çok farklı bir işlem yapmamıza gerek yok, sadece tuşladığımız karakterleri direkten ekrana değil de keylogger.txt’ye yazdıracağız. Bu yüzden print() fonksiyonunu silip keylogger.txt isimli yeni bir dosya açacak, o dosya varsa da üzerine girilen değerleri yazdıracak.

Aynı şekilde dosyaya yazıp yazmadığından emin olmak için kodumuzu çalıştıralım.


Evet, görünebildiği gibi yazdıklarımız 10 saniye arayla kaydoluyor. Daha okunaklı durumda ama hala çok üst düzey, gelişmiş bir keylogger değil ancak virüsümüzü kullanırken işe yarar düzeyde.
Bu arada keylogger kapalı olmasına rağmen arkada hala çalışıyor ve bu konuyu yazarken yazdıklarımı bile şu an deftere kaydediyor.