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.  

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

 


 

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

36376. ПИД – регулятор 31.47 KB
  Пропорциональная составляющая формирует на выходе управляющее воздействие пропорциональное ошибке Е. Дифференциальная составляющая формирует воздействие пропорциональное скорости изменения ошибки обеспечивает минимальное быстродействие ошибка Е по модулю всегда больше нуля. Интегральная составляющая формирует управляющее воздействие пропорционально площади ошибки т. Пропорциональная составляющая вырабатывает выходной сигнал противодействующий отклонению регулируемой величины от заданного значения наблюдаемому в данный момент времени.
36377. Прикладные программы 12.43 KB
  Прикладные программы предназначены для обработки данных пользователей ЭВМ. С помощью прикладных программ осуществляется решение: как отдельных задач так и системы взаимосвязанных задач. Область применения прикладных программ все отрасли человеческой деятельности. Эти программы находятся в постоянном развитии и расширении особенно в направлении применения оптимизирующих алгоритмов и представляются не в виде некоторого одного универсального комплекса а нескольких каждый из которых представлен совокупностью программ для разрешения вполне...
36378. Принцип действия пирометров спектрального отношения 125 KB
  Пирометры спектрального отношения измеряют цветовую температуру объекта по отношению интенсивностей излучения Еλ1 и Еλ2 в двух определенных участках спектра каждый из которых характеризуется эффективной длиной волны λ1 и λ2.Следовательно осуществив в приборе операцию логарифмирования можно свести измерение отношения интенсивностей излучения к измерению разности их логарифмов. Каждой температуре соответствует определенная длина волны на которой интенсивность излучения максимальна. В цветовых пирометрах определяется отношение интенсивности...
36379. Состав САПР. Компоненты видов обеспечения САПР 45.5 KB
  Составными частями САПР жестко связанными с организационной структурой проектной организации являются подсистемы в которых при помощи специализированных комплексных средств решается последовательность задач проектирования. Проектирующие подсистемы имеют объектную ориентацию и реализуют определенный этап проектирования или группы непосредственно связанных проектных задач например эскизное проектирование изделий проектирование корпусных деталей проектирование ТП механической обработки. Компоненты видов обеспечения Средства...
36380. Схемы внешних электрических и трубных проводок. Основные требования и правила выполнения 36 KB
  Схемы внешних электрических и трубных проводок. Схема соединений внешних проводок это комбинированная схема на которой показывают электрические и трубные связи между приборами и средствами автоматизации установленными на технологическом оборудовании вне щитов и на щитах а также подключения проводок к приборам и щитам. Схему подключения допускается не выполнять если все подключения могут быть показаны на схеме соединений внешних проводок. При необходимости раздельного изображения электрических и трубных проводок цеха участка...
36381. Учет персонала 29.58 KB
  Учет персонала. Взаимосвязи подсистемы Учет персонала : Из подсистемы АНАЛИЗ и УПРАВЛЕНИЕ приказы нормативы и запросы на получение информации. Информация из бухгалтерии о расходах на содержание персонала отчеты по начислениям з платы и прочие денежные выплаты. Различные отчеты и сводки для подсистемы АНАЛИЗ и УПРАВЛЕНИЕ об использовании персонала численность и качественный состав работников данные для статистики расходы на содержание персонала и т.
36382. Экстремальные регуляторы 51.93 KB
  Задача поиска экстремума разбивается на две части 1 определение отклонений от точки экстремума изучение объекта 2 организация движения к точке экстремума. ЭР с запоминанием экстремума: ЭР вкл в себя ЗУ – зап. В резте устанавливается автоколебательный режим работы регра около точки экстремума. Если Х0 сигнум – реле не меняет направление вращения ИМ если Х0 то производится реверс ИМ изменяется направление поиска экстремума.
36383. Дайте классификацию и поясните сущность интегральных критериев качества 35.68 KB
  Наибольшее распространение получили три интегральных критерия: А линейный Б квадратичный В квадратичная оценка отклонения от эталона А Линейный критерий качества 6 6 где отклонение переходного процесса от устойчивого значения; Уmt – функция веса ε1tmemtedttm Возможности критерия 7: 1У0t=t0=1 7 Критерий J10 7 – площадь под кривой переходного процесса с учетом знака рис. 2 Критерий J10 7 пригоден только для анализа апериодических процессов. В этом случае J10=min...
36384. Моделирование на ЭВМ типовых звеньев САУ 59.29 KB
  Моделирование на ЭВМ типовых звеньев САУ В состав структурных схем большинства систем автоматического управления САУ входит достаточно ограниченный набор типовых звеньев. В основу процедуры моделирования многих типовых звеньев положен метод РунгеКутта. Апериодическое звено первого порядка Реальное дифференцирующее звено Пропорциональноинтегральное звено Структурные схемы некоторых типовых звеньев. При моделировании более сложных звеньев таких как апериодическое пропорциональноинтегральное дифференциальное и т.