![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Установка ловушек в WindowsDelphi , Файловая система , DLL и PlugInsУстановка ловушек в Windows
Сегодня мы поговорим об установке hook'ов (ловушек) в Windows. Hook - это механизм перехвата сообщений, путем установки специальной функции на верх стека hook-функций системы. Без установки таких ловушек практически невозможно обойтись при написании различных средств удаленного администрирования, шпионов и других программ в той или иной степени осуществляющих контроль за пользователем, использующем ОС Windows. Hook'и бывают глобальные (на всю систему) и локальные (на какой-либо поток). Установить в систему hook можно при помощи функции SetWindowsHookEx(), со следующим заголовком:
HHOOK SetWindowsHookEx(int idHook, HOOKPROC lpfn, HINSTANCE hMod, DWORD dwThreadId); Если ты плохо воспринимаешь Си-шный код, на Delphi заголовок выглядит так:
SetWindowsHookEx(idHook: Integer; lpfn: TFNHookProc; hmod: HINST; dwThreadId: DWORD): HHOOK; Функция SetWindowsHookEx() в случае установки hook'a возвращает его дескриптор, в случае ошибки возвращает 0. Разберем подробней все входящие параметры этой функции: 1. idHook - константа, определяет типа устанавливаемого hook'а. Может принимать одно из ниже перечисленных значений:
WH_CALLWNDPROC - Следит за сообщениями до отправки в оконную функцию и вызывается, когда процедуре окна посылается сообщение. Ловушка срабатывает при каждом вызове функции SendMessage. 2. lpfn - указатель на саму hook функцию. Ее заголовок:
function HOOKFUNCTION(code: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT stdcall; Значения входящих параметров зависят от типа hook'a. Если ставится глобальный hook, эта функция должна обязательно находиться в dll. 3. hmod - принимает значение hInstance или дескриптор DLL (в глобальных ловушках). 4. dwThreadId - идентифицирует поток, в который вставляется ловушка. В глобальных hook'ах этот параметр должен быть равен 0. Для удаления установленной ловушки существует функция UnhookWindowsHookEx(). В качестве параметра нужно использовать указатель (дескриптор) на hook функцию (значение, которое возвращает функция SetWindowsHookEx()). Ну вот и все, с основами мы ознакомлены. Теперь напишем маленькую шуточную программу, ставящую hook на считывания сообщений мыши (WH_MOUSE). Сделаем так, чтобы при нажатии на правую кнопку мыши скрывалась кнопка "Пуск", при нажатии на левую - появлялась, среднею - изменялся заголовок активного окна. Сама hook функция будет находиться в dll. Кроме того, в dll будут находиться две процедуры - sethook() и removehook(), соответственно устанавливающие и удаляющие ловушку. Привожу код dll библиотеки:
В самой программе ловушка будет устанавливаться вызовом из dll процедуры sethook, удаляться - вызовом процедуры removehook. Пример установки и удаления hook'а и исходник dll библиотеки есть в прилагающемся исходнике. В данной статье были рассмотрены только основы установки ловушек. Есть немалое количество нюансов и возникающих проблем при установке нескольких hook'ов, установки hook'ов в разных ОС (особенно это касается глобальных ловушек). Для получения подробностей по этим вопросам рекомендую использовать Win32 API Reference или MSDN (если нет диска с MSDN - прогуляйтесь на http://msdn.microsoft.com, здесь правда не вся информация, но большая ее часть). Установка ловушек в Windows: механизм перехвата сообщений для написания средств удаленного администрирования, шпионов и программ контроля за пользователем. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: DLL и PlugIns ::
|
|||||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |