Hooky в прозорци

С тази статия аз започвам серия от статии за механизма на прозорците съобщенията на капани и жаргона на програмистите механизъм куки в операционните системи Windows. Тема на куки е популярна в много програмисти форуми. Материалът на тези статии е предназначена за начинаещ потребител, примерите са в Делфи. В тази статия ще очертае основните принципи на механизъм кука, и ще бъдат записани пример за записване на натиснатите клавиши.

Така че, ние се процедира, това, което е механизмът куките Windows? В Windows кука за механизъм за прихващане нарича специални функции за събития (като например съобщения, вход от клавиатурата или мишката), преди те да стигнат до заявлението. Тази функция може след това отговори на събития, както и, в някои случаи, да променяте или да ги отхвърлите. Функциите на получаване на уведомлението за събития се наричат ​​филтърни функции и се различават по видовете събития ги пресрещна. Пример - филтриране функция да пресече всички събития мишка и клавиатура. Ако някой е свързан Hook няколко филтриращи функции, Windows изпълнява всички функции, както и функцията прикрепен последно, той се появява в началото на опашката, и най-първата характеристика - в края.

Когато прикрепен към куката една или повече функции, филтри и събитие, което води до задействането на кука, Windows е само първата функция на функциите на линия-филтър. манипулатор повикване на всеки следващ изцяло зависи от предишния процесор. Ако някой процесор няма да доведе до следващата, целевият прозорец няма да дойде желаното съобщение и поради това не е функция прозорец се нарича.

