Autor
|
Tema: Ayuda GetAsyncKeyState() (Leído 5,636 veces)
|
Luchoz95
Desconectado
Mensajes: 58
|
Hola genteee , miren tengo esta dll , y la quiero injectar a un proceso .. #include <windows.h> BOOL APIENTRY DllMain (HINSTANCE hmodule, DWORD reason, LPVOID reserved ) { switch (reason) { case DLL_PROCESS_ATTACH: if(GetAsyncKeyState(VK_F12)) { MessageBox(NULL,"Presionaste F12","Mensaje",MB_OK); } break; } return TRUE; }
injecto la dll , pero cuando preciono F12 no pasa nada ... el programa donde es injectada ya tiene la funcion GetAsyncKeyState, entonces les hago una pregunta , tengo que hookear la funcion GetAsyncKeyState para que mi F12 funcione ? Saludos !
|
|
|
En línea
|
|
|
|
|
x64core
Desconectado
Mensajes: 1.908
|
Agrega un loop de mensajes, y yo crearia un hilo para capturar las teclas o bien estableceria un hook que es mejor.
|
|
|
En línea
|
|
|
|
85
|
Claro es como te dije por PM, GetAsyncKeyState te sirve para comprobar continuamente el estado de una llave (key), si vos lo hacés tal como está en el primer post, significa que sólo se va a comprobar 1 sóla vez cuando la DLL se adjunte al proceso. Con una sóla vez que lo compruebes no sirve, porque vos podés presionar una llave en cualquier momento y no justo cuando la DLL se carga, por eso necesitás hacerlo dentro de un bucle.
Al mismo tiempo, fijate que por ejemplo en mi código, yo tengo 2 hilos. El principal de la aplicación y el secundario creado con CreateThread explícitamente. Bueno lo que tenés que hacer dentro del secundario es poner un Sleep con un cierto tiempo, ya que dependiendo del sistema de planificación, vos sabés que los hilos necesitan compartir el tiempo de ejecución asignado al proceso. (Ejecución = CPU). Sería como una planificación manual del programador, poner un Sleep para dejar "respírar" al hilo secundario y pasar al primario.
Alguien experto en planificación, multithreading, multiprocessor, etc te va a poder explicar con más detalle todo esto, porque puede ser diferente para distintas CPUs (monoprocesador o multiprocesador).
|
|
|
En línea
|
|
|
|
x64core
Desconectado
Mensajes: 1.908
|
Claro es como te dije por PM, GetAsyncKeyState te sirve para comprobar continuamente el estado de una llave (key), si vos lo hacés tal como está en el primer post, significa que sólo se va a comprobar 1 sóla vez cuando la DLL se adjunte al proceso. Con una sóla vez que lo compruebes no sirve, porque vos podés presionar una llave en cualquier momento y no justo cuando la DLL se carga, por eso necesitás hacerlo dentro de un bucle.
Al mismo tiempo, fijate que por ejemplo en mi código, yo tengo 2 hilos. El principal de la aplicación y el secundario creado con CreateThread explícitamente. Bueno lo que tenés que hacer dentro del secundario es poner un Sleep con un cierto tiempo, ya que dependiendo del sistema de planificación, vos sabés que los hilos necesitan compartir el tiempo de ejecución asignado al proceso. (Ejecución = CPU). Sería como una planificación manual del programador, poner un Sleep para dejar "respírar" al hilo secundario y pasar al primario.
Alguien experto en planificación, multithreading, multiprocessor, etc te va a poder explicar con más detalle todo esto, porque puede ser diferente para distintas CPUs (monoprocesador o multiprocesador).
Seria bueno publicar codigos aquí para la gente que tenga problemas similares
|
|
|
En línea
|
|
|
|
Luchoz95
Desconectado
Mensajes: 58
|
Gracias a todos por las respuesta, mirando un poco el codigo que me paso 85, pude hacer algo , me sirvio mucho la explicacion que me diste sobre Sleep(), bueno aca el codigo ! //Ejemplo GetAsyncKeyState #include <stdio.h> #include <windows.h> #define INTERVAL 250 int main() { char * TECLAF12 ="OFF"; char * TECLAF11 ="OFF"; char * TECLAF10 ="OFF"; char * TECLAF9 ="OFF"; while(!GetAsyncKeyState(VK_INSERT)) //Cuando se preciones la tecla INSERT se saldra del ciclo while { printf("Tecla [F12] -> : [%s]\n",TECLAF12 ); printf("Tecla [F11] -> : [%s]\n",TECLAF11 ); printf("Tecla [F10] -> : [%s]\n",TECLAF10 ); printf("Tecla [F09] -> : [%s]\n",TECLAF9 ); if(GetAsyncKeyState(VK_F12)) { TECLAF12 ="ON"; } if(GetAsyncKeyState(VK_F11)) { TECLAF11 ="ON"; } if(GetAsyncKeyState(VK_F10)) { TECLAF10 ="ON"; } if(GetAsyncKeyState(VK_F9)) { TECLAF9 ="ON"; } Sleep(INTERVAL); } }
Espero que les sirva de ejemplo , S2!
|
|
|
En línea
|
|
|
|
x64core
Desconectado
Mensajes: 1.908
|
Es mejor establecer un hook, si sera en una dll a injectar entonces no es necesario global.
|
|
|
En línea
|
|
|
|
Luchoz95
Desconectado
Mensajes: 58
|
si por ahora estoy tratando de entender la funcion , despues voy a ver si la puedo implementar en demas cosas
|
|
|
En línea
|
|
|
|
85
|
Si ese código funciona está bien, pero lo que te decía del Sleep es que era necesario cuando tenés más de un hilo, es como una planificación manual. En este caso no es necesario porque tenés 1 sólo hilo, aunque dejalo para que no se queme tu CPU de tantas iteraciones XD
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
ayuda con GetAsyncKeyState
Programación Visual Basic
|
oPen syLar
|
0
|
1,581
|
6 Diciembre 2006, 15:41 pm
por oPen syLar
|
|
|
Sobre getasynckeystate en c#
Programación General
|
Foxzer
|
1
|
8,557
|
14 Mayo 2010, 06:59 am
por Littlehorse
|
|
|
bromilla con GetAsyncKeyState
Programación Visual Basic
|
asdexiva
|
2
|
2,570
|
20 Octubre 2013, 14:52 pm
por asdexiva
|
|
|
Llamadas API de keylogger/SetWindowsHookEx vs GetAsyncKeyState
Análisis y Diseño de Malware
|
TickTack
|
0
|
11,802
|
27 Abril 2021, 09:30 am
por TickTack
|
|
|
Escapar de un Ciclo con GetAsyncKeyState
Programación C/C++
|
snoopty
|
4
|
7,917
|
16 Septiembre 2021, 01:10 am
por snoopty
|
|