|
Вероятно, большинство вопросов связано прежде всего с самим термином "полиморфный вирус". Нам кажется, что суть дела становится яснее, если рассмотреть один из типов полиморфных вирусов, которые известный специалист по компьютерным вирусам д.т.н. Н. Н. Безруков называет вирусами с самомодифицирующимися расшифровщиками. Но начнем с самого начала. "Я помню чудное мгновенье... ". Узнали? Разумеется, узнали. Слишком характерная строчка, со школьных лет мы безошибочно узнаем известное стихотворение великого поэта. Если взглянуть на вопрос с точки зрения вирусолога, то приведенная строчка является так называемой сигнатурой – характерной, в идеале – уникальной, последовательностью символов, характеризующей стихотворение. Открыв томик стихов и увидев эту строчку, мы совершенно точно знаем, на какое стихотворение мы попали. Анализ вирусов также заключается в выделении в них сигнатур и последующем их поиске в потенциальных объектах вирусной атаки. Таким образом, еще несколько лет назад достаточно было поймать вирус, изучить его код, (для профессионалов это, как правило, было делом нескольких минут) и выделить сигнатуру. Но вирусные технологии не стояли на месте. Вирусы, шифрующие свой код, известны довольно давно. Цель такого шифрования тоже достаточно очевидна: имея зараженный и оригинальный файлы, а, следовательно, и возможность выделить вирус "в чистом виде", вы все равно не сможете проанализировать его код с помощью обычного дизассемблирования. Этот код зашифрован и представляет собой бессмысленный набор команд. Расшифровка производится самим вирусом уже непосредственно во время выполнения. При этом возможны самые различные варианты: вирус может расшифровать себя всего сразу, а может выполнять такую расшифровку "по ходу дела", может вновь шифровать уже отработавшие участки (причем иногда не тем способом, каким они были зашифрованы раньше) — в общем, имеется очень много различных вариантов. Все это делается только ради того, чтобы затруднить анализ кода вируса (кстати, это не единственное, что предпринимается ради этой цели: хитро зашифрованный вирус, эффективно противодействующий трассировке, может заставить серьезно поработать разработчиков антивирусных средств). Но до 1992 года вирусописатели старались на самом деле зря. Совершенно ясно, что квалификация профессионалов в сфере антивирусной безопасности никак не меньше их собственной и, следовательно, все их многомесячные усилия стоили в крайнем случае лишних часов работы специалистов. Ведь все зашифрованные вирусы обязательно содержали некий незашифрованный фрагмент — расшифровщик (или его часть). По нему можно было построить сигнатуру данного вируса и дальше уже бороться с ним обычными способами. Ситуация изменилась, когда были придуманы алгоритмы, позволяющие не только шифровать код вируса, но и менять расшифровщики. Сама постановка такой задачи вопросов не вызывает: достаточно очевидно, что можно построить различные расшифровщики. Суть в том, что этот процесс автоматизирован — каждая новая копия вируса содержит новый расшифровщик, который может в каждом бите отличаться от расшифровщика породившей ее копии. Даже из простых комбинаторных соображений ясно, что расшифровщиков, длина которых обычно ограниченна, не может быть бесконечно много. Но если их всего лишь триллиона так два-три, то ясно, что задача перебора всех возможных не стоит... Вирусы, использующие описанную технологию, и получили название полиморфных.
===============================================================
Параллельная программа содержит несколько процессов, работающих совместно над выполнением некоторой задачи. Процессы являются параллельными, если они выполняются одновременно. Параллельные процессы могут работать совершенно независимо друг от друга, а могут периодически синхронизироваться и взаимодействовать.
Параллельная обработка данных имеет две разновидности:
Параллельными называются процессы, которые одновременно находятся в каком-либо активном состоянии.
Два параллельных процесса могут быть независимыми.
Независимыми называются процессы множество переменных, которых не пересекаются. Под переменными подразумеваются формы данных, а также области операционной памяти, сопоставленные определенной программе и промежуточным переменным.
Независимые процессы не влияют на работу друг друга (с точки зрения логики исполнения), они могут только задерживать работу друг друга.
Взаимодействующие – это те процессы, которые совместно используют некоторые переменные и выполнение одного может влиять на выполнение другого.
Критическими ресурсами называются ресурсы, которые не могут быть использованы несколькими процессами. Поэтому когда несколько процессов требуют этот ресурс, нужна их синхронизация.
В результате чего этот ресурс будет находиться в распоряжении только одного процесса на интервале времени. Другие процессы должны ждать.
Взаимодействовать могут 2 разновидности процессов: конкурирующие и совместно исполняющие некоторую работу. Конкурирующие действуют в некотором плане независимо, но имеют доступ к некоторым переменным.
Процессы, выполняющие некоторую работу характеризуются тем, что результаты передаются другому процессу (т. е обмениваются данными).
отдельный процесс никогда не сможет быть выполнен быстрее, чем бы он был выполнен при однопрограммном режиме.
===================================================================
Поскольку, мы не можем сохранить в оперативной памяти содержимое всей виртуальной памяти и рано или поздно ОП заполняется, настанет время, когда для помещения новой порции данных, придется освобождать место.
Поиск таких наименее нужных данных и называется стратегия замещения. Можно принимать решение, основываясь на количестве обращений к каждой порции данных (частотный анализ), можно — на времени последнего обращения, выбрав ту, к которой дольше всего не обращались (алгоритм LRU — Least Recently Used), можно — на времени загрузки из виртуальной памяти, вытеснив ту, которая была загружена раньше всех (алгоритм FIFO — First Input First Output), а можно просто использовать randomize-алторитм — на кого судьба ляжет, — ту и вытеснять.
Политика замещения определяет какую страницу можно убрать из памяти при вызове новой страницы. Выбирать такую страницу наугад нельзя. Если, например, убрать из памяти страницу с командой, которая вызвала ошибку, то при повторном выполнении команды или при выполнении следующей команды произойдет еще одна ошибка из-за отсутствия страницы. Необходимо удалять из памяти те страницы, которые не будут нужны долгое время. Однако будущее использование страниц предсказать невозможно, поэтому используют алгоритмы основываясь на истории обращиний к страницам. Эти алгоритмы очень похожи на метода замещения кэш-строк.
LRU (Least Recently Used). Замещается та страница, к которой дольше всего не было обращения.
FIFO (First In First Out). Здесь заменяется страница, дольше всего находившаяся в памяти.
Правила замены могут быть глобальными или локальными. При глобальной замене выгружается самая старая страница всех процессов, а при локальной - только текущего, при работе которого произошла страничная ошибка.
За счет виртуального механизма решаются следующие вопросы:
1) Выполнение программы, объем которой превышает объем физической памяти.
2) Независимость работоспособности программы от места ее расположения в физической памяти и от конфигурации этой памяти.
3) Динамическое распределение памяти.
4) Независимость (легкая сопрягаемость) разрядности компонентов логических адресов в программе (указателей), разрядности линейного адреса, разрядности физического адреса и реального объема памяти, установленной в системе.
Дата добавления: 2015-07-19; просмотров: 98 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Принудительное разграничение доступа | | | Выталкивание дольше всего не использовавшейся страницы. LRU (The Least Recently Used) Algorithm . |