Рубрики
Без рубрики

Для начинающих – проанализировать свою собственную ежедневную активность, создавая Python Keylogger 👽

Проанализируйте свою собственную повседневную активность, создавая Python Keylogger. Теги с Python, Matplotlib, Keylogger, начинающим.

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

Так что в этом руководстве я покажу вам, как построить KeyLogger в Python, который позволит нам хранить слова, которые мы введены в А .текст Затем можно увидеть, как проанализировать/представить эти данные (это должно быть весело 😉).

Первые вещи сначала 🎆. Я близок к своим первым 1000 подписчикам на разработке, хотя я еще не был супер активным. Поэтому я хочу поблагодарить всех, кто следовал за мной (я рад, что вам нравятся моих писателей) и обещают лучшего взаимодействия от 😄.

Отлично, давайте доберемся до этого.

Простой Python – Сохранить и запись ключей нажата 🦄

Это не будет сложным. Для этого нам нужно только две функции:

  • Тот, который хранит каждую клавишу нажатую в массиве.
  • Тот, который принимает ключи, хранящиеся в массиве и напишите их в .txt файл.

Давайте определим первую функцию, вызывая ее on_press. :

keys = []
def on_press(e):
    global keys  #access the array keys
    keys.append(e)  #add the key e to the array

Эта функция принимает аргумент, который будет нажатом нажатой клавиши (мы будем передавать его немного), а затем получить доступ к массиву глобальных ключей, а затем добавить клавишу нажатой на этот массив. Но так далеко не работает, так как мы еще не позвонили. Поэтому нам нужно позвонить эту функцию каждый раз, когда ключ нажата. Для этого мы импортируем несколько модулей из Pyynput библиотека. На самом вершине вашего .py Файл, давайте добавим эту строку:

from pynput.keyboard import Key, Listener

Чтобы убедиться, что у вас установлен Piynput, запустите команду PIP Установите Pynput

и в самом нижней части файла, давайте используем библиотеку слушателя, которую мы импортировали, чтобы вызвать функцию, которую мы только что определены ( on_press ) каждый раз, когда ключ нажата.

with Listener(on_press = on_press) as listener:
    listener.join()

Здорово. Теперь наш код выглядит так:

from pynput.keyboard import Key, Listener

keys = []
def on_press(e):
    global keys  #access the array keys
    keys.append(e)  #add the key e to the array

with Listener(on_press = on_press) as listener:
    listener.join()    

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

def write_file(keys):
    with open("log.txt", "a+") as f: #the a+ tells python to create log.txt if it does not exist
        for key in keys:
            k = str(key).replace("'", "")
            if k.find("space") > 0:
                    f.write('  ')
            elif k.find("Key") == -1:
                    f.write(k)

Здорово. Теперь эта функция открывает log.txt Файл, идет бросить массив у нас, то напишите ключ к файлу ( как f ). Однако у нас здесь мало условных. Сначала мы удалим? ‘ ключ, то если нажатый нажатый “пространство” мы не хотим писать слово пространство Таким образом, вместо этого мы просто введите фактическое пространство “” в строке. В противном случае мы просто вводим ключ, как оно есть.

Отлично 🔥 Теперь у нас есть функция готова, но когда мы это называем ?? Как вы видели, есть два шага к .txt файл. Сначала хранить ключи в массиве, второе, взяв ключи от массива и набрав их в файл. Что означает мы должны вызвать функцию write_file Только после хранения ключа в массиве. Однако, поскольку write_file Функция проходит через массив один за другим, мы не можем позвонить с ним каждый раз, когда мы добавляем ключ к массиву, поскольку оно вводит его снова и снова. Таким образом, давайте позвольте только назвать только каждый раз, когда в массиве 10 клавиш, а после того, как мы назовем это, мы сделаем этот массив снова.

Так что давайте отредактировать on_press Функция:

count = 0 # his keeps track of how many items there are in the array
keys = []

def on_press(e):
    global keys, count
    keys.append(e)
    count += 1
    if count >= 10:
        count = 0
        write_file(keys)
        keys = []  # make the array empty after we call the write_file function.

Похоже, мы это сделали! Наш последний код выглядит так:

from pynput.keyboard import Key, Listener

count = 0
keys = []

def on_press(e):
    global keys, count
    keys.append(e)
    count += 1
    if count >= 10:
        count = 0
        write_file(keys)
        keys = []

def write_file(keys):
    with open("log.txt", "a+") as f:
        for key in keys:
            k = str(key).replace("'", "")
            if k.find("space") > 0:
                    f.write('  ')
            elif k.find("Key") == -1:
                    f.write(k)

with Listener(on_press = on_press) as listener:
    listener.join()

yayy 🦄 Теперь запустите этот код, попробуйте вводить несколько предложений в любом месте, они заставляют закрыть код. Вы увидите новое log.txt Файл появляется в том же каталоге, в вашем коде есть. Вы увидите ключи красиво отформатированы как слова в одной строке. Теперь следующий шаг – прочитать эти слова и попытаться проанализировать их.

Как я уже говорил, я хотел держать это просто. Так что все, что я сделал, было сосчитать:

  • Сколько персонажей
  • Сколько строк
  • Сколько слов
  • Сколько раз каждое слово было повторено.

Ради сохранения этого простого и новичка, мы сделаем новый файл Python, который сделает работу с чтением/анализа. Так давайте сделаем новый readkeys.py Файл в том же каталоге и начать работу там.

Открыть readkeys.py. и введите следующее:

log_file = open("log.txt", "r+") #open file in reading mode (r)

chars = 0
lines = 0
letters = []

for i in log_file.read():
    if i == '\n':  # \n means Enter key which is a new line
        lines += 1
    chars += 1
    letters.append(i)

