38218

Робота з системними пастками Windows

Лабораторная работа

Информатика, кибернетика и программирование

Системна пастка (анг. Hook - пастка) – це певна функція, за допомогою якої можна перехоплювати усі повідомлення та події, що виникли в системі. За допомогою пасток можна отримувати повний контроль над тим, що відбувається в системі.

Украинкский

2014-11-30

42.5 KB

1 чел.

Лабораторна робота №3 

Тема: Робота з системними пастками Windows;

Теоретична частина.

 Системна пастка (анг. Hook - пастка) – це певна функція, за допомогою якої можн

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

Для того, щоб створити пастку потрібно використати функцію SetWindowsHookEx()

Її синтаксис наступний (синтаксис показаний у мові Delphi, проте для мови С++ він аналогічний):

Function SetWindowsHookEx(idHook:integer; lpfn:TFNHookProc;
              hmod:HINST; dwThreadID: DWORD
):HHOOK;

 Дана функція повертає ідентифікатор (хендл) пастки. Його бажано зберігати для подальшої роботи з пастками в глобальній змінній.

Перший параметр – це тип пастки. Їх кількість є досить великою і всі вони описані в системній документації WinAPI (система MSDN – довідникова інформація). В даній роботі ми будемо використовувати WH_GETMESSAGE. Це означатиме, що будуть перехоплюватись усі повідомлення.

Другий параметр – це вказівник на функцію, яка й буде пасткою і в якій й будуть оброблятись повідомлення. Синтаксис цієї функції повинен бути наступний

  

Function <Name>(code:integer; wParam:WPARAM; lParam:LPARAM):LRESULT;

 Типи WPARAM, LPARAM, LRESULTеквівалентні типу longInt, тобто це 4- байтні числа. Зміст параметрів даної функції залежить від типу пастки. В нашому випадку – якщо перший параметр приймає значення HC_ACTIONто це повідомлення можна обробляти, якщо ж значення менше нуля – то обробка цього повідомлення заборонена і пастка повинна передати обробку іншим пасткам (про це нижче). Параметр wparam для даного типу пастки завжди рівний нулю, а в параметрі lparam передається 4-байтний вказівник на структуру TMsg, яка описує повідомлення, що настало в системі. І все би нічого, але є одне але – для коректної роботи даної процедури потрібно виконати дві умови:

  •  вона повинна міститись в бібліотеці динамічного підключення;
  •  обов’язково у даній функції потрібно викликати функцію (вибачаюсь за тавтологію)

CallNextHookEx(SysHook, Code, wParam, lParam), де перший параметр-це ідентифікатор вашої пастки, а решта – вхідні параметри функції обробки. Дану функцію бажано викликати на початку функції, так як в противному випадку можливий збій системи.

Отже можна сказати, що зазвичай бібліотека динамічного підключення в якій є функція встановлення пастки має наступний шаблон:

library Project1;

uses

 SysUtils,  Classes,  windows,  messages;

var

SysHook: HHOOK;    //Оголошення змінної в якій буде зберігатись ідент. пастки

// Функція пастки

function  SysHookMsg(code:integer; wparam:WPARAM; lparam:LPARAM):LRESULT;stdcall;

var

Msg:TMsg;

begin

 CallNextHookEx(SysHook,code,wparam,lparam);

 Msg:=TMsg(Pointer(lparam)^); // Приведення типу вказівника, який записаний в
                                                            // lparam до типу T
Msg  

 if code=HC_ACTION  then

   begin

     if Msg.message=<Повідомлення> then // Перевіряємо яке надійшло повідомлення

       begin

         ……  // Обробка повідомлення

       end;

   end; // code=HC_ACTION

end;

// Експортна функція, за допомогою якої встановлюється і знімається пастка

function RunHook(fl:boolean):integer;

begin

 if fl then   // Якщо вхідний параметр TRUE то встановлюємо пастку

    begin

      SysHook:=SetWindowsHookEx(WH_GETMESSAGE,@SysHookMsg,HInstance,0);

    end else

    begin

      UnhookWindowsHookEx(SysHook);

      SysHook:=0;

    end;

end;

В структурі Msg зберігається повний опис повідомлення, яке перехопила пастка., тобто для того щоб звернутись до значення параметру wparam, повідомлення що обробляється, потрібно використати конструкцію Msg.wparam. (Не плутати із значеннями lparam та wparam, що є параметрами функції обробки пастки.)  Ви можете його відкорегувати (змінити значення lparam, wparam), або  відмінити. Але з цим потрібно бути дуже обережним, так як некоректна обробка повідомлення, а також не виклик функції   CallNextHookEx може призвести до збою в системі.

