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.  

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

 


 

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

23442. Биобезопасность 5.6 MB
  Мотивирующие факторы биотерроризма Возможные источники появления у террористов биологического оружия и пути предупреждения его распространения Последствия биотерроризма значимость психологического фактора Биотерроризм как составляющая часть угрозы распространения опасных инфекционных заболеваний человека и животных общие и отличительные черты Потенциальные и реальные патогены для биотерроризма Общие черты и отличительные особенности биотерроризма и естественных вспышек инфекционных заболеваний. Защита человека и общества...
23443. Сибирская язва 1.56 MB
  Три мембраносвязанные энзима необходимые для синтеза капсулы кодируются pXO2 плазмидой массой 60 мегадальтон Наличие капсулы отличает вирулентные штаммы сибирской язвы от вакцинного. Многочисленные исследования убедительно показали что вирулентность возбудителя сибирской язвы утратившего способность образовывать капсулу снижается в десятки тысяч раз хотя его способность вызывать иммунитет сохраняется. Во время Второй Мировой войны Великобритания тестировала взрывчатку с бациллами сибирской язвы на шотландском острове Груинард. Бактерии...
23444. Современные методы индикации и идентификации B.anthracis 98 KB
  В Центре по контролю за заболеваемостью США разработали оптимизировали и оценили ферментносвязанный иммуносорбентный анализ ELISA на IgG антитела к защитному антигену PA Bacillus anthracis в сыворотке человека. Identification of Bacillus anthracis by a sample protective antigenspecific mAb dotELISA. Detection of frequency resonance energy transfer pair on doublelabeled microsphere and Bacillus anthracis spores by flow cytometry. anthracis лабораторной службы США.
23445. ФИЗИЧЕСКАЯ ГЕОГРАФИЯ 12.61 MB
  Материковые воды . Современные представления о Мировом круговороте воды . Подземные воды . Внутренние воды и водные ресурсы России .
23446. Экономическая география 1.57 MB
  Экономикогеографическая характеристика территории страны района и т. Кроме того существует территориальное разделение труда закрепляющее отдельные отрасли производства за определенными территориями страны и районы мира. Территориальное разделение труда Условные обозначения: А Б В территория любой страны или района мира; предприятия разнородных производств отраслей возникшие на территории отдельных стран районов располагающих благоприятными условиями предпосылками для их развития. Формирование в рамках...
23447. Битва за небеса 1.56 MB
  После нее победители немцев Британия Франция и США устанавливают Версальскую систему равновесия. Германия снова повержена и победители прежде всего наша Империя и США в 1944 году на Ялтинской конференции проектируют Ялтинскую модель мира. С балансом сил двух мировых держав СССР и США. Проклятая Североатлантическая сила ударит и по России едва только у нас сгниют от старости последние баллистические ракеты способные ударить по США.
23448. Геноцид русского народа 288.39 KB
  Ежегодно население России её коренных народов неуклонно сокращается и этот процесс вотвот станет необратимым. Каждый раз ставилась цель: довести долю машин и оборудования в экспорте России хотя бы до уровня 1985 года хотя бы до 40 . При этом промышленность России 2000х годов примерно в 13 раза энергопрожорливее индустрии СССР 1985 года. Ну где это всё Производительный малый бизнес в России раздавлен.
23449. Секретная служба в тылу немцев (1914 - 1918 гг.) 1.97 MB
  В 1913 году закончил колледж Гонвилла и Кейюса в Кембридже и собирался продолжить учебу чтобы стать горным инженером но с началом Первой мировой войны пошел добровольцем на фронт сначала служил в медицинской службе потом в полевой артиллерии где дослужился до капитана. Тем не менее они отмечали что в книгах содержится ряд неточностей и что автор порой слишком преувеличивал свои заслуги. Если мне не придётся больше быть в Голландии то я всё же буду помнить что дорога из Роттердама в Амстердам через Гаагу и Гарлем ровная а вокруг...
23450. История гитлерюгенда 404.5 KB
  История гитлерюгенда Введение ХХ век далеко не случайно считается эпохой тоталитаризма. У части западных историков сложилось восприятие гитлерюгенда как организации автономной от НСДАП и государственных органов Третьего Рейха. Поэтому несомненно что в большинстве своем члены гитлерюгенда свободны от вины за преступления совершенные нацистами. Но несмотря на всё это надо объективно рассматривать историческую роль гитлерюгенда так как он был организацией вполне интегрированной в политическую систему Третьего Рейха.