Hepinize Selamlar Sayın Turk Hack Team Üyeleri,
Bu yazıda Sıfırdan Kendi Backdoor Trojanımızı Geliştirelim 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. Ardından bu seri bitmiş olacak. Giriş kısmında çok oyalanmak istemiyorum, bu yüzden genel başlıklara geçiyorum.
Konu Başlıkları:
- Pynput Kütüphanesi Kullanımı
- Temel Keylogger Oluşturma
- Threading Kütüphanesi İle Keylogger Debugging
- Keyloggerı Virüse Dahil Etme
- Hedef İle İletişim Kurma
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 Pythonun kendi IDEsi üzerinden yapacağım.
İlk olarak pythona 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.
Ardından keylogger.py isminde yeni bir pyhton çalışma dosyası oluşturalım. Virüse ekleme yapana kadar bu dosya üzerinde çalışacağız. Ardından ise zaten 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.
Şimdi 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.
Ardından bu fonksiyonu çağırmak için yazdığımız her tuşu izleyecek olan kod dizinini girelim.
Ardından yazdıklarımızı ayırması, yani daha okunaklı hale getirmesi için join fonksiyonunu kullanıyoruz.
Şimdi ise öncelikle isterseniz bu keylogger.py programımızı kaydedelim. Ardından ise ç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, tht ve doliatius 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şturma
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.
Ardından karakterler değişkenimizi, tus_yazdir fonksiyonunun içine global olarak alıyoruz. Aynı şekilde basılan tuşları char metodu ile düzenliyoruz.
Tabi ş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 turkhackteam yazdıralım.
Fakat normal harfler haricinde herhangi bir özel tuşa basarsak ne olur? Mesela turk hack team yazdıralım.
Gördüğünüz gibi boşluk tuşuna basar basmaz program çöktü çünkü özel karakterleri desteklemiyor char metodumuz. 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.
Ardından ise 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 printleri de siliyoruz. Karakterler değişkenimizi buranın da içinde global olarak ayarlıyoruz.
Şimdi ise threadingin 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.
Burada ben değeri 10 saniye olarak ayarladım ancak siz bunu kendi isteğinize göre ayarlayabilirsiniz. Ardından ise 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 entera basınca satır atlamak ve backspacee 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 bir de.
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.txtye 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.
Şimdi ise 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 .
Sonraki bölüme geçelim.
Keyloggerı Virüse Dahil Etme
Evet, bu bölümde ise az önce oluşturduğumuz bu keyloggerı trojan.pymize dahil edeceğiz. Bunun için kısaca import keylogger yapabiliriz. Ama önce keyloggerı çalıştıran kodları fonksiyon içine alacağız.
Buradan sonra ayarlamamız gerek bir diğer nokta ise keylogger.txt dosyasının nereye kaydolacağıdır. Normalde şu anki hali ile bu yeni dosya virüsün çalıştırıldığı yere açılır ve kaydedilir. Biz bu kaydolma yerini değiştireceğiz. Appdata yoluna kaydedeceğiz ancak öncelikle programımıza os kütüphanesini eklemeliyiz. Ardından ise kaydet isimli yeni değişkenimize kaydedilecek yolu seçiyoruz. Ardından ise bu değişkeni kullanarak o yolu belirtiyoruz.
Tabi siz bu ismi keylogger.txt yapmak zorunda değilsiniz, hatta önerim yapmayın. Windowslog.txt gibi bir isim yaparsanız daha az şüphe çeker.
Bu keyloggerda şimdilik yapacağımız bir şey kalmadı.
Şırada trojan.pyye gitmek var. Buraya gelip sırasıyla threadingi ve keyloggerı import ediyoruz.
Burada belki IP adresini değiştirdiğimi fark etmiş olabilirsiniz, bunun sebebi Kali sanal makinem üzerinde biraz kurcalama yaparken pythonu bozmuş olmam. Onunla çok uğraşmak istemediğimden dolayı Windows üzerinde çalıştırıyorum.
Şimdi önceki konularda da yaptığımız üzere key_baslat isimli bir elif bloğu açıp gerekli olan kodları bu bloğun altına giriyorum.
Burada keylogger programımızın keyloggerbaslat isimli fonksiyonunu başlatmak için olan kodları girdik.
Ardından ise 0 tuşuna basınca keylogger.txtnin silinmesi için gereken kodları girelim. Hedef makinede iz bırakmak istemeyiz değil mi? O yüzden biz bağlantıyı tamamen kesince bu keylogger dosyası da silinsin.
Elif bloğunda 0ın olduğu yerin altına yazacağız birkaç kod.
Burada bir dosyayı silmek için gereken kodu yazdık yalnız eğer zaten böyle bir dosya yoksa diye programın çökmesini önlemek amacıyla bir try-except içine aldık. Şimdi silinsin diye belirttiğimiz değişkenin içine dosya yolunu yazmamız lazım. Bunun için projemizin en sonuna bu dosya yolunu ekliyorum.
Bir de eklememiz gereken bir diğer özellik ise bu keylogger.txt dosyasında yazanları servera yani bize yönlendirmek. Bunun içinde yeni bir elif bloğu açıyoruz.
Ardından ise virüsün bu komutu aldığında bize geri dosyayı göndermesi için gerekli olan dosyayı okuma ve verigonder fonksiyonu üzerinden bize göndermesini sağlayacak kodları giriyorum.
Trojan.py üzerinde yazacağımız kodlar halledildi. Şimdi sırada server üzerine yazacağımız kodlar var.
Server.pynin bir kopyasını Windows makineme almıştım, onun üstüne kodlayacağım.
Yeni bir elif bloğu oluşturup keylog başlat fonksiyonunu giriyorum. Eğer bu koda continue eklemezsek else kısmına gider ve orada hiçbir dosya karşılanmadığı için program çöker.
Ardından ise ister verial fonksiyonunu kullanarak keylog oku fonksiyonunu çağırın, isterseniz de zaten else bloğunda verial olduğu için bir şey yazmayın.
Ben yazmamayı seçtim.
Buradan sonra server.py üzerinde yapmamız gereken tek şey yardım menüsünü güncellemek. Kolay bir işlem.
Şu anda server üzerinde de, trojan.py üzerinde de bir sıkıntı yok gibi görünüyor. İsterseniz çalıştırıp deneyelim.
NOT: Colorama kütüphanesi pythonın kendi IDEsi üzerinden çalıştırıldığında bu şekilde, Unicode olarak görünüyor. O yüzden windowsta bu şekil bir çalıştırma ile programı okumak zor olabilir.
Görüldüğü üzere keylogı başlattık ve ardından okuduk. Kabul ediyorum, çok okunaklı değil. Bu yüzden siz yazdırma aralığını 1 dakika veyahut da 30 saniye olarak ayarlarsanız daha güzel olur. Ayrıca klavye üzerindeki tüm özel karakterleri elif içine alabilirsiniz. Bu arada Windows üzerinden kodu çalıştırdığımda dir gibi komutlar çalışıyor. Linux üzerinde de çalışmıyor. Nedenini daha anlayamadım.
Yukarıdaki fotoğrafta da görebildiğiniz üzere appdatada keylogger.txt isimli bir dosya oluşmuş.
Genel olarak keyloggerı virüse dahil etme işlemi bu kadardı. Ancak burada söylemek istediğim bir şey, ben tüm server kodlarını linuxta, tüm trojan.py kodlarını da windowsta çalıştırılacak şekilde ayarladım. Bu yüzden bazı durumlarda, şimdiki gibi, server kullanımı çok zor olabilir.
Bir sonraki başlığımıza geçelim, serinin son alt başlığına.
Hedef İle İletişim Kurma
Dürüst olmak gerekirse bu bölümde direkt olarak yeni bir kod eklemeyeceğim. Daha çok nasıl kurbanınızla iletişim kurarsınız, bunu göstereceğim. Ama pratik bir yol ile, zaten şu ana kadar yaptığımız her şeyi kullanarak iletişime geçeceğiz.
Burada, ilk bölümde yaptığımız basit mesajlaşma uygulamasına tekrardan bir göz atalım. Bu kısımda çünkü o şekilde bir uygulamayı kullanarak hedef ile sohbet edeceğiz.
Not: Bu alt başlığı 2 gün sonra yazdım ve o arada kali linuxımı düzelttim. O yüzden kali üzerinden devam edeceğiz.
İlk önce isterseniz ilk bölümdeki uygulamamızı tekrardan gözden geçirelim. İlk olarak kendimizin kullanacağı versiyona bakalım.
Bir de bunun client side, yani kurbana göndereceğimiz versiyonuna bakalım.
Evet, bu resimler ilk bölümdekilerden. Bu yüzden ben de şu an bu programları şimdi için düzenledim. Aşağıda görebilirsiniz.
Kendimiz için:
Hedef İçin:
Tamam, dürüst olmak gerekirse şu an hacker ile konuşuyorsun ifadesini kendimde kullanınca biraz komik oldu. Ancak yazacak başka bir şey gelmedi aklıma. Yoksa ben normal 2 senelik bir lamer veya script kiddieyim. Hangisini isterseniz yani .
Şimdi gelelim şimdi ne yapacağımıza, hedef bilgisayarda muhtemelen pyhton yüklü değildir. Biz de bu yüzden ilk olarak mesajal.py isimli dosyamızı pyinstaller ile exe yapacağız.
Burada sadece onefile parametresini kullandık çünkü programımız başlayınca Shell açılsın ve mesajları oradan yazalım. İsterseniz buna colorama da ekleyebilirsiniz ancak ben eklemedim. Bu arada bizim trojan klasörümüzde de ikinci bir mesajat.py dosyası var.
Bu arada size önerim pyinstaller ile wine kullanarak veya Windows üzerinden .exe haline getirmeniz. Yoksa kali üzerinde problem olabiliyor. Bu arada, buradan sonra yapabileceğimiz işlemleri tek bir dosya içinde de yapabiliriz ancak işleri iyice karıştırmak istemiyorum.
Son olarak da; mesajal ve mesajat içindeki socketi 7777 portu yerine 7778 portuna ayalardım. Eğer address already in use hatası alırsanız buna dikkat edin.
Şimdi Linux üzerinde server.pyı çalıştıralım. Ardından ise Windows üzerinde trojanı çalıştırıyorum ben.
Göründüğü üzere bağlantı geldi. Ardından yye basıp yardım menüsüne geldik. Buradan sonra yapmamız gereken basitçe server ile aynı klasörde bulunan mesajal.exe dosyasını yükle fonksiyonu ile hedefin cihazına yüklemek. Ayrıca yüklemek istediğiniz yeri isterseniz cd komutu ile ayarlayabilirsiniz. Ben direkten aktif trojan.exenin çalıştırıldığı yere atacağım. Ayrıca fark ettiyseniz yardım kısmı şu anda güzel ve eksiksiz durumda.
Buradan sonra yapmamız gereken tek şey önce mesajat.pyyi çalıştırmak, ardından ise server üzerinden yüklenen_dosya.exe ile yüklenen dosyayı çalıştırıyoruz.
Gördüğünüz gibi şu anda mesaj penceremiz açıldı. Bu arada yüklenen_dosya olmasının nedeni bizim yükle fonksiyonunda öyle ayarlamış olmamız.
İsterseniz şimdi de birkaç mesaj yazalım.
Görebildiğiniz üzere gayet bu şekilde hedefimiz ile mesajlaşabiliyoruz. Zannediyorum ki kendi yaptığımız bu virüs için bu kadar özellik yeter. Artık bir trojanın nasıl yapıldığı hakkında fikriniz var.
Serimizin sonuna geldik artık. Benim için çok eğitici, bir o kadar da uğraştırıcı bir seriydi. Toplam seriye kaç günümü verdiğimi bile artık hatırlamıyorum. Sizlere önerim, araştırmanız. İlgilendiğiniz konular hakkında araştırın ki detaylıca ne olduğunu öğrenin. Sonra benim yaptığım gibi bilgilerinizi paylaşabilirsiniz. Bu şekilde başkalarını da bilgilendirebilirsiniz.
Artık ortalama bir Windows trojanının nasıl yapıldığını biliyorsunuz. Her ne kadar bu seride python kullansam da Python ile virüs yapmayı, özellikle python2 ile virüs yapmayı tavsiye etmiyorum. Çok yavaş çalışan ve sık sık bazı konularda zorlandığım bir konu oldu. Tavsiyem C# veya C++dır. Bu diller hem zaten direkten masaüstü Windows uygulamaları için kullanılmakta hem de hızlı çalışmaktadır.
Benden bugünlük bu kadar. Aklınıza takılan sorular varsa mesaj atabilirsiniz. Hepinize iyi günler dilerim.
Bu yazıda Sıfırdan Kendi Backdoor Trojanımızı Geliştirelim 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. Ardından bu seri bitmiş olacak. Giriş kısmında çok oyalanmak istemiyorum, bu yüzden genel başlıklara geçiyorum.
Konu Başlıkları:
- Pynput Kütüphanesi Kullanımı
- Temel Keylogger Oluşturma
- Threading Kütüphanesi İle Keylogger Debugging
- Keyloggerı Virüse Dahil Etme
- Hedef İle İletişim Kurma
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 Pythonun kendi IDEsi üzerinden yapacağım.
İlk olarak pythona 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 bu yeni projemize pynput kütüphanemizi dahil edelim. .keyboard kısmını da eklememiz lazım çünkü bir keylogger yapacağız.
Şimdi 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.
Ardından bu fonksiyonu çağırmak için yazdığımız her tuşu izleyecek olan kod dizinini girelim.
Ardından yazdıklarımızı ayırması, yani daha okunaklı hale getirmesi için join fonksiyonunu kullanıyoruz.
Şimdi ise öncelikle isterseniz bu keylogger.py programımızı kaydedelim. Ardından ise ç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, tht ve doliatius 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şturma
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.
Ardından karakterler değişkenimizi, tus_yazdir fonksiyonunun içine global olarak alıyoruz. Aynı şekilde basılan tuşları char metodu ile düzenliyoruz.
Tabi ş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 turkhackteam yazdıralım.
Fakat normal harfler haricinde herhangi bir özel tuşa basarsak ne olur? Mesela turk hack team yazdıralım.
Gördüğünüz gibi boşluk tuşuna basar basmaz program çöktü çünkü özel karakterleri desteklemiyor char metodumuz. 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.
Ardından ise 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 printleri de siliyoruz. Karakterler değişkenimizi buranın da içinde global olarak ayarlıyoruz.
Şimdi ise threadingin 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.
Burada ben değeri 10 saniye olarak ayarladım ancak siz bunu kendi isteğinize göre ayarlayabilirsiniz. Ardından ise 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 entera basınca satır atlamak ve backspacee 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 bir de.
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.txtye 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.
Şimdi ise 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 .
Sonraki bölüme geçelim.
Keyloggerı Virüse Dahil Etme
Evet, bu bölümde ise az önce oluşturduğumuz bu keyloggerı trojan.pymize dahil edeceğiz. Bunun için kısaca import keylogger yapabiliriz. Ama önce keyloggerı çalıştıran kodları fonksiyon içine alacağız.
Buradan sonra ayarlamamız gerek bir diğer nokta ise keylogger.txt dosyasının nereye kaydolacağıdır. Normalde şu anki hali ile bu yeni dosya virüsün çalıştırıldığı yere açılır ve kaydedilir. Biz bu kaydolma yerini değiştireceğiz. Appdata yoluna kaydedeceğiz ancak öncelikle programımıza os kütüphanesini eklemeliyiz. Ardından ise kaydet isimli yeni değişkenimize kaydedilecek yolu seçiyoruz. Ardından ise bu değişkeni kullanarak o yolu belirtiyoruz.
Tabi siz bu ismi keylogger.txt yapmak zorunda değilsiniz, hatta önerim yapmayın. Windowslog.txt gibi bir isim yaparsanız daha az şüphe çeker.
Bu keyloggerda şimdilik yapacağımız bir şey kalmadı.
Şırada trojan.pyye gitmek var. Buraya gelip sırasıyla threadingi ve keyloggerı import ediyoruz.
Burada belki IP adresini değiştirdiğimi fark etmiş olabilirsiniz, bunun sebebi Kali sanal makinem üzerinde biraz kurcalama yaparken pythonu bozmuş olmam. Onunla çok uğraşmak istemediğimden dolayı Windows üzerinde çalıştırıyorum.
Şimdi önceki konularda da yaptığımız üzere key_baslat isimli bir elif bloğu açıp gerekli olan kodları bu bloğun altına giriyorum.
Burada keylogger programımızın keyloggerbaslat isimli fonksiyonunu başlatmak için olan kodları girdik.
Ardından ise 0 tuşuna basınca keylogger.txtnin silinmesi için gereken kodları girelim. Hedef makinede iz bırakmak istemeyiz değil mi? O yüzden biz bağlantıyı tamamen kesince bu keylogger dosyası da silinsin.
Elif bloğunda 0ın olduğu yerin altına yazacağız birkaç kod.
Burada bir dosyayı silmek için gereken kodu yazdık yalnız eğer zaten böyle bir dosya yoksa diye programın çökmesini önlemek amacıyla bir try-except içine aldık. Şimdi silinsin diye belirttiğimiz değişkenin içine dosya yolunu yazmamız lazım. Bunun için projemizin en sonuna bu dosya yolunu ekliyorum.
Bir de eklememiz gereken bir diğer özellik ise bu keylogger.txt dosyasında yazanları servera yani bize yönlendirmek. Bunun içinde yeni bir elif bloğu açıyoruz.
Ardından ise virüsün bu komutu aldığında bize geri dosyayı göndermesi için gerekli olan dosyayı okuma ve verigonder fonksiyonu üzerinden bize göndermesini sağlayacak kodları giriyorum.
Trojan.py üzerinde yazacağımız kodlar halledildi. Şimdi sırada server üzerine yazacağımız kodlar var.
Server.pynin bir kopyasını Windows makineme almıştım, onun üstüne kodlayacağım.
Yeni bir elif bloğu oluşturup keylog başlat fonksiyonunu giriyorum. Eğer bu koda continue eklemezsek else kısmına gider ve orada hiçbir dosya karşılanmadığı için program çöker.
Ardından ise ister verial fonksiyonunu kullanarak keylog oku fonksiyonunu çağırın, isterseniz de zaten else bloğunda verial olduğu için bir şey yazmayın.
Ben yazmamayı seçtim.
Buradan sonra server.py üzerinde yapmamız gereken tek şey yardım menüsünü güncellemek. Kolay bir işlem.
Şu anda server üzerinde de, trojan.py üzerinde de bir sıkıntı yok gibi görünüyor. İsterseniz çalıştırıp deneyelim.
NOT: Colorama kütüphanesi pythonın kendi IDEsi üzerinden çalıştırıldığında bu şekilde, Unicode olarak görünüyor. O yüzden windowsta bu şekil bir çalıştırma ile programı okumak zor olabilir.
Görüldüğü üzere keylogı başlattık ve ardından okuduk. Kabul ediyorum, çok okunaklı değil. Bu yüzden siz yazdırma aralığını 1 dakika veyahut da 30 saniye olarak ayarlarsanız daha güzel olur. Ayrıca klavye üzerindeki tüm özel karakterleri elif içine alabilirsiniz. Bu arada Windows üzerinden kodu çalıştırdığımda dir gibi komutlar çalışıyor. Linux üzerinde de çalışmıyor. Nedenini daha anlayamadım.
Yukarıdaki fotoğrafta da görebildiğiniz üzere appdatada keylogger.txt isimli bir dosya oluşmuş.
Genel olarak keyloggerı virüse dahil etme işlemi bu kadardı. Ancak burada söylemek istediğim bir şey, ben tüm server kodlarını linuxta, tüm trojan.py kodlarını da windowsta çalıştırılacak şekilde ayarladım. Bu yüzden bazı durumlarda, şimdiki gibi, server kullanımı çok zor olabilir.
Bir sonraki başlığımıza geçelim, serinin son alt başlığına.
Hedef İle İletişim Kurma
Dürüst olmak gerekirse bu bölümde direkt olarak yeni bir kod eklemeyeceğim. Daha çok nasıl kurbanınızla iletişim kurarsınız, bunu göstereceğim. Ama pratik bir yol ile, zaten şu ana kadar yaptığımız her şeyi kullanarak iletişime geçeceğiz.
Burada, ilk bölümde yaptığımız basit mesajlaşma uygulamasına tekrardan bir göz atalım. Bu kısımda çünkü o şekilde bir uygulamayı kullanarak hedef ile sohbet edeceğiz.
Not: Bu alt başlığı 2 gün sonra yazdım ve o arada kali linuxımı düzelttim. O yüzden kali üzerinden devam edeceğiz.
İlk önce isterseniz ilk bölümdeki uygulamamızı tekrardan gözden geçirelim. İlk olarak kendimizin kullanacağı versiyona bakalım.
Bir de bunun client side, yani kurbana göndereceğimiz versiyonuna bakalım.
Evet, bu resimler ilk bölümdekilerden. Bu yüzden ben de şu an bu programları şimdi için düzenledim. Aşağıda görebilirsiniz.
Kendimiz için:
Hedef İçin:
Tamam, dürüst olmak gerekirse şu an hacker ile konuşuyorsun ifadesini kendimde kullanınca biraz komik oldu. Ancak yazacak başka bir şey gelmedi aklıma. Yoksa ben normal 2 senelik bir lamer veya script kiddieyim. Hangisini isterseniz yani .
Şimdi gelelim şimdi ne yapacağımıza, hedef bilgisayarda muhtemelen pyhton yüklü değildir. Biz de bu yüzden ilk olarak mesajal.py isimli dosyamızı pyinstaller ile exe yapacağız.
Kod:
pyinstaller onefile /root/Desktop/trojan/mesajal.py
Burada sadece onefile parametresini kullandık çünkü programımız başlayınca Shell açılsın ve mesajları oradan yazalım. İsterseniz buna colorama da ekleyebilirsiniz ancak ben eklemedim. Bu arada bizim trojan klasörümüzde de ikinci bir mesajat.py dosyası var.
Bu arada size önerim pyinstaller ile wine kullanarak veya Windows üzerinden .exe haline getirmeniz. Yoksa kali üzerinde problem olabiliyor. Bu arada, buradan sonra yapabileceğimiz işlemleri tek bir dosya içinde de yapabiliriz ancak işleri iyice karıştırmak istemiyorum.
Son olarak da; mesajal ve mesajat içindeki socketi 7777 portu yerine 7778 portuna ayalardım. Eğer address already in use hatası alırsanız buna dikkat edin.
Şimdi Linux üzerinde server.pyı çalıştıralım. Ardından ise Windows üzerinde trojanı çalıştırıyorum ben.
Göründüğü üzere bağlantı geldi. Ardından yye basıp yardım menüsüne geldik. Buradan sonra yapmamız gereken basitçe server ile aynı klasörde bulunan mesajal.exe dosyasını yükle fonksiyonu ile hedefin cihazına yüklemek. Ayrıca yüklemek istediğiniz yeri isterseniz cd komutu ile ayarlayabilirsiniz. Ben direkten aktif trojan.exenin çalıştırıldığı yere atacağım. Ayrıca fark ettiyseniz yardım kısmı şu anda güzel ve eksiksiz durumda.
Buradan sonra yapmamız gereken tek şey önce mesajat.pyyi çalıştırmak, ardından ise server üzerinden yüklenen_dosya.exe ile yüklenen dosyayı çalıştırıyoruz.
Gördüğünüz gibi şu anda mesaj penceremiz açıldı. Bu arada yüklenen_dosya olmasının nedeni bizim yükle fonksiyonunda öyle ayarlamış olmamız.
İsterseniz şimdi de birkaç mesaj yazalım.
Görebildiğiniz üzere gayet bu şekilde hedefimiz ile mesajlaşabiliyoruz. Zannediyorum ki kendi yaptığımız bu virüs için bu kadar özellik yeter. Artık bir trojanın nasıl yapıldığı hakkında fikriniz var.
Serimizin sonuna geldik artık. Benim için çok eğitici, bir o kadar da uğraştırıcı bir seriydi. Toplam seriye kaç günümü verdiğimi bile artık hatırlamıyorum. Sizlere önerim, araştırmanız. İlgilendiğiniz konular hakkında araştırın ki detaylıca ne olduğunu öğrenin. Sonra benim yaptığım gibi bilgilerinizi paylaşabilirsiniz. Bu şekilde başkalarını da bilgilendirebilirsiniz.
Artık ortalama bir Windows trojanının nasıl yapıldığını biliyorsunuz. Her ne kadar bu seride python kullansam da Python ile virüs yapmayı, özellikle python2 ile virüs yapmayı tavsiye etmiyorum. Çok yavaş çalışan ve sık sık bazı konularda zorlandığım bir konu oldu. Tavsiyem C# veya C++dır. Bu diller hem zaten direkten masaüstü Windows uygulamaları için kullanılmakta hem de hızlı çalışmaktadır.
Benden bugünlük bu kadar. Aklınıza takılan sorular varsa mesaj atabilirsiniz. Hepinize iyi günler dilerim.