почему мы должны поместить глобальную подключаемую процедуру в отдельную DLL - PullRequest
1 голос
/ 27 октября 2010

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

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

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

окончательно

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

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

1 Ответ

3 голосов
/ 28 сентября 2011

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

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

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

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

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

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

...