Монитор, работающий по такому принципу, будет обеспечивать 100% защиту от вирусов, т.к. никакая операция работы с файлом не пройдет мимо ядра операционной системы, а, следовательно, и мимо антивирусного монитора.
В данной работе будет рассмотрен алгоритм создания антивирусного монитора для операционных систем Windows 95 OSR 2, 98, ME. Для ОС Windows NT, 2000 или XP такой вариант не подходит, т.к. эти ОС обладают более высокой степенью защиты ядра ОС от драйверов, написанных «третьими» лицами (в частности, для Windows XP необходима сертификация всех используемых в ней драйверов).
Windows использует защищенный режим (P-Mode) работы центрального процессора x86 с включенной сегментацией и страничным преобразованием. За счет использования этих механизмов, вся память компьютера для каждого из процессов (приложений) операционной системы является плоской (flat), т.е., в отличие от программирования под ОС MS-DOS, при программировании под ОС Windows любое приложение использует только один сегмент данных, который адресует все доступное процессу адресное пространство (на самом деле существуют еще два сегмента – сегмент кода (для выполнения) и сегмент стека (для организации стека), но физически они отражают одно и тоже адресное пространство).
Это позволяет не задумываться о данных в сегментных регистрах при обращении к памяти и не изменять эти значения в процессе работы программы, что значительно облегчает программирование и отладку приложений.
Механизмы сегментации и страничного преобразования настроены так, что верхний гигабайт адресного пространства процессора является общим для всех приложений системы. Там ОС размещает важнейшую системную информацию, такую как таблицы дескрипторов памяти и прерываний, таблицы страниц и драйвера устройств. Остальные 3 гигабайта адресного пространства отведены для процесса и являются уникальными для каждого из них.
Даже если компьютер физически не имеет 4 гигабайт оперативной памяти (а такой объем памяти и не поддерживается Windows 95 OSR2, 98 или МЕ, далее просто – ОС), за счет механизма страничного преобразования память распределяется именно таким образом.
Ядром ОС Windows является VMM (а не kernel32.dll, как многие думают). VMM – это Virtual Machine Manager, т.е. менеджер виртуальных машин, а kernel32.dll лишь предоставляет функции ядра на уровне API (Application Programming Interface). Виртуальная машина как бы представляет собой отдельный независимый компьютер, обладающий своей памятью (т.е. своим адресным пространством памяти) и своим временем выполнения. VMM обеспечивает разделение ресурсов процессора и памяти между виртуальными машинами. Также каждая виртуальная машина обладает своим пространством портов и таблицей прерываний. В контексте виртуальных машин выполняются все приложения операционной системы (как 16-ти, так и 32-х разрядные).
ОС создает одну виртуальную машину для всех Windows-приложений (включаю и 16-ти разрядные) и по одной виртуальной машине на каждую DOS задачу, при этом первая созданная ВМ (т.е. для Windows-приложений) называется системной виртуальной машиной. Отсюда и следует ненадежность операционной системы – стоит только одному приложению повредить какие-либо важные данные системной виртуальной машины (т.е. той, в которой работают все Windows-приложения), как вся система приходит к нестабильному состоянию.
С другой стороны, выполнение всех Windows-задач в контексте одной ВМ позволяет существенно снизить требования к памяти, т.к. все процессы внутри одной ВМ разделяют общие экземпляры библиотек и некоторые другие данные. Отсюда и произрастает различие между Windows 95 OSR2, 98, ME и Windows NT, 2000 и XP, в которых каждому процессу создается собственная ВМ, что и приводит к значительно большим расходам памяти.
Далее, ресурсы системной виртуальной машины разделяются между ее процессами (Process) и потоками команд (Thread).
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.