le, dwMilliseconds);
3.5 Опис блоків програмного програми
Клієнтський додаток.
Цей додаток виконує наступні дії:
. Запускає і зупиняє процес установки системних пасток
. Виділення Віртуальної області пам'яті
. Створення м'ютексів.
. Виведення інформації в БД з Віртуальної пам'яті
Запуск і зупинка процесу установки системних пасток реалізований у вигляді виклику процедур зберігаються в DLL:
· SetHookKey - HookDllKey.dll
· SetHookProc - HookDllProc.dll
· SetHookMouse - HookDllMouse.dll
Для запуску процесу моніторингу всередині вищеописаних процедур використовується вбудована WinAPI функція SetWindowsHookEx, вона має наступний формат:
HHOOK SetWindowsHookEx (idHook, lpfn, hMod, dwThreadId);
Функція SetWindowsHookEx приймає параметр HINSTANCE, який є покажчиком на DLL, і HOOKPROC - покажчик на фільтр-функцію. необхідний, щоб дізнатися яку DLL потрібно завантажувати в кожен процес. WinAPI функція впроваджує зазначену DLL в адресний простір процесу, а потім викликає фильт-функцію, описану в цій DLL. Необхідність розташування фільтр-функції в DLL пояснюється тим, що DLL з фільтр-функцією проектується системою в адресний простір всіх GUI процесів, що неможливо зробити c допомогою exe додатки.
Параметр idHook визначає тип установлюваної фільтр-функції. Залежно від типу перехоплюваних повідомлень воно приймає одне з наступних значень: WH_CBT, WH_MOUSE, WH_KEYBOARD.
Для зупинки процесу моніторингу використовується вбудована WinAPI функція UnhookWindowsHookEx, вона має наступний формат:
BOOL UnhookWindowsHookEx (
HHOOK hhk);
Так як моніторинг здійснює запис активності користувача не перериваючи системні дії, то всередині фільтр-функцій за допомогою WinAPI функції CallNextHookEx організована передача інформації наступною системної пастці. Функція має наступний формат:
LRESULT CallNextHookEx (
HHOOK hhk,
int nCode,
WPARAM wParam, lParam);
Процес створення об'єкта файлового відображення і створення мьютекса виконаний перед викликом процедур з DLL, за допомогою відповідних функцій, описаних у главах 3.3 та 3.4.
Також в клієнтському додатку описана процедура DumpBufferMapping, яка виконує функцію виведення інформації з буфера в БД, яка представлена ??текстовим файлом. Усередині процедури використані WinAPI функції:
· CreateFile - Створення або відкриття для запису файлу.
· SetFilePointer - Переміщення покажчика позиції всередині файлу.
· WriteFile - Запис у файл.
· ZeroMemory - Обнулення обраного буфера.
Підключення до об'єкта об'єкту файлового відображення всередині всіх DLL організовано в момент проектування копії DLL на адресний простір всіх процесів. Для цього використана функція DLLEntryPoint - функція точки входу, яка отримує як параметр наступні значення:
· DLL_PROCESS_ATTACH - Програма підключається до DLL
· DLL_THREAD_ATTACH - Потік програми підключається до DLL
· DLL_THREAD_DETACH - Потік залишає DLL
· DLL_PROCESS_DETACH - Exe від'єднується від DLL
буффер пам'яті має обмежений обсяг, внаслідок цього всередині DLL організований висновок інформації з буфера в БД, за допомогою процедури DumpBufferMapping.
HookDllKey.dll .
У даній DLL описана фільтр-функція KeyHook. Щоразу при появі в системному потоці процесу, в адресний простір якого була поміщена копія відповідної DLL, повідомлення від клавіатури, WM_KEYUP або WM_KEYDOWN, викликається функція KeyHook яка займається обробкою повідомлення і отримання з нього необхідної інформації.
Усередині даної функції використовуються WinAPI функції GetKeyboardState, ToAscii, GetKeyNameText.- служить для опитування стану клавіш, а також повертає масив з 255 байт, в якому кожен байт містить стан певної клавіші на клавіатуре.- транслює заданий код віртуальної клавіші і стан клавіатури у відповідний символ або символи. Функція транслює код, використовуючи мову введення даних і фізичну розкладку клавіатури, ідентифіковану дескриптором розкладки клавіатури.- витягує рядок, яка представляє назву клавіші, по скан-коду переданому як пар...