Работа вируса в Ring0 подробно описана в трудах Z0MBiE, с которыми можно ознакомится на его сайте - http://z0mbie.host.sk Всё ниженаписанное является лишь обобщением и не притендует на новизну! :) Итак, подведём итоги работы вируса в нулевом кольце под Win9x... Для перехода в ноль есть несколько методов, вот основные:
Нужно оговориться, что первые два метода являются самыми неэффективными, т.к. их можно обломать, например, если на компе стоит 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 |