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.  

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

 


 

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

64771. ВИБІР ОПТИМАЛЬНИХ КОМПОНОВОК ВЕРСТАТНИХ ПРИСТРОЇВ ДЛЯ ВЕРСТАТІВ З ЧПК 328 KB
  Для досягнення поставленої мети сформульовано такі задачі: теоретичне обґрунтування та розроблення математичної моделі вибору оптимальної компоновки ВП для універсальних та багатоцільових верстатів з ЧПК; розроблення системи конструкцій функціональних елементів...
64772. ТЕХНОЛОГІЧНІ ЗАХОДИ ВИРОЩУВАННЯ БАТЬКІВСЬКИХ ФОРМ ГІБРИДІВ КУКУРУДЗИ РІЗНИХ ГРУП СТИГЛОСТІ В ПІВНІЧНОМУ СТЕПУ 260.5 KB
  Щорічно в Державний Реєстр сортів рослин України вносяться нові високопродуктивні, різні за скоростиглістю гібриди кукурудзи. Для широкого їх впровадження необхідно налагодити виробництво насіння вихідних батьківських форм...
64773. ФОРМУВАННЯ ВРОЖАЙНОСТІ ТА ЯКОСТІ ЗЕРНА ПШЕНИЦІ ОЗИМОЇ ЗАЛЕЖНО ВІД ПОПЕРЕДНИКІВ, СТРОКІВ СІВБИ ТА НОРМ ВИСІВУ В УМОВАХ ПРИСИВАШШЯ 301 KB
  Мета досліджень полягає в розробці більш досконалих та економічно ефективних агротехнічних прийомів вирощування пшениці озимої при сівбі після соняшнику ячменю ярого у порівнянні з чорним паром за різних строків сівби та норм висіву насіння.
64774. МЕТОДИКА ФОРМУВАННЯ ПРАЦЕОХОРОННИХ УМІНЬ І НАВИЧОК СТУДЕНТІВ АГРАРНИХ ВИЩИХ НАВЧАЛЬНИХ ЗАКЛАДІВ ЗАСОБАМИ ІМІТАЦІЙНОГО МОДЕЛЮВАННЯ 592 KB
  Здійснивши аналіз методики викладання нормативних дисциплін Основи охорони праці й Охорона праці в галузі у вищих аграрних навчальних закладах ми дійшли висновку що здебільшого застосовуються традиційні методи навчання які не повною мірою дозволяють сформувати високий рівень...
64775. ОЦІНЮВАННЯ ІННОВАЦІЙНОСТІ ТЕХНОЛОГІЧНИХ ПРОЦЕСІВ МАШИНОБУДІВНИХ ПІДПРИЄМСТВ 283 KB
  Зокрема потребує подальшого теоретичного та прикладного вирішення уточнення й поглиблення поняття інноваційність технологічних процесів виявлення чинників що визначають інноваційність розвиток класифікації технологічних процесів машинобудівних...
64776. Отримання порожнистих деталей із змінною товщиною стінки на базі використання способів радіально-прямого видавлювання 336.5 KB
  Для виготовлення розповсюджених в промисловості порожнистих вісесиметричних деталей із змінною товщиною стінки використовуються способи поздовжнього зворотного та прямого видавлювання витягування локальної обробки та процеси штампування...
64777. МУЗИКА Й ЖИВОПИС У ТВОРЧОСТІ О. КОБИЛЯНСЬКОЇ ТА Я. ІВАШКЕВИЧА: СИНКРЕТИЗМ ХУДОЖНЬОЇ ОБРАЗНОСТІ 162.5 KB
  Сучасність виводить синкретизм на рівень одного з основних понять філософії та культури, що зумовлено зростаючою роллю інтеграційних процесів та явищ у контексті глобалізації всього культурного життя суспільства, яке перетворює навколишній світ.
64778. ПЕДАГОГІЧНІ УМОВИ ФОРМУВАННЯ ПРОЕКТНО-ОБРАЗНОГО МИСЛЕННЯ МАЙБУТНІХ ДИЗАЙНЕРІВ У ВИЩОМУ НАВЧАЛЬНОМУ ЗАКЛАДІ 223 KB
  Сучасний етап розвитку українського суспільства ознаменувався значними трансформаціями в соціальноекономічній політичній культурній та освітній сферах що привели до переосмислення ролі дизайну як особливої діяльності яка завдяки естетичності екологічності технічності...
64779. Поліпшення паливно-економічних та екологічних показників автомобіля на основі оптимізації параметрів системи запалювання 820.26 KB
  Адаптивна настройка систем управління двигуном під конкретний режим руху автомобіля а також перерозподіл пріоритетів між ефективними показниками автомобіля залежно від умов його експлуатації є важливим експлуатаційним резервом економії палива й підвищення екологічної безпеки.