почему мы должны поместить глобальную процедуру ловушки в отдельную DLL

я прочитал статью, msdn и блог, но у меня есть вопрос

почему мы должны поместить глобальную процедуру ловушки в DLL отдельно от приложения, устанавливающего процедуру ловушки

а чем отличается глобальный хук и кейлогер (я пишу кейлог без отдельной dll)? как кейлоггер перехватывает все сообщения клавиатуры приложения без отдельной dll?

наконец

какой код в dll для глобального хука?

пожалуйста, дайте какой-нибудь шаг для написания глобального хука с подробностями


person maysam    schedule 27.10.2010    source источник


Ответы (1)


По сути, есть два способа глобального захвата нажатий клавиш (кейлоггер может использовать любой из них):

  1. Используя глобальную ловушку клавиатуры. Для этого метода требуется HookProcedure, расположенная в отдельном файле DLL, как вы указали выше. Это правильный способ захвата нажатий клавиш, потому что ваша функция вызывается только при каждом нажатии клавиши.

    Эта статья может быть полезна: http://www.codeproject.com/KB/DLL/keyboardhook.aspx

  2. Вызов функции WinAPI GetKeyboardState. Этот метод не требует отдельного файла DLL, но имеет большой недостаток. Функция возвращает только актуальное состояние клавиатуры. Необходимо вызвать его в бесконечном цикле (возможно, в отдельном потоке, но не обязательно) с небольшим временем ожидания, чтобы зафиксировать все нажатия клавиш.

    Это приводит к увеличению использования ЦП. Я не рекомендую вам использовать эту технику. Также антивирусное программное обеспечение с хорошей эвристикой расценит такой код как кейлоггер.

Кейлоггер без DLL, вероятно, использует второй подход или генерирует DLL на лету.

person Marian Galik    schedule 27.09.2011