Разделы презентаций


Розробка пасток в ОС Windows

Содержание

ПАСТКИ В ОС WINDOWS Операційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.uaПастка (hook) - це механізм, який дозволяє проводити моніторинг повідомлень системи і обробляти їх до того, як вони досягнуть цільової віконної процедури.

Слайды и текст этой презентации

Слайд 1ЛЕКЦІЯ 7
Розробка пасток в ОС Windows










Операційні системи
доц. Сінельнікова Т.Ф.

ЛЕКЦІЯ 7Розробка пасток в ОС WindowsОпераційні системидоц. Сінельнікова Т.Ф.

Слайд 2ПАСТКИ В ОС WINDOWS

Операційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.ua
Пастка

(hook) - це механізм, який дозволяє проводити моніторинг повідомлень системи

і обробляти їх до того, як вони досягнуть цільової віконної процедури. Пастка може отримувати до себе всі повідомлення, які виникають в системі, обробляти їх і передавати далі в ту програму, якою ці повідомлення адресовані.


ПАСТКИ В ОС WINDOWS Операційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.uaПастка (hook) - це механізм, який дозволяє проводити

Слайд 3ПАСТКИ В ОС WINDOWS

Операційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.ua
Пастки

можуть використовуватися додатками в наступних цілях:
Обробляти або змінювати всі

повідомлення, призначені для всіх діалогових вікон (dialog box), інформаційних вікон (message box), смуг прокрутки (scroll bar), або меню однієї програми (WH_MSGFILTER).
Обробляти або змінювати всі повідомлення, призначені для всіх діалогових вікон, інформаційних вікон, смуг прокрутки, або меню всієї системи (WH_SYSMSGFILTER).
Обробляти або змінювати всі повідомлення в системі (всі види повідомлень), одержувані функціями GetMessage або PeekMessage (WH_GETMESSAGE).
Обробляти або змінювати всі повідомлення (будь-якого типу), що посилаються викликом функції SendMessage (WH_CALLWNDPROC).
ПАСТКИ В ОС WINDOWS Операційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.uaПастки можуть використовуватися додатками в наступних цілях: Обробляти

Слайд 4ПАСТКИ В ОС WINDOWS

Операційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.ua
Записувати

або програвати подіїї клавіатури та миші (WH_JOURNALRECORD, WH_JOURNALPLAYBACK).
Обробляти, змінювати