Цикл, который мы написали, читает весь log.txt Файл, который мы получили от предыдущего кода, мы пишем и считают, сколько символов и строк есть, и добавьте буквы в массив. (Мы рода повторно сделали то, что сделали в предыдущем коде 😄).

Теперь мы хотим сделать, это сделать новый массив, который имеет слова, а не буквы. То, как мы делаем это по присоединяться к все буквы массива в одну строку. Тогда мы Сплит эта строка в массиве слов каждый раз Мы видим пространство ( Сплит и Присоединяйтесь к Полезные методы, которые Python предоставляют нам. Давайте посмотрим, как легко использовать их ).

key_string = "".join(letters)
word_string = key_string.replace('\n', " ")
final_keywords_list = word_string.split()

Это может выглядеть слишком сложным, но это на самом деле нет. Каждая строка здесь делает шаг, который мы упомянули ранее:

  • Присоединяйтесь к букве в одной строке
  • Замените пробелы ввода на правильные пробелы
  • Разделить строку в массив слов

А сейчас. final_keywords_list это массив слов. Теперь мы можем сделать последний бит анализа. Давайте посчитаем повторяющиеся слова!

Сначала мы определяем пустой словарь, называемый подсчитанным. Затем мы проходим через массив слов. Для каждого слова, если он существует в словаре, мы увеличиваем его счет. Если это не так, мы добавляем его.

counted = {}

for letter in final_keywords_list:
    letr = str(letter)
    if letr in counted:
        counted[letr] += 1
    else:
        counted[letr] = 1

Милая. Наш код делает то, что мы хотим, чтобы это сделать до сих пор. У нас есть словарь, который набрал каждое слово и сколько раз Это было повторено

Давайте доберемся до визуализации!

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

Ради этого учебника я решил сделать гистограмма, сравнивая повторяющиеся слова. Для этого мы будем использовать библиотеку под названием Матплотлиб Отказ Это самая известная библиотека, используемая в науке о данных. Так что давайте доберемся до него. Сначала убедитесь, что вы устанавливаете его. Инструкции здесь Отказ

Пока наш код выглядит так:

log_file = open("log.txt", "r+")

chars = 0
lines = 0
letters = []
counted = {}

for i in log_file.read():
    if i == '\n':
        lines += 1
    chars += 1
    letters.append(i)

key_string = "".join(letters)
word_string = key_string.replace('\n', " ")
final_keywords_list = word_string.split()

for letter in final_keywords_list:
    letr = str(letter)
    if letr in counted:
        counted[letr] += 1
    else:
        counted[letr] = 1

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

new_dict = {}  #making a new empty dictionary

for item in counted:  #looping through the old one
    if counted[str(item)] >= 3:  #if repeated more than 3 times
        new_dict[str(item)] = counted[str(item)]  #add to the new dictionary

Удивительно Теперь мы можем начать рисовать 🦄

Сначала нам нужно импортировать библиотеку, которую мы установили:

import matplotlib.pyplot as plt  #calling plt just makes it more convenient

Теперь внизу нашего кода давайте начнем построить слова:

plt.title('KEYLOG ANALYSIS', fontsize = 20)  #choosing a title for the graph
plt.bar(range(len(new_dict)), list(new_dict.values())) 
plt.xticks(range(len(new_dict)), list(new_dict.keys()))

plt.show()

Позволяет на минутку, чтобы объяснить это. PLT.BAR () Метод занимает много аргументов. Позиционные аргументы по умолчанию являются X-координатами графика (указатели слов) и Y-координаты графика (фактические слова).

plt.xticks () Метод используется для маркировки X-координат графика. Поэтому, принимая ключи нашего словаря, поскольку второй аргумент будет построить каждое слово под его баром.

Здорово. Теперь мы все настроены, чтобы попробовать это! Последний код выглядит так:

import matplotlib.pyplot as plt

log_file = open("log.txt", "r+")

chars = 0
lines = 0
letters = []
counted = {}
new_dict = {}

for i in log_file.read():
    if i == '\n':
        lines += 1
    chars += 1
    letters.append(i)

key_string = "".join(letters)
word_string = key_string.replace('\n', " ")
final_keywords_list = word_string.split()

for letter in final_keywords_list:
    letr = str(letter)
    if letr in counted:
        counted[letr] += 1
    else:
        counted[letr] = 1

for item in counted:
    if counted[str(item)] >= 3:
        new_dict[str(item)] = counted[str(item)]

print(lines, "Lines", " || ", chars, "Character", " || ", len(final_keywords_list), "Words")
print('\n')

plt.title('KEYLOG ANALYSIS', fontsize = 20)
plt.bar(range(len(new_dict)), list(new_dict.values()))
plt.xticks(range(len(new_dict)), list(new_dict.keys()))

plt.show()

Теперь остальное для вас делать. Просто запустите первый кейлоггер, который мы написали. Сделайте работу с вашей клавиатурой. Как только вы закончите, запустите этот код и посмотрите, что он вам говорит! Пожалуйста, не стесняйтесь поделиться результатом на скриншоте ниже (это может быть действительно забавно иногда 😆). Также не стесняйтесь клонировать проект на Github и беспорядок с этим.

Я нахожусь в пожизненной миссии для поддержки и внося вклад в общие знания веб-сообщества как можно больше. Некоторые из моих писаний могут звучать слишком глупо, или слишком сложно, но никакие знания никогда не бесполезны. Если вам нравятся мои статьи, не стесняйтесь помочь мне продолжать писать, получая меня кофе 😉 ❤ ️

Оригинал: “https://dev.to/mustafaanaskh99/for-beginners-analyse-your-own-daily-activity-by-building-a-python-keylogger-44kc”