Хак ядра NT

       

Off-line patch


Кромсать ядро статическим способом очень просто. Открываем файл ntoskrnl.exe функций CreateFile, а затем действуем через ReadFile/WriteFile. Проблема синхронизации потоков отпадает сама собой, поскольку правка осуществляется еще до загрузки образа в память, однако, техника перехвата от этого ничуть не упрощается. Ведь чтобы записать jump поверх ядерной функции или подменить таблицу экспорта, необходимо явным образом указать адрес нашего обработчика (расположенного, как правило в драйвере), но на момент статической правки ядра местоположение драйвера в памяти еще неизвестно!!! Приходится шаманить. Например, можно поступить так: найти в ядре свободное место и внедрить туда крошечный перехватчик-диспетчер, определяющий был ли загружен "наш" драйвер? Если нет— управление возвращается оригинальным ядерным функциям, в противном случае — нашему драйверу. При перехвате нескольких функций, диспетчер должен смотреть откуда приходит вызова и какой процедуре драйвера их следует передавать. Вот почему вместо jmp'а программисты используют call. Диспетчер стягивает с вершины стека адрес возврата, смотрит откуда пришел вызов и все понимает.

При желании, код перехватчика можно полностью реализовать в ядре (если, конечно, это не очень сложный перехватчик) — свободного места там предостаточно или загрузить свой собственный драйвер, однако, делать это можно лишь тогда, когда исполнительная система уже функционирует, дисковые тома смонтированы, файловые системы опознаны и соответствующие им драйвера готовы к работе. Другими словами, принудительная загрузка "своих" драйверов из ядра возможна только на поздних стадиях инициализации операционной системы (а к этому времени, вирусы, встроившие себя в ядро, могли давным-давно захватить управление, обламывая загрузку антивируса по полной программе).

После любой модификации системных файлов необходимо пересчитать их контрольную сумму, иначе NT (в отличии от Windows 98) откажется их загружать (см. рис. 3), правда, в "безопасном режиме" по F8 они все-таки загружаются, но это все-таки не то.



Содержание раздела