Ес­ли ты час­то име­ешь дело с раз­ными компь­юте­рами, тебе, конеч­но, нужен прос­той в исполь­зовании и быс­трый инс­тру­мент для сбо­ра информа­ции о сис­теме. Сегод­ня мы покажем, как сде­лать такую прог­рамму, отсы­лающую соб­ранные дан­ные в Telegram, а еще поп­ракти­куем­ся в прог­рамми­рова­нии на Python.

Что­бы прос­то пос­мотреть IP-адрес и дру­гие нас­трой­ки сети, тебе при­дет­ся обра­тить­ся к коман­дной стро­ке и выпол­нить коман­ду ipconfig /all. Ситу­ация одна из самых час­тых для эни­кей­щиков и уда­лен­ных шаманов, но она хотя бы быс­тро реша­ема. Но если при­дет­ся собирать более серь­езный набор информа­ции о машине, с которой сей­час будешь работать, — без авто­мати­зации не обой­тись. Этим мы сегод­ня и зай­мем­ся.

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

warning

Не­сан­кци­они­рован­ный дос­туп к компь­ютер­ной информа­ции — прес­тупле­ние. Ни автор, ни редак­ция жур­нала не несут ответс­твен­ности за твои дей­ствия.

 

Инструменты

Сна­чала давай раз­берем­ся, где будем писать код. Мож­но кодить в обыч­ном вин­довом «Блок­ноте», но мы вос­поль­зуем­ся спе­циаль­ной IDE для Python — PyCharm. Уста­нов­ка и нас­трой­ка прос­ты как два руб­ля: ска­чал уста­нов­щик, запус­тил — и кли­кай себе «Далее», пока есть такая кноп­ка.

Еще нам пот­ребу­ется Python. Я буду исполь­зовать вер­сию 3.9.0 — с ней точ­но все работа­ет.

 

Задачи

Да­вай сна­чала обри­суем, что мы вооб­ще пла­ниру­ем делать. Я пла­нирую собирать сле­дующую информа­цию:

  1. IP-адрес.
  2. MAC-адрес.
  3. Имя поль­зовате­ля.
  4. Тип опе­раци­онной сис­темы.
  5. Ско­рость работы сис­темы.
  6. Вре­мя.
  7. Скрин­шот.
  8. Ско­рость интернет‑соеди­нения.
  9. Мо­дель про­цес­сора.

И отправ­лять­ся это все будет пря­миком тебе в телегу через спе­циаль­ный бот.

Зачем?

На­вер­няка у тебя воз­ник воп­рос: зачем может понадо­бить­ся MAC-адрес или модель про­цес­сора? Эти парамет­ры меня­ются очень и очень ред­ко, так что прек­расно под­ходят для фин­гер­прин­тинга. Даже если поль­зователь купит более быс­трый интернет‑канал или поменя­ет часовой пояс, ты без осо­бого тру­да смо­жешь опре­делить, что уже имел дело с этим компь­юте­ром. Сто­ит пом­нить, что ров­но такие же методы исполь­зуют хит­рые рек­ламщи­ки для иден­тифика­ции поль­зовате­лей, да и раз­работ­чики три­аль­ных вер­сий прог­рамм тоже. Эта статья поможет чуть луч­ше понять, что мож­но узнать о тво­ем компь­юте­ре в пол­ностью авто­мати­чес­ком режиме, а как при­менить эту информа­цию — решать толь­ко тебе.

В этой статье мы не будем показы­вать, как сфор­мировать устой­чивый к нез­начитель­ным изме­нени­ям иден­тифика­тор, который поможет однознач­но опре­делить кон­крет­ный компь­ютер. Если тебе ста­нет инте­рес­но — пиши в ком­мента­риях, и, воз­можно, мы сде­лаем боль­шой гайд на эту тему!

 

Создаем основу программы

Для отправ­ки дан­ных я решил вос­поль­зовать­ся Telegram-ботом. Соз­дать его ты можешь через BotFather, а пос­ле сох­ранить token тво­его тво­рения. Пуб­ликовать его нель­зя — любой, кто получит этот токен, смо­жет зах­ватить кон­троль над тво­им ботом.

Для под­клю­чения к Bot API «телеги» нуж­ны все­го две строч­ки:

import telebot
bot = telebot.TeleBot("token from BotFather") # Подключение бота

Что­бы оце­нить быс­тро­дей­ствие, мож­но написать еще пару строк. Весь даль­нейший код рас­положим меж­ду ними. Опи­сан­ное выше под­клю­чение бота уже впи­сано сюда.

import telebot
from datetime import datetime
bot = telebot.TeleBot("token")
start = datetime.now() # Начало отсчета
# Сюда поместим нашу основу, поэтому оставляем место
ends = datetime.now() # Конец отсчета
workspeed = format(ends - start) # Вычисление времени

Те­перь перей­дем собс­твен­но к сбо­ру дан­ных.

 

Сбор данных

Я не буду дол­го ходить вок­руг да око­ло и сра­зу нач­ну раз­бирать сек­цию импорта.

import getpass
import os
import socket
from datetime import datetime
from uuid import getnode as get_mac
import pyautogui
from speedtest import Speedtest
import telebot
import psutil
import platform
from 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.125
uploads = float(str(inet.upload())[0:2] + "." # Исходящая скорость
+ str(round(inet.download(), 2))[1]) * 0.125

Ско­рость замеря­ется биб­лиоте­кой сер­виса Speedtest.net и, соот­ветс­твен­но, выда­ет резуль­тат в мегаби­тах, а не мегабай­тах. Что­бы это испра­вить, раз­делим чис­ленный резуль­тат на 8 или умно­жим на 0,125 — это одно и то же. Манипу­ляцию про­делы­ваем дваж­ды — для вхо­дящей и исхо­дящей ско­рос­ти.

Важ­но понимать, что замер не пре­тен­дует на свер­хточ­ность, потому что мы никак не можем лег­ко про­верить, какую часть канала пот­ребля­ют дру­гие прог­раммы или даже дру­гие устрой­ства в сети. Если ты под­клю­чил­ся к рабочей стан­ции уда­лен­но, твое соеди­нение тоже что‑то будет пот­реблять. В прог­рамме поп­равка на это не реали­зова­на из‑за ее слиш­ком низ­кой точ­ности и тру­доем­кости.

 

Часовой пояс и время

import psutil
zone = psutil.boot_time() # Узнает время, заданное на компьютере
time = datetime.fromtimestamp(zone) # Переводит данные в читаемый вид

Ес­ли ты нас­тра­иваешь чей‑то сер­вер или слиш­ком уда­лен­ный компь­ютер, вре­мя может отли­чать­ся. Ко всем про­чим дан­ным добавим и показа­ния часов — информа­ция лиш­ней не быва­ет. Если ты не знал, неп­равиль­но выс­тавлен­ное вре­мя и/или часовой пояс может вызывать сбои при под­клю­чении к сай­там, исполь­зующим HTTPS, а этот кусочек кода поз­волит лег­ко выявить такие проб­лемы.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

3 комментария

  1. Аватар

    GrafaU

    03.02.2021 в 00:02

    можно спросить, что значит собака перед объектом?
    @bot

  2. Аватар

    Costa

    13.02.2021 в 19:22

    было интересно. продолжение будет?

Оставить мнение