або видаляти події клавіатури(WH_KEYBOARD).
Обробляти, змінювати або скасовувати події миші (WH_MOUSE).
Реагувати на певні дії системи, роблячи можливим розробку додатків комп'ютерного навчання - computer-based training (WH_CBT).
Запобігти виклику іншої функції-фільтра (WH_DEBUG).
ПАСТКИ В ОС WINDOWS Операційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.uaЗаписувати або програвати подіїї клавіатури та миші (WH_JOURNALRECORD,

Слайд 5ТИПИ ПАСТОК В ОС WINDOWS

Операційні системи. Кафедра Інформатики. E-mail:

informatika@kture.kharkov.ua

ТИПИ ПАСТОК В ОС WINDOWS Операційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.ua

Слайд 6ТИПИ ПАСТОК В ОС WINDOWS

Операційні системи. Кафедра Інформатики. E-mail:

informatika@kture.kharkov.ua

ТИПИ ПАСТОК В ОС WINDOWS Операційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.ua

Слайд 7ТИПИ ПАСТОК В ОС WINDOWS

Операційні системи. Кафедра Інформатики. E-mail:

informatika@kture.kharkov.ua

ТИПИ ПАСТОК В ОС WINDOWS Операційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.ua

Слайд 8ТИПИ ПАСТОК В ОС WINDOWS

Операційні системи. Кафедра Інформатики. E-mail:

informatika@kture.kharkov.ua

ТИПИ ПАСТОК В ОС WINDOWS Операційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.ua

Слайд 9ТИПИ ПАСТОК В ОС WINDOWS

Операційні системи. Кафедра Інформатики. E-mail:

informatika@kture.kharkov.ua

ТИПИ ПАСТОК В ОС WINDOWS Операційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.ua

Слайд 10ТИПИ ПАСТОК В ОС WINDOWS

Операційні системи. Кафедра Інформатики. E-mail:

informatika@kture.kharkov.ua

ТИПИ ПАСТОК В ОС WINDOWS Операційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.ua

Слайд 11ТИПИ ПАСТОК В ОС WINDOWS

Операційні системи. Кафедра Інформатики. E-mail:

informatika@kture.kharkov.ua

ТИПИ ПАСТОК В ОС WINDOWS Операційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.ua

Слайд 12ТИПИ ПАСТОК В ОС WINDOWS
Як видно з таблиці деякі пастки

можуть бути встановлені тільки з системною областю видимості, а деякі

можна встановлювати як для всієї системи, так і для одного потоку.

Операційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.ua

ТИПИ ПАСТОК В ОС WINDOWSЯк видно з таблиці деякі пастки можуть бути встановлені тільки з системною областю

Слайд 13ТИПИ ПАСТОК В ОС WINDOWS
Пастки типу WH_JOURNALRECORD і WH_JOURNALPLAYBACK істотно

відрізняються від пасток інших типів. Вони можуть встановлюватися лише як

системні. Пастки цих типів впливають на всі програми Windows, включаючи робочий стіл. Побічним ефектом від використання пасток даного типу є те, що всі системні вхідні черги проходять через один потік, який встановив таку пастку. У Windows існує спеціальна послідовність дій, за допомогою якої користувач може видалити таку пастку в разі зависання системи. Для цього використовуються комбінації клавіш CTRL + ESC, ALT + ESC, або CTRL + ALT + DEL.

Операційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.ua

ТИПИ ПАСТОК В ОС WINDOWSПастки типу WH_JOURNALRECORD і WH_JOURNALPLAYBACK істотно відрізняються від пасток інших типів. Вони можуть

Слайд 14РОЗРОБКА ПАСТОК В ОС WINDOWS
Операційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.ua
Перейдемо

до розгляду завдань пов'язаних безпосередньо з розробкою пасток. Для обробки

повідомлень пишеться спеціальна функція (Hook Procedure). Якщо необхідно відстежувати повідомлення всіх потоків, а не тільки поточного, то пастка повинна бути глобальною. В цьому випадку функція пастки повинна знаходитися в динамічній бібліотеці DLL.

Завдання розробки програми з пасткою розбивається на наступні частини.
Написання DLL c функціями пастки.
Написання програми, яке встановить пастку.
Написання функції зняття пастки.

Розглянемо всі ці етапи на прикладі.
РОЗРОБКА ПАСТОК В ОС WINDOWSОпераційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.uaПерейдемо до розгляду завдань пов'язаних безпосередньо з розробкою

Слайд 15БІБЛІОТЕКА, ЯКА МІСТИТЬ ФУНКЦІЇ ПАСТОК МИШІ І КЛАВІАТУРИ
Операційні системи. Кафедра

Інформатики. E-mail: informatika@kture.kharkov.ua
// Описуємо сегмент Shared і змінні в цьому

сегменті
#pragma data_seg(".shared")
extern "C" __declspec(dllexport) HHOOK g_KeyBoardHook = NULL;
extern "C" __declspec(dllexport) HHOOK g_MouseHook = NULL;
#pragma data_seg()
extern "C" __declspec(dllexport) LRESULT __stdcall KeyboardHook(
int nCode, WPARAM wParam, LPARAM lParam)
{ // Функція пастки клавіатури
BOOL bControl = (BOOL) (::GetAsyncKeyState(VK_CONTROL) & 0x8000);
if((wParam == 0x44) && bControl && !(lParam & 0x80000000))
{
MessageBox(NULL,"Были нажаты клавиши Ctrl+D", NULL, MB_OK);
}
if((wParam == 0x55) && bControl && (lParam & 0x80000000))
{
MessageBox(NULL,"Были нажаты клавиши Ctrl+U. Ловушки выгружены !", NULL, MB_OK);
// Завершуємо роботу пасток клавіатури і миші
UnhookWindowsHookEx(g_KeyBoardHook);
UnhookWindowsHookEx(g_MouseHook);
}
if((wParam == 0x4D) && bControl && (lParam & 0x80000000))
{
MessageBox(NULL,"Ctrl+M - Ловушка мыши отключена !", NULL, MB_OK);
UnhookWindowsHookEx(g_MouseHook); // Завершуємо роботу пастки миші
}
return CallNextHookEx(g_KeyBoardHook, nCode, wParam, lParam);
}



БІБЛІОТЕКА, ЯКА МІСТИТЬ ФУНКЦІЇ ПАСТОК МИШІ І КЛАВІАТУРИОпераційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.ua// Описуємо сегмент Shared і

Слайд 16БІБЛІОТЕКА, ЯКА МІСТИТЬ ФУНКЦІЇ ПАСТОК МИШІ І КЛАВІАТУРИ(ПРОДОВЖЕННЯ)
Операційні системи. Кафедра

Інформатики. E-mail: informatika@kture.kharkov.ua
extern "C" _declspec(dllexport) LRESULT __stdcall MouseHook(int nCode,

WPARAM wParam, LPARAM lParam)
{ // Функція пастки миші
if(wParam==WM_MOUSEMOVE || wParam==WM_NCMOUSEMOVE)
{
MOUSEHOOKSTRUCT* psMouseHook;
psMouseHook = reinterpret_cast(lParam);
if(psMouseHook->pt.x==0 && psMouseHook->pt.y==0)
MessageBox(0,"Мышь в верхнем углу", "Внимание!", MB_ICONINFORMATION);
return CallNextHookEx(g_MouseHook, nCode,wParam, lParam);
}
}



Слайд 17БІБЛІОТЕКА, ЯКА МІСТИТЬ ФУНКЦІЇ ПАСТОК МИШІ І КЛАВІАТУРИ(ПРОДОВЖЕННЯ)
Операційні системи. Кафедра

Інформатики. E-mail: informatika@kture.kharkov.ua

Для запобігання проблем пов'язаних з перетворенням імен функцій

при їх експорті з бібліотеки на Visual С + + рекомендується в проект бібліотеки включати файл *. Def, в якому вказувати імена функцій, які повинні бути при експорті з бібліотеки. Приклад такого def файлу наведений нижче стосовно бібліотеки розглянутої у прикладі.


; LcsProvider.def : Declares the module parameters for the DLL.
LIBRARY "hookdll"
EXPORTS
; Explicit exports can go here
KeyboardHook = KeyboardHook
MouseHook = MouseHook

БІБЛІОТЕКА, ЯКА МІСТИТЬ ФУНКЦІЇ ПАСТОК МИШІ І КЛАВІАТУРИ(ПРОДОВЖЕННЯ)Операційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.uaДля запобігання проблем пов'язаних з

Слайд 18ДОДАТОК, ЯКИЙ ВСТАНОВЛЮЄ І ЗНІМАЄ ПАСТКИ
Операційні системи. Кафедра Інформатики. E-mail:

informatika@kture.kharkov.ua
При розробці додатків з пастками програма повинна вміти встановлювати, а

потім знімати пастки. Встановлення пастки здійснюється за допомогою функції SetWindowsHookEx, а для зняття пастки використовується функція UnhookWindowsHookEx.
//Опис змінних
HINSTANCE hLibrary; // Дескриптор бібліотеки
HOOKPROC pKeybHook; // Покажчик на процедуру обробки пастки клавіатури
HOOKPROC pMousHook; // Покажчик на процедуру обробки пастки миші
// Покажчики на змінні сегмента Shared для передачі покажчиків на функції пастки
// клавіатури і миші
HHOOK *pKeyBoardHook;
HHOOK *pMouseHook;

MSG msg;
HWND hWnd=0;
HACCEL hAccelTable;
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_HOOKDEMO, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_HOOKDEMO);
//Загрузка библиотеки и получение ее дескриптора
hLibrary=LoadLibrary("Hookdll.dll");
if(!hLibrary){
MessageBox(hWnd,"Невозможно загрузить библиотеку !", NULL, MB_OK|MB_ICONSTOP);
return 0;
}

