`Работа вируса в Ring0 подробно описана в трудах Z0MBiE, с которыми можно ознакомится на его сайте - http://z0mbie.host.sk Всё ниженаписанное является лишь обобщением и не притендует на новизну! :) Итак, подведём итоги работы вируса в нулевом кольце под Win9x... Для перехода в ноль есть несколько методов, вот основные: Через IDT (Interrupt Descriptor Table, таблица дескрипторов прерываний) Через GDT (Global Descriptor Table, таблица глобальных дескрипторов) Через LDT (Local Descriptor Table, таблица локальных дескрипторов) Через модификацию контекста с использованием Win API Через SEH (Точнее модификация контекста с использованием SEHа) Нужно оговориться, что первые два метода являются самыми неэффективными, т.к. их можно обломать, например, если на компе стоит Dr.Web'овский спайдер, то попасть в ноль через IDT и GDT не получиться. Самым эффективным, на наш взгляд, является 3-ий метод (через LDT). К данной статье прилагается примеры на все способы перехода в ноль. Работают они одинаково - после запуска блокируют полностью систему пока не нажмут клавишу ESC. Мы попали ногой(и даже всем телом) в ноль. А что дальше? Теперь мы имеем доступ к системе в полном объёме, т.е. к памяти, диску, портам и т.д... надо обустраиваться! :) Как известно, в нуле нельзя просто вызывать обычные апишные функции, зато можно делать VXDCallы. Что такое VXDCall? Это нижеуказанная последовательность кода:
     int    20h
     dw     Service
     dw     VxD
где Service-это функция (например InstallFileSystemApiHook, Ring0_FileIO), а VxD-это драйвер (например IFSMGR, VMM) Нужно заметить, что после вызова прерывания, обработчик заменит этот код на Call adress, поэтому следует ПРЕДварительно скопировать код в к-нить буфер, для сохранения его первозданности. С помощью этих колов можно делать всё то, что нам нужно - работать с файлами, памятью и всеми устройствами. Например, если нам надо выделить немного памяти, мы сделаем следущее...
     xor    EAX, EAX
     push   PAGEFIXED + PAGEZEROINIT; Атрибуты
     push   EAX
     push   EAX
     push   EAX
     push   EAX
     push   EAX
     push   PG_SYS	; Распределить системную память
     push   nPages	; Количество 4к-байтных страниц
     int    20h
     dw     PageAllocate
     dw     VMM
     add    ESP, 32	; Очистим стек
И ещё один момент. Параметры передаются через стек, но стек за собой эти функции не освобождают.... К статье прилагается .inc файл со всеми необходимыми константами и функциями. Теперь мы можем написать обычный вирус, который рыщет по дискам в поисках жертв. Но зачем тогда нам ноль?:) Наша цель - Резидентность! Самый просиой способ - это перехватить обработчик файловой системы (IFS), точнее написать свой и заменить им стандартный. Что нам это даст? Таким образом, каждый раз, когда идёт обращение к файловой системе, ядро вызывает нас, а уже мы вызовем, что требуется...
     push   offset OurIFS
     int    20h
     dw     InstallFileSystemApiHook
     dw     IFSMGR
     add    ESP, 4
К статье прилагается соответствующий пример. ...Наверно этого будет достаточно :) Все вопросы в форум http://sbvc.net/forum/ 10.07.02`