Реализация keylogging под WIN32
| Категория реферата: Рефераты по информатике, программированию
| Теги реферата: решебник по английскому языку, реферат экономическое развитие
| Добавил(а) на сайт: Федул.
Предыдущая страница реферата | 1 2 3 4 5 6 | Следующая страница реферата
В MSDN сказано, что если параметр code < 0, то нужно предать управление следующей ловушке вызовом CallNextHookEx, но на практике можно этого не делать, а просто возвратить из KeyboardProc 0 и все будет работать.
Третий параметр SetWindowsHookEx - дескриптор модуля в котором находится KeyboardProc, а четвертый - идентификатор потока, для которого устанавливается ловушка (0 - для всех потоков в системе). Фильтр может устанавливаться как на один поток одного приложения, так и на все потоки всех приложений. В последнем (наиболее интересном) случае KeyboardProc должна находиться в DLL (Dynamic Link Library). Так сделано из-за особенностей архитектуры Windows, в которой каждый процесс имеет свое адресное пространство. С помощью Visual C++ реализация собственной dll-библиотеки является несложной.
Важным моментом является то, что при запуске каждой новой программы при активном фильтре, Windows создает новую копию всех данных DLL, содержащей KeyboardProc, и динамическая библиотека внедряется в адресное пространство запускаемого процесса. Поэтому все глобальные данные следует хранить следующим образом:
1. В исходном коде DLL написать следующее:
#pragma data_seg(".SHAREDDATA")
/*
...
...
Глобальные данные
....
Например:*/
static char logFileName[128] = {0}; //Имя файла отчета
static int dllsCount; //Число внедренных DLL
// и т.д.
#pragma data_seg()
2. В .def - файле библиотеки написать:
SECTIONS
.SHAREDDATA Read Write Shared
При обработки события от клавиатуры возникает проблема: Как получить символ (например 'A' или 'a', 's' или 'ы'), который действительно вводил пользователь. Для этого можно воспользоваться функциями ToAscii и ToUnicode, которые позволяют по scan-коду и виртуальному коду, а также состоянию клавиатуры определить конкретный символ.
Мы опустим подробное описание механизма загрузки DLL, и получения адреса функции, а приведём пример непосредственного использования нашей библиотеки.
Пусть библиотека, содержащая необходимую нам функцию KeyboardProc, называется hooklib.dll.
#include
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
HHOOK hHook;
Рекомендуем скачать другие рефераты по теме: реферат катастрофы, реферат электрические.
Категории:
Предыдущая страница реферата | 1 2 3 4 5 6 | Следующая страница реферата