Установка пасток в 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.

WH_CALLWNDPROCRET - Контролює повідомлення після їх відправки в віконну функцію.

WH_CBT - Викликається перед обробкою більшості повідомлень вікон, миші і клавіатури (створенням вікон, активація вікон, знищенням вікон, зміною розміру вікон, перед установкою фокуса і.т.п.)

WH_DEBUG - Викликається перед будь-який інший пасткою. Корисно для налагодження hook'ов.

WH_GETMESSAGE - Викликається, коли з черги додатка зчитується повідомлення.

WH_HARDWARE - Викликається, коли з черги додатка зчитується повідомлення встановленого на комп'ютері устаткування.

WH_JOURNALPLAYBACK - Викликається, коли з черги системи зчитується повідомлення. Застосовується для додавання в чергу системних подій.

WH_JOURNALRECORD - Викликається, коли з черги системи запитується якусь подію. Застосовується для реєстрації системних подій.

WH_KEYBOARD - Викликається, коли з черги додатка зчитується повідомлення WM_Keydown або WM_Keyup. Одна з найпоширеніших пасток -).

WH_MOUSE - Викликається, коли з черги додатка зчитується повідомлення миші.

WH_MSGFILTER - Викликається, коли повідомлення має бути оброблено діалоговим вікном додатка, меню або вікном програми.

WH_SHELL - Викликається, коли створюються і руйнуються вікна верхнього рівня або коли з додатком-оболонці потрібно стати активним.

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 бібліотеки:

- lib.dll -

uses
windows, messages;
var
H. THandle;

- lib.dll -

У самій програмі пастка буде встановлюватися викликом з dll процедури sethook, віддалятися - викликом процедури removehook. Приклад установки і видалення hook'а, а також исходник dll бібліотеки є в доданому архіві.

Покажи цю статтю друзям:

  • 23 хвилини тому

Шкідливий Necurs навчився робити знімки екрану і повідомляти своїм операторам про проблеми

У даркнета за $ 5000 продають малваре, яка змушує банкомати «випльовувати» гроші

Trusted Platform Module компанії Infineon Technologies уразливі, а їх RSA-ключі ненадійні

Які виробники вже усунули уразливості, пов'язані з WPA2 і атакою KRACK

Фахівці «Доктор Веб» вивчили бекдор, написаний на Python

Схожі статті