ДОДАТОК, ЯКИЙ ВСТАНОВЛЮЄ І ЗНІМАЄ ПАСТКИОпераційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.uaПри розробці додатків з пастками програма повинна

Слайд 19ДОДАТОК, ЯКИЙ ВСТАНОВЛЮЄ І ЗНІМАЄ ПАСТКИ
Операційні системи. Кафедра Інформатики. E-mail:

informatika@kture.kharkov.ua
if(hLibrary)
{ pKeybHook=(HOOKPROC)GetProcAddress(hLibrary,"KeyboardHook");
pMousHook=(HOOKPROC)GetProcAddress(hLibrary,"MouseHook");
// Получаем указатели на переменные в сегменте Shared
pKeyBoardHook

=(HHOOK*)GetProcAddress(hLibrary,"g_KeyBoardHook");
pMouseHook =(HHOOK*)GetProcAddress(hLibrary,"g_MouseHook");
*pKeyBoardHook=SetWindowsHookEx(WH_KEYBOARD,pKeybHook,hLibrary,0);
if (!pKeyBoardHook)
if (!*pKeyBoardHook)
{
MessageBox(hWnd,"Невозможно загрузить функцию ловушки клавиатуры!", NULL, MB_OK);
PostQuitMessage (0);
return 0;
}
*pMouseHook=SetWindowsHookEx(WH_MOUSE,pMousHook,hLibrary,0);
if (!pMouseHook )
if (!*pMouseHook)
{
MessageBox(hWnd,"Невозможно загрузить функцию ловушки мыши!","",MB_OK);
PostQuitMessage (0);
return 0;
} }
MessageBox(hWnd,"Ловушки загружены. (Ctrl+D)-Вызвать ловушку клавиатуры, (Ctrl+U)-Выгрузить все ловушки, (Ctrl+M)-Выгрузить ловушку мыши", "Message", MB_OK);
while (GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg); //дозволити використання клавіатури
DispatchMessage(&msg); //повернути керування Windows
}
// Завершаем работу ловушек перед выходом из приложения
UnhookWindowsHookEx(*pKeyBoardHook);
UnhookWindowsHookEx(*pMouseHook);
FreeLibrary(hLibrary); // вивантажуємо бібліотеку
return (int) msg.wParam;

