#3 Кейлоггер. Глобальные переменные.
Здравствуйте, дорогие друзья.
Так как у нас есть основной функционал кейлоггера, и мы можем записывать нажатия клавиш. Давайте доработаем нашу программу, чтобы сделать ее полезнее.
Наша основная задача — это отправить файл пользователю, как исполняемый файл. Юзер запустит программу, и она будет работать в фоновом режиме, и будет отправлять нам все нажатия клавиш. Имейте ввиду, что отображение существующей программы будет выглядеть как нажатия клавиш в терминале. Это для нас совершенно бесполезно.
Нам нужно написать код программы, для записи логов, которые отображают все нажатия клавиш.
Давайте вернемся к коду, и начнем с переменной «key», которая содержит значение каждого введенного символа, который набирает пользователь, поэтому нам нужно реализовать механизм записи логов. Можно также отправить e-mail, с переменной «key», в качестве содержимого. Проблема заключается в том, что файл будет записываться и открываться каждый раз, когда пользователь нажимает клавишу. То есть, если Вы нажали клавиши 20 раз, то получите 20 e-mail сообщений, или файл будет перезаписан 20 раз. В обоих случаях — это плохо, и лучшим решением будет использование переменной.
Давайте назовем ее «log», и будем добавлять значение переменной «key». Проблема заключается в том, что создание переменной в функции «process_key_press» — это не лучшее решение.
А вот наиболее приемлемым способом, будет создание переменной, вне всех функций. При запуске программы — эта переменная будет пустой:
Перейдем к функции обратного вызова. Каждый раз, когда пользователь нажимает на клавишу, она передается в переменную «key». Объявим в этой функции «log», а строка будет иметь вид: «log = log + key», и так как мы только тестируем программу, то нужно в функции вывода, добавить «log»:
Далее, нам нужно объявить глобальную переменную, в функции обратного вызова «process_key_press»:
Заметьте, что когда мы объявляем глобальную переменную, то в ней нет отступов и пробелов. А вот, при объявлении в функции, нужно указать переменную со значением «global».
Использование глобальных переменных в некоторых случаях, не актуальное занятие, так как нужно вносить изменения во многих функциях, и можно запутаться в коде. Если что-то пойдет не так, найти ошибку будет не простой задачей.
На этом внесенные правки завершились, и мы можем пробовать запустить нашу программу:
Что-то пошло не так. У нас ошибка конкатенации «str» и «KeyCode»:
Не паникуйте, когда будете получать ошибки такого рода. Это все фиксится довольно быстро.
Видим в начале кода, что глобальная переменная «log» — это строка, а объект «key», можно рассматривать как строку. Код выглядит вот так:
Перейдем в терминал, и запустим наш скрипт:
Все нажатия клавиш записываются одной переменной.
На этом все. всем хорошего дня!