![]() |
![]() |
![]() |
Реализация защиты на уровне «родного» API для ОС Windows NT Один из способов обеспечения прозрачной защиты связан с заменой механизма предоставления функций «родного» API. Как уже рассматривалось в главе «Общая архитектура Windows NT», системные сервисы могут быть предоставлены коду пользовательского режима посредством использования библиотеки ntdll.dll. В ntdll.dll вызов системных сервисов происходит с помощью программного прерывания int 2E. После чего обработчик прерывания для вызова соответствующего системного сервиса использует таблицу распределения системных сервисов (KeServiceDescriptorTable), экспортируемую ntoskrnl.exe (ядро и исполнительная система). Структура этой таблицы следующая:
Зная индексный номер функции, реализующей системный
сервис, можно по таблице определить адрес ее начала и заменить его на
адрес начала собственного обработчика режима ядра. После исполнения собственного
обработчика необходимо передать управление по старому адресу, чтобы дать
возможность стандартному обработчику выполнить запрошенные действия. |
![]() |
![]() |
![]() |