Також в тій же бібліотеці повинна бути описана функція встановлення та відміни пастки. В даному прикладі представлена функція, яка має один формальний параметр. Якщо він рівний TRUE, то встановлюється пастка. В противному випадку – вона деактивується. Це звертаю вашу увагу, що змінна в якій зберігається ідентифікатор пастки є глобальною змінною для всієї бібліотеки (змінна SysHook). Це теж одна з рекомендації по роботі з пастками.

 

Завдання:

Завдання на 4 бали:

       Розробити бібліотеку динамічного підключення, яка реалізує пастку, що перехоплює всі надтиски лівої клавіші миші та веде запис про кожну таку подію. Запис відбувається у файл, що вказується користувачем. Пастка повинна записувати час натиску лівої кнопки миші та координати курсора в момент натиску. При натиску на ліву кнопку миші в системі генерується повідомлення WM_LBUTTONDOWN. При цьому в параметрі lparam даного повідомлення записуються координати миші в момент генерації. Даний параметр є 32-бітним і в  молодшому слові записується координата Х миші, а в старшому координата Y. Результатом роботи програми є файл в якому записані всі події.

Завдання на 5  балів:

 Завдання аналогічне попередньому, але пастка також записує і натиски правої кнопки миші (повідомлення WM_RBUTTONDOWN). При чому при натиску на клавішу F7 з’являється вікно, в якому виводиться вміст файлу-запису. (Я думаю вам зрозуміло, що дана форма також повинна бути описана в бібліотеці динамічного підключення. При натиску кнопки на клавіатурі система генерує повідомлення WM_KEYDOWN, при цьому у параметрі wparam зберігається віртуальний код клавіші, що біла натиснена. Віртуальний код записується константою що має префікс VK_. Для клавіші F7 – VK_F7)

Завдання на 6  балів:

 Завдання аналогічне попередньому, але пастка реагує також і на подвійний натиск миші (при чому повинно розрізнятись одинарний та подвійний натиски).Також програма повинна записувати і назву вікна, якому пересилається повідомлення. Вікно із вмістом файла  викликається по  натиску комбінації CTRL-F7.  

Бажаємо успіху.

 


 

А также другие работы, которые могут Вас заинтересовать

64099. Проект авторского дизайна художественного изделия из дерева с элементами резьбы и мозаики: настенные часы часы 1.2 MB
  Актуальность данной работы заключается в использовании настенных часов как атрибут для определения текущего времени суток и измерения продолжительности временных интервалов в единицах меньших чем одни сутки так и в целях улучшить интерьер помещения в котором будут находится часы.
64100. Решение экзистенциальных проблем в практике психологического консультирования методом символдрамы 419 KB
  Как часто обыкновенный человек задумывается над смыслом своего бытия Как часто он берет на себя ответственность за то как он прожил свою жизнь что оставил потомкам что он сам получил от жизни Удел ли это философов или каждый рано или поздно приходит к этому вопросу Существует ли один универсальный смысл или их множество...
64101. Зарубежный фондовый рынок на примере организованного рынка Франции 3.66 MB
  Цель выпускной квалификационной работы: разработать на основе анализа актуальных для российских субъектов рынка ценных бумаг проблем функционирования фондовой биржи в условиях рыночной экономики Евросоюза на примере фондовой биржи...
64104. Особенности перевода сравнительных конструкций в авторском стиле (на материале романа Марка Леви «Где ты?») 259.5 KB
  Цель работы определяет постановку и решение следующих задач: уточнить определение сравнения как лингвистической категории обозначив соотношение данной категории с другими лингвистическими и экстралингвистическими категориями...
64106. Диагностика профессиональной пригодности персонала на предприятии гостеприимства 704.5 KB
  Предметом исследования служит организация процесса подбора и отбора кадров в системе управления персоналом в гостинице «Альфа» Основной целью исследования является особенности диагностики профессиональной пригодности персонала в предприятии гостеприимства.
64107. Чинники формування інформаційної безпеки Естонії 402 KB
  Забезпечення інформаційної безпеки досягається у процесі свідомої цілеспрямованої діяльності органів державного управління, по запобіганню можливого порушення їх нормального функціонування в результаті дії загроз та небезпек.