ДОДАТОК, ЯКИЙ ВСТАНОВЛЮЄ І ЗНІМАЄ ПАСТКИОпераційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.uaif(hLibrary)	{  	pKeybHook=(HOOKPROC)GetProcAddress(hLibrary,

Слайд 20УСТАНОВКА ІКОНИ ПРОГРАМИ В СИСТЕМНУ ОБЛАСТЬ
Операційні системи. Кафедра Інформатики. E-mail:

informatika@kture.kharkov.ua
BOOL CTrayIconAPIDlg::AddTrayIcon()
{
m_uRegisteredMessage=::RegisterWindowMessage(_T("TrayIcon_regMsg"));
if(m_hTrayIcon)
::DestroyIcon(m_hTrayIcon);

if(!(m_hTrayIcon=::LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_SMALL_ICON))))
return FALSE;
this->GetWindowText(m_strTrayTipText);
m_uID=1111;
NOTIFYICONDATA nid={0};
nid.cbSize=sizeof(NOTIFYICONDATA);
nid.hWnd=m_hWnd;
nid.uID=m_uID;
nid.uFlags=NIF_MESSAGE | (m_hTrayIcon ? NIF_ICON : 0);
nid.uCallbackMessage=m_uRegisteredMessage;
nid.hIcon=m_hTrayIcon;
lstrcpyn(nid.szTip, m_strTrayTipText.GetBuffer(), 64);
nid.uFlags |= NIF_TIP;
return (m_bAdded=::Shell_NotifyIcon(NIM_ADD, &nid));
}

BOOL CTrayIconAPIDlg::DeleteTrayIcon()
{
if(m_bAdded)
{ NOTIFYICONDATA nid={0};
nid.cbSize=sizeof(NOTIFYICONDATA);
nid.hWnd=m_hWnd;
nid.uID=m_uID;
return !(m_bAdded=!::Shell_NotifyIcon(NIM_DELETE, &nid));
}
return TRUE;
}


Слайд 21УСТАНОВКА ІКОНИ ПРОГРАМИ В СИСТЕМНУ ОБЛАСТЬ
Операційні системи. Кафедра Інформатики. E-mail:

informatika@kture.kharkov.ua
BOOL CTrayIconAPIDlg::OnInitDialog()
{
CDialog::OnInitDialog();
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu =

GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE);
AddTrayIcon();// Встановлюємо ікону в системну область
return TRUE;
}
УСТАНОВКА ІКОНИ ПРОГРАМИ В СИСТЕМНУ ОБЛАСТЬОпераційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.uaBOOL CTrayIconAPIDlg::OnInitDialog(){	CDialog::OnInitDialog();	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);	ASSERT(IDM_ABOUTBOX <

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика