Содержание статьи
Чтобы просто посмотреть IP-адрес и другие настройки сети, тебе придется обратиться к командной строке и выполнить команду ipconfig /
. Ситуация одна из самых частых для эникейщиков и удаленных шаманов, но она хотя бы быстро решаема. Но если придется собирать более серьезный набор информации о машине, с которой сейчас будешь работать, — без автоматизации не обойтись. Этим мы сегодня и займемся.
Имей в виду, что эта программа может использоваться как для быстрого сбора информации о своей системе, так и для кражи идентифицирующей информации с компьютера жертвы. Мы граждане законопослушные, поэтому пусть это и не пароли, но, чтобы не раздражать правоохранителей, все тесты будут проводиться на изолированных виртуальных машинах.
warning
Несанкционированный доступ к компьютерной информации — преступление. Ни автор, ни редакция журнала не несут ответственности за твои действия.
Инструменты
Сначала давай разберемся, где будем писать код. Можно кодить в обычном виндовом «Блокноте», но мы воспользуемся специальной IDE для Python — PyCharm. Установка и настройка просты как два рубля: скачал установщик, запустил — и кликай себе «Далее», пока есть такая кнопка.
Еще нам потребуется Python. Я буду использовать версию 3.9.0 — с ней точно все работает.
Задачи
Давай сначала обрисуем, что мы вообще планируем делать. Я планирую собирать следующую информацию:
- IP-адрес.
- MAC-адрес.
- Имя пользователя.
- Тип операционной системы.
- Скорость работы системы.
- Время.
- Скриншот.
- Скорость интернет‑соединения.
- Модель процессора.
И отправляться это все будет прямиком тебе в телегу через специальный бот.
Зачем?
Наверняка у тебя возник вопрос: зачем может понадобиться MAC-адрес или модель процессора? Эти параметры меняются очень и очень редко, так что прекрасно подходят для фингерпринтинга. Даже если пользователь купит более быстрый интернет‑канал или поменяет часовой пояс, ты без особого труда сможешь определить, что уже имел дело с этим компьютером. Стоит помнить, что ровно такие же методы используют хитрые рекламщики для идентификации пользователей, да и разработчики триальных версий программ тоже. Эта статья поможет чуть лучше понять, что можно узнать о твоем компьютере в полностью автоматическом режиме, а как применить эту информацию — решать только тебе.
В этой статье мы не будем показывать, как сформировать устойчивый к незначительным изменениям идентификатор, который поможет однозначно определить конкретный компьютер. Если тебе станет интересно — пиши в комментариях, и, возможно, мы сделаем большой гайд на эту тему!
Создаем основу программы
Для отправки данных я решил воспользоваться Telegram-ботом. Создать его ты можешь через BotFather, а после сохранить token твоего творения. Публиковать его нельзя — любой, кто получит этот токен, сможет захватить контроль над твоим ботом.
Для подключения к Bot API «телеги» нужны всего две строчки:
import telebotbot = telebot.TeleBot("token from BotFather") # Подключение бота
Чтобы оценить быстродействие, можно написать еще пару строк. Весь дальнейший код расположим между ними. Описанное выше подключение бота уже вписано сюда.
import telebotfrom datetime import datetimebot = telebot.TeleBot("token")start = datetime.now() # Начало отсчета# Сюда поместим нашу основу, поэтому оставляем местоends = datetime.now() # Конец отсчетаworkspeed = format(ends - start) # Вычисление времени
Теперь перейдем собственно к сбору данных.
Сбор данных
Я не буду долго ходить вокруг да около и сразу начну разбирать секцию импорта.
import getpassimport osimport socketfrom datetime import datetimefrom uuid import getnode as get_macimport pyautoguifrom speedtest import Speedtestimport telebotimport psutilimport platformfrom PIL import Image
Теперь кратко рассмотрим, что делает каждый модуль. Если какие‑то функции тебе не нужны, выброси строку импорта модуля и код, который использует этот модуль. Все просто!
Итак, за работу с ОС и локальными ресурсами отвечают эти четыре модуля:
-
getpass
нужен для определения информации о пользователе; -
os
используем для взаимодействия с функциями ОС, вроде вызова внешних исполняемых файлов; -
psutil
работает с некоторыми низкоуровневыми системными функциями; -
platform
предоставит информацию об ОС.
Этими модулями реализованы сетевые взаимодействия:
-
socket
— для работы с сокетами и получения IP-адресов; -
getnode
получает MAC-адрес машины; -
speedtest
замеряет характеристики интернет‑соединения; -
telebot
сделает всю рутину по работе с Telegram-ботом.
Служебные примочки, которые трудно отнести к категориям выше:
-
datetime
позволит определить время работы программы; -
pyautogui
быстро и без болиработает с GUI; -
PIL.
— для снятия скриншота.Image
После этого нам требуется узнать основные стабильные характеристики системы: IP- и MAC-адреса, имя пользователя и ОС:
name = getpass.getuser() # Имя пользователяip = socket.gethostbyname(socket.getfqdn()) # IP-адрес системыmac = get_mac() # MAC адресost = platform.uname() # Название операционной системы
Строки кода снабжены комментариями и в пояснениях не нуждаются.
Скорость интернет-соединения
from speedtest import Speedtest # Импорт модуля. Рассматривался вышеinet = Speedtest()download = float(str(inet.download())[0:2] + "." # Входящая скорость + str(round(inet.download(), 2))[1]) * 0.125uploads = float(str(inet.upload())[0:2] + "." # Исходящая скорость + str(round(inet.download(), 2))[1]) * 0.125
Скорость замеряется библиотекой сервиса Speedtest.net и, соответственно, выдает результат в мегабитах, а не мегабайтах. Чтобы это исправить, разделим численный результат на 8 или умножим на 0,125 — это одно и то же. Манипуляцию проделываем дважды — для входящей и исходящей скорости.
Важно понимать, что замер не претендует на сверхточность, потому что мы никак не можем легко проверить, какую часть канала потребляют другие программы или даже другие устройства в сети. Если ты подключился к рабочей станции удаленно, твое соединение тоже что‑то будет потреблять. В программе поправка на это не реализована из‑за ее слишком низкой точности и трудоемкости.
Часовой пояс и время
import psutilzone = psutil.boot_time() # Узнает время, заданное на компьютереtime = datetime.fromtimestamp(zone) # Переводит данные в читаемый вид
Если ты настраиваешь чей‑то сервер или слишком удаленный компьютер, время может отличаться. Ко всем прочим данным добавим и показания часов — информация лишней не бывает. Если ты не знал, неправильно выставленное время и/или часовой пояс может вызывать сбои при подключении к сайтам, использующим HTTPS, а этот кусочек кода позволит легко выявить такие проблемы.
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
GrafaU
03.02.2021 в 00:02
можно спросить, что значит собака перед объектом?
@bot
stdeem
03.02.2021 в 05:08
это декоратор
Costa
13.02.2021 в 19:22
было интересно. продолжение будет?