Категория > Новости > Волшебные хуки. Как перехватывать управление любой программой через WinAPI - «Новости»
Волшебные хуки. Как перехватывать управление любой программой через WinAPI - «Новости»26-01-2018, 14:00. Автор: Елизар |
Содержание статьи
Какие бывают хукиЛовушки (hook) могут быть режима пользователя (usermode) и режима ядра (kernelmode). Установка хуков режима?пользователя сводится к методу сплайсинга и методу правки таблиц IAT. Ограничения этих методов очевидны: перехватить можно только userspace API, а вот до функций с префиксом Zw*, Ki* и прочих «ядерных» из режима пользователя дотянуться нельзя. Установка хуков режима?ядра позволяет менять любую информацию, которой оперирует Windows на самом низком уровне. Для перехватов подобного типа необходимо модифицировать таблицы SSDT/IDT либо менять само тело функции (kernel patch). Надо сказать, что в Windows на архитектуре x64 ядро контролирует свою целостность при помощи механизма KPP (Kernel Patch Protection), который является?частью PatchGuard и просто так подобные манипуляции с системными таблицами сделать не позволит. Почему хуки работают?Когда Windows запускает приложение, создается его процесс и потоки, загрузчик ОС ищет зависимости динамических библиотек, которые нужны для работы программы. Поиск ведется сначала в папке, где?находится исполняемый файл, далее в нескольких системных папках. После того как нужные библиотеки найдены, определяются необходимые для работы функции, составляется таблица зависимостей функций и библиотек, где они находятся. Программа помнит все?эти данные и пользуется ими при вызове функций. Наша задача — загрузить в адресное пространство приложения нашу библиотеку и исправить таблицу зависимостей в программе таким образом, чтобы она думала, будто функции, которые ей?нужны, находятся именно в нашей библиотеке, а не в той, где они были раньше. Сплайсинг функций WinAPIПролог функций, трамплин и дизассемблер длин инструкцийФункции WinAPI начинаются с пролога — это стандартный код, отвечающий за балансировку стека?для корректного доступа к локальным переменным, которые использует функция. Обычно пролог выглядит таким образом:
INFO
Источник новости - google.com
Перейти обратно к новости |