Куки осигуряват мощни възможности за приложения на Windows. Приложенията могат да използват куките за следните цели:

  • Process или модифициране на всички съобщения, предназначени за всички диалогови прозорци (диалогов прозорец), прозорците на информация (кутия за съобщения), ленти за превъртане (плъзгач), или от менюто на заявлението (WH_MSGFILTER).
  • Process или модифициране на всички съобщения, предназначени за всички диалогови прозорци, информационни карета, ленти за превъртане, менюта, или на цялата система (WH_SYSMSGFILTER).
  • Process или модифициране на всички съобщения в системата (всички мнения), ние получаваме функция GetMessage или PeekMessage (WH_GETMESSAGE).
  • Process или модифициране на всички съобщения (от всякакъв вид), да направи функция на телефонен разговор SendMessage (WH_CALLWNDPROC).
  • Записване и възпроизвеждане на клавиатура и мишка събития (WH_JOURNALRECORD, WH_JOURNALPLAYBACK).
  • Процес, промяна или изтриване на клавиатурата събития (WH_KEYBOARD).
    Метод, изменение или откаже събития мишка (WH_MOUSE).
  • За да отговори на някои от системата, което позволява да се разработват приложения компютърно обучение - компютърно обучение (WH_CBT).
  • Предотвратяване на повикване до друг филтър функция (WH_DEBUG).

    Работа с куки чрез функция SetWindowsHookEx, UnhookWindowsHookEx, следващия манипулатор повикване чрез функция CallNextHookEx. Преди да се версия 3.1 на Windows предоставя за управление на куки SetWindowsHook функция, UnhookWindowsHook и DefHookProc. Тези функции са все още изпълнени в Win32, само за съвместимост с по-стари приложения, и да ги използват в нови проекти не се препоръчва.

    Да започнем първо място, за да настроите кука функция SetWindowsHookEx uspolzuetsya на

    Да вървим по-нататък. Всички филтърни функции трябва да бъдат описани както следва:

    За да се обадите следващата функция в линията на кука е функция CallNextHookEx

    Така че, основната информация за hukah имаме. Сега ние трябва да започнем да практика. Най-честите въпроси, повдигнати по време на форума на програмисти, свързани с куките, това е проблем с писането на кийлогъри. Тя Keylogger сега пиша.

    За да създадете клавиатура кука трябва да кажа WH_KEYBOARD код при извикване на функцията SetWindowsHookEx. Windows призовава отговорниците KhKA когато GetMessage или PeekMessage функция връщане назад WM_KEYUP съобщения, WM_KEYDOWN.
    параметър код може да бъде зададен от следните стойности

  • HC_ACTION Windows призовава събитието манипулатор на програмния код, когато изтриете съобщение от опашката.
  • HC_NOREMOVE Windows кара процесора с кода, когато посланията на клавиатурата не са отстранени от опашката, защото заявлението е причинил PeekMessage функция PM_NOREMOVE параметър. Когато се обадите на кука с този код не е гарантирано прехвърлянето на действителното състояние на клавиатурата. Програмистът трябва да са наясно с възможността за такава ситуация.

    Параметър wParam кука WH_KEYBOARD манипулатор включва виртуална ключ код (например, VK_F1, VK_RETURN, VK_LEFT). Параметърът lParam се тълкува както следва.

  • Bits 0-15 съдържат броя на повторенията клавиши Айв случай за залепване.
  • Bits 16-23 съдържат сканиране кода на натиснат клавиш. Това е хардуерно зависим код, който зависи от клавиатурата.
  • Bit 24 е едно, ако натиснат клавиша е удължен (или функция от цифровата клавиатура), 0 в противен случай.
  • Bits 25-28 са запазени.
  • Bit 29 се задава, ако сте натиснали бутона Alt.
  • Bit 30 ни казва за състоянието на ключа за да изпратите съобщението. Ако битът е равен на една преди натискане на бутона, преди да изпратите съобщението, ако бутонът не е натиснат и преди, битът е нула.
  • Bit 31 показва текущото състояние на ключа. Тя е равна на нула, ако е натиснат бутона и уреда, ако не и депресирани.

    Как ще запазите въведения текст? Разбира се, най-лесният начин е да се запази в прихванати файл кода на натискане на бутона се записва във файл, веднага след като функция на филтъра. Но аз файл / O операция не е прекалено бързо и това води до цялостно намаляване на производителността на системата, когато бъде въведен текст (въпреки това, на новите машини едва ли може да се види). Така че ние zavedom специален прозорец сървър, който ще изпрати кодовете на ключовете притискат, този прозорец ще получите код клавиши и съхраняват в своята буфер, и хвърлят буфера към файл, когато ще достигне определен размер.

    Създаване и премахване на куката, според мен, няма проблеми, следователно, е незабавно да се пристъпи към самото кука манипулатор.

    Основният проблем при писането на клавиатура куки е, че водачът на куката се предава само на сканиране кода на натиснат клавиш и неговата виртуална ключ код. код Virtual сканиране и кода ни казва кой клавиш е натиснат, но не казват, че е било въведено. Нека обясня, дори и ако ние се въведе на българския текст, клавиатура Хук ще бъдат предавани кодове английски ключове, т.е. ще се въведе думата "здравей" и ще бъдат прехвърлени към манипулатора кука "GHBDTN". Или, например, ние натиснете Shift номер 7 и въвеждащи знаци Но клавиатура кука budt подава само кодови номера 7. За да се превърне кода за сканиране и виртуалния код в текстов герой, който е вписан, трябва да използвате функцията ToAscii (или ToUnicode).
    Параметрите му са:

    Първият параметър е виртуалният ключов код, вторият е кодът на сканиране, третият параметър е указател към масив, в който състоянието на опазване на клавиатурата, четвъртият е указател към променлива, която ще се съхранява символ петият параметър е флаг, който определя дали активното меню. Този параметър трябва да бъде 1, ако менюто е активна, или по друг начин 0. Тази функция връща броя на символите, получени от преобразуването. Състоянието на клавиатурата могат да бъдат достъпни чрез GetKeyboardState на функция.

    Обратно в нашата филтриране функция.

    На първо място, ние се състоянието на клавиатурата, а след това ще получим сканиране кода на параметрите и извикване на функция LParam ToAscii. Ако резултатът не е нула, т.е. ако резултатът не е празна, а след това да изпрати csoobschenie прозорец сървър с заглавие "Simple Keylogger" (числата в заглавната нужда само със своята уникалност). Мнение WM_KEYEVENT ние самите обяви

    А ето и самата манипулатор WM_KEYEVENT Публикации

    За текст декриптиране, че е бил натиснат от нейно сканиране на кода сме използвали функцията GetKeyNameText. DLL пълния текст на искането и се съхраняват в архива, прикрепена към тази статия.

    Ако се вгледате, за да получите лог, виждаме следния текст във формат <название клавиши, введённый текст>.

    Това дойде в края на първата статия за куките. Люлки, гледаме източника проучи обучение.

    Downloads