Hooky în ferestre
Cu acest articol încep o serie de articole despre mecanismul de mesaje fereastra de capcane, și jargonul cârlige mecanism programatori în sistemele de operare Windows. Tema de cârlige este popular pe multe forumuri programatori. Materialul acestor articole este proiectat pentru utilizator novice, exemplele sunt în Delphi. Acest articol va prezenta principiile de bază ale mecanismului de cârlig, și va fi scris de exemplu, de un keylogger.
Deci, vom continua, ceea ce este cârligele mecanism în Windows? În cârlig Windows pentru a intercepta mecanism numit un eveniment caracteristici speciale (cum ar fi mesaje, de intrare de la mouse-ul sau tastatura), înainte de a ajunge la aplicarea. Această funcție poate răspunde apoi la evenimente, și, în unele cazuri, să modifice sau să le aruncați. Funcțiile de la primirea notificării de evenimente sunt numite funcții de filtrare și diferă în tipurile de evenimente le interceptate. Exemplu - funcția de filtrare pentru a intercepta toate evenimentele mouse și tastatură. În cazul în care unul este atașat cârlig câteva funcții de filtrare, Windows implementează toate funcțiile, iar funcția atașată ultima, apare la începutul cozii, iar prima caracteristica - la sfârșitul anului.
Când atașat la Hook una sau mai multe funcții, filtre, și are loc un eveniment, ceea ce conduce la declanșarea unui cârlig, Windows este doar prima funcție a funcțiilor liniei de filtrare. Handler apel a fiecărui următor depinde în totalitate de procesorul anterior. În cazul în care orice procesor nu va cauza următoarea, fereastra de destinație nu va veni mesajul dorit, și, prin urmare, nu este funcția de fereastră se numește.
Carlige oferă capabilități puternice pentru aplicații Windows. Aplicațiile pot utiliza cârlige pentru următoarele scopuri:
Proces, să modifice sau să renunțe la orice evenimente șoarece (WH_MOUSE).
Lucrul cu cârlige prin funcția SetWindowsHookEx, UnhookWindowsHookEx, handler apel următor prin funcția CallNextHookEx. Înainte de versiunea 3.1 pentru Windows prevede gestionarea funcției cârlige SetWindowsHook, UnhookWindowsHook și DefHookProc. Aceste funcții sunt încă puse în aplicare în Win32, numai pentru compatibilitate cu aplicatii mai vechi, și să le utilizeze în noi proiecte nu este recomandată.
Să începem mai întâi, pentru a seta funcția de cârlig SetWindowsHookEx uspolzuetsya
Să mergem mai departe. Toate funcțiile de filtrare trebuie descrise după cum urmează:
Pentru a apela următoarea funcție în linia de cârlig este funcția CallNextHookEx
Deci, informațiile de bază despre hukah avem. Acum trebuie să înceapă să practica. Cele mai frecvente probleme ridicate la forumul de programatori asociate cu cârlige, aceasta este o problemă cu keylogger de scriere. Acesta keylogger am scrie acum.
Pentru a crea un cârlig de tastatură trebuie să spunem codul WH_KEYBOARD atunci când apelați funcția SetWindowsHookEx. Ferestre solicită handlerele KhKA atunci când funcția getMessage sau PeekMessage merge înapoi mesaje WM_KEYUP, WM_KEYDOWN.
Parametrul cod poate fi setat la următoarele valori
Parametrul wParam handler cârlig WH_KEYBOARD cuprinde un cod cheie virtuală (de exemplu, VK_F1, VK_RETURN, VK_LEFT). Parametrul lParam este interpretat după cum urmează.
Cum vom salva textul introdus? Desigur, cel mai simplu mod este de a păstra în codul de fișier interceptat de tasta apăsată este salvată într-un fișier de îndată ce o funcție a filtrului. Dar fișierul I / O operațiune nu este prea rapid și acest lucru duce la o scădere generală a performanțelor sistemului atunci când introduceți text (cu toate acestea, pe noile mașini poate fi greu de văzut). Așa că am zavedom server special fereastra, care va trimite codurile tastelor apăsate, această fereastră va primi codurile de intrarile de la tastatura și stochează în memoria sa, și arunca tamponul într-un fișier, atunci când se va ajunge la o anumită dimensiune.
Crearea și eliminarea cârlig, cred că, nici o problema este, prin urmare, trece imediat la handler cârlig foarte.
Problema principală atunci când scrieți un cârlige tastatură este că handler cârlig este trecut doar codul de scanare al tastei apăsate și codul său cheie virtuală. Codul de scanare virtuală și codul ne spune care cheia a fost apăsat, dar nu spun că a fost introdusă. coduri Permiteți-mi să explic, chiar dacă vom introduce un text în limba română, tastatura va fi transmise Hook chei în engleză, și anume, introducem cuvântul „salut“, și va fi transferat la handler cârlig „GHBDTN“. Sau, de exemplu, apăsați numărul Shift 7 și care introduc caracterele Dar cârlig tastatura budt prezentate numai numerele de cod 7. Pentru a converti codul de scanare și codul virtuale într-un caracter de text care a fost introdus, trebuie să utilizați funcția ToAscii (sau ToUnicode).
Parametrii săi sunt:
Primul parametru este codul cheie virtuală, al doilea este codul de scanare, al treilea parametru este un pointer la o matrice în care starea de conservare a tastaturii, al patrulea este un pointer la o variabilă care va fi stocat simbol, al cincilea parametru este un steag care determină dacă meniul activ. Acest parametru trebuie să fie 1, în cazul în care meniul este activ, sau în alt mod 0. Această funcție returnează numărul de caractere rezultate din conversia. Starea tastaturii pot fi accesate prin intermediul funcției GetKeyboardState.
Înapoi în funcția noastră de filtrare.
În primul rând, vom obține starea tastaturii, iar apoi vom obține codul de scanare a parametrilor și apelează funcția lParam ToAscii. În cazul în care rezultatul său nu este zero, adică dacă rezultatul său nu este gol, apoi trimite server de fereastra csoobschenie cu titlul „keylogger simplă“ (numerele din antet trebuie doar pentru unicitatea sa). Mesaj WM_KEYEVENT am anunțat ei înșiși
Și aici e handler în sine WM_KEYEVENT Mesaje
Pentru cheia de decriptare de text, care a fost apăsat pe scanarea sa din codul am folosit funcția GetKeyNameText. DLL textul integral al cererii și stocate în arhiva atașată la acest articol.
Dacă te uiți pentru a obține un jurnal, vom vedea următorul text în formatul <название клавиши, введённый текст>.
Acesta a venit la sfârșitul primului articol despre cârlige. Swing, ne uitam sursa explora de învățare.
Descărcări