Кейлоггер

#3 Кейлоггер. Глобальные переменные.

Здравствуйте, дорогие друзья.

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

Наша основная задача — это отправить файл пользователю, как исполняемый файл.  Юзер запустит программу, и она будет работать в фоновом режиме, и будет отправлять нам все нажатия клавиш. Имейте ввиду, что отображение существующей программы будет выглядеть как нажатия клавиш в терминале. Это для нас совершенно бесполезно.

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

Давайте вернемся к коду, и начнем с переменной «key», которая содержит значение каждого введенного символа, который набирает пользователь, поэтому нам нужно реализовать механизм записи логов. Можно также отправить e-mail, с переменной «key», в качестве содержимого. Проблема заключается в том, что файл будет записываться и открываться каждый раз, когда пользователь нажимает клавишу. То есть, если Вы нажали клавиши 20 раз, то получите 20 e-mail сообщений, или файл будет перезаписан 20 раз. В обоих случаях — это плохо, и лучшим решением будет использование переменной.

Давайте назовем ее «log», и будем добавлять значение переменной «key». Проблема заключается в том, что создание переменной в функции «process_key_press» — это не лучшее решение.

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

создание переменной вне функций

Перейдем к функции обратного вызова. Каждый раз, когда пользователь нажимает на клавишу, она передается в переменную «key». Объявим в этой функции «log», а строка будет иметь вид: «log = log + key», и так как мы только тестируем программу, то нужно в функции вывода, добавить «log»:

log = log + key print(log)

Далее, нам нужно объявить глобальную переменную, в функции обратного вызова «process_key_press»:

глобальная переменная в функции обратного вызова

Заметьте, что когда мы объявляем глобальную переменную, то в ней нет отступов и пробелов. А вот, при объявлении в функции, нужно указать переменную со значением «global».

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

На этом внесенные правки завершились, и мы можем пробовать запустить нашу программу:

запуск программы

Что-то пошло не так. У нас ошибка конкатенации «str» и «KeyCode»:

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

Видим в начале кода, что глобальная переменная «log» — это строка, а объект «key», можно рассматривать как строку. Код выглядит вот так:

log = log + str(key)

Перейдем в терминал, и запустим наш скрипт:

рабочий скрипт

Все нажатия клавиш записываются одной переменной.

На этом все. всем хорошего дня!

Первая часть статьи — Кейлоггеры.

Вторая часть статьи — Кейлоггеры.