Najlepiej poznać wroga studiując jego metody. Dlatego przygotujemy prosty program podsłuchujący naciśnięte klawisze. Program napiszemy w C++Builderze 6 , ale najważniejsze fragmenty kodu można bez trudu przenieść do Visual C++ 2005 lub do innego środowiska programistycznego, nie tylko dla C++.

Data dodania: 2010-06-15

Wyświetleń: 2264

Przedrukowań: 0

Głosy dodatnie: 2

Głosy ujemne: 0

WIEDZA

2 Ocena

Licencja: Creative Commons

W szczególności osoby programujące w Delphi z łatwością mogą przetłumaczyć poniższe przykłady na Object Pascal. To samo dotyczy Visual Basica. Zacznijmy od biblioteki DLL zawierającej funkcję zahaczoną. Dla wygody do tej samej biblioteki dodamy także funkcje ustawiające i usuwające hak. W środowisku C++Builder, z menu File/New/Other... wybieramy pozycję DLL Wizard i klikamy OK. Pojawi się okno. Zgodnie ze wzorem na rysunku należy ustawić widoczne na
nim opcje. Stworzymy w ten sposób prosty moduł bez pliku nagłówkowego, w którym poza sporej wielkości komentarzem jest tylko funkcja Dll- Main. Zapiszmy cały projekt używając np. nazwy KeyHook dla pliku projektu (tj. pliku z rozszerzeniem .bpr). Zacznijmy od zapisania uchwytu do bieżącej biblioteki DLL w zmiennej globalnej handleDLL. Uchwyt ten można odczytać ze zmiennej globalnej HInstance zdefiniowanej w module SysInit (aby była dostępna należy zaimportować nagłówek SysInit.hpp), ale jest to rozwiązanie charakterystyczne dla C++Buildera. Dlatego my odczytamy go z pierwszego argumentu funkcji DllMain. W tym celu modyfikujemy tę funkcję,
jak na Listingu 1. Następnie przejdźmy do zdefiniowania funkcji SetHook, której zadaniem, jak wskazuje jej nazwa, będzie ustawienie haka holowniczego. I tu ważna uwaga.
Nie należy jej wywołania umieszczać
w funkcji DllMain, co może wydawać
się dobrym rozwiązaniem automatyzującym
zakładanie haka. To jest złe miejsce, bo biblioteka DLL zawierać będzie także funkcję zahaczoną, co oznacza, że biblioteka będzie ładowana do przestrzeni adresowej każdej aplikacji, która otrzyma komunikat

związany z naciśnięciem klawiszy. Za każdym razem wywoływana będzie oczywiście jej funkcja DllMain. Ustawienie haka realizowane jest przez wywołanie funkcji WinAPI SetWindowsHookEx, której pierwszym argumentem jest stała identyfikująca typ interesujących nas komunikatów, w naszym przypadku będzie to stała
WH _ KEYBOARD, drugim jest wskaźnik
do funkcji zahaczonej, którą będziemy
musieli jeszcze zdefiniować, natomiast trzeci wskazuje uchwyt biblioteki,
w której funkcja zahaczona jest umieszczona. W naszym przypadku, w którym funkcja ustawiająca hak i funkcja zahaczona są w tej samej bibliotece umieścimy w trzecim argumencie uchwyt do bieżącej biblioteki.

Licencja: Creative Commons
2 Ocena