Sıfırdan Backdoor Trojan Yapımı #5

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
Katılım
27 Ağu 2019
Konular
290
Mesajlar
4,890
Çözümler
491
Tepkime puanı
10,809
RC Point
0
caldim.png

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.

4dKDtQ.png

İçerik:

- Pynput Kütüphanesi Kullanımı
- Temel Keylogger Oluşturma
- Threading Kütüphanesi İle Keylogger Debugging


4dKDtQ.png

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.

1609321652045.png

4dKDtQ.png

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

4dKDtQ.png

1609321712289.png

4dKDtQ.png

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.

4dKDtQ.png

1609321776024.png

4dKDtQ.png

Bu fonksiyonu çağırmak için yazdığımız her tuşu izleyecek olan kod dizinini girelim.

4dKDtQ.png

1609321830236.png

4dKDtQ.png

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

4dKDtQ.png

1609321880508.png

4dKDtQ.png

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

4dKDtQ.png

1609321932982.png

4dKDtQ.png

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.

4dKDtQ.png

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.

1609322081783.png

4dKDtQ.png

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

4dKDtQ.png

1609322125869.png

4dKDtQ.png

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:

4dKDtQ.png

1609322176136.png

4dKDtQ.png

1609322278468.png

4dKDtQ.png

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.

4dKDtQ.png

1609322344070.png

4dKDtQ.png

Karakterler değişkenimizi, tus_yazdir fonksiyonunun içine global olarak alıyoruz. Aynı şekilde basılan tuşları char methodu ile düzenliyoruz.

4dKDtQ.png

1609322445965.png

4dKDtQ.png

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

4dKDtQ.png

1609322481124.png

4dKDtQ.png

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

4dKDtQ.png

1609322703909.png

4dKDtQ.png

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

4dKDtQ.png

1609322808581.png

4dKDtQ.png

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.

4dKDtQ.png

1609322883799.png

4dKDtQ.png

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.

4dKDtQ.png

1609322927029.png

4dKDtQ.png

Ş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;

4dKDtQ.png

1609331525855.png

4dKDtQ.png

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.

4dKDtQ.png

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.

1609331597971.png

4dKDtQ.png

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

4dKDtQ.png

1609331627460.png

4dKDtQ.png

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.

4dKDtQ.png

1609331656217.png

4dKDtQ.png

Ş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.

4dKDtQ.png

1609331695982.png

4dKDtQ.png

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.

4dKDtQ.png

1609331735669.png

4dKDtQ.png

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.

4dKDtQ.png

1609331814497.png

4dKDtQ.png

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:

4dKDtQ.png

1609331873222.png

4dKDtQ.png

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

4dKDtQ.png

1609331924001.png

4dKDtQ.png

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.

4dKDtQ.png

1609331995072.png

4dKDtQ.png

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.

4dKDtQ.png

1609332041561.png

4dKDtQ.png

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.

4dKDtQ.png

1609332122940.png

4dKDtQ.png

Ö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.

4dKDtQ.png

1609332173140.png

4dKDtQ.png

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

4dKDtQ.png

1609332205558.png

4dKDtQ.png

1609332229717.png

4dKDtQ.png

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.​
 
Üst