| |||
[network & security news] [RSS & Twitter] [articles, programing info] [books] [links, soft & more...] [soft archive] | [home] |
Кейлоггер? Это просто!В этой статье рассматриваются некоторые функции Win32 API, приемы и методы программирования под Windows достаточные для написания простого клавиатурного шпиона. Статья написана опираясь на материалы и вопросы форума uinc.ru по этой теме. ВведениеЗачем применяется клавиатурный шпион? В мирных целях - чтобы отследить определенную последовательность нажатий пользователем на клавиатуре. Пример - Abbyy Lingvo со своим <Ctrl>+<Ins>+<Ins>. А в "военных" - просто зафиксировать все вводимое с клавиатуры. В каких целях - ну это уже другой вопрос. МетодыВвод обычных символов с клавиатуры в Windows (как правило) отражается посылкой сообщений WM_KEYDOWN, WM_KEYUP окну в которое осуществляется ввод. Эти сообщения передают virtual-key коды нажатых клавиш. С ними не удобно работать поскольку нам самим придется преобразовывать их в вводимые символы, учитывая текущую кодировку, регистр и тд. В Win API этим занимается функция TranslateMessage(). Она транслирует эти сообщения с virtual-key кодами в символьные (WM_CHAR) и снова посылает их окну. С помощью функции SetWindowHookEx мы установим ловушку (хук) для фильтрации посылаемых сообщений в Windows. Нас интересует сообщение WM_CHAR. Для этого вызовем ее с параметром WH_GETMESSAGE. С помощью SetWindowHookEx мы установим callback функцию, которая будет вызываться всякий раз когда сообщение будет попадать в очередь. А точнее всякий раз когда функци GetMessage или PeekMessage вынимают сообщение из очереди. Прежде чем "отдать" сообщение приложению, система передает это сообщение нашей хук-функции. С помощью хуков можно отслеживать события происходящие как в отдельном потоке, так и во всех потоках в системе. Мы поставим глобальный хук. Для глобальных хуков callback функция должна находиться в Dll. Callback функция вызывается из разных процессов, а dll, соответственно, подгружается во все эти процессы. Итак, мы напишем dll, внутри которой будем устанавливать хук и внутри нее же будет находиться callback функция. А еще мы напишем основное приложение. Из него мы будем вызывать эту dll. Когда dll поймает нажатие клавиши - мы будем информировать свое главное приложение посылкой ему сообщения. А главное приложение уже будет обрабатывать это событие - делать запись в файл. Листинг MyHookDll.hВот интерфейс нашей dll-ли. Мы опишем и экспортируем две функции SetHook и UnsetHook. Думаю по названию понятно что делают эти функции. SetHook принимает два параметра - это handle окна, куда посылать нотификационное сообщение и собственно само сообщение. UnsetHook - без параметров.
Листинг MyHookDll.cppА вот и сама dll.
А вот тут внимание, тонкий момент. Внутри dll-ли нам нужно хранить как минимум handle окна и сообщение. Но обратите внимание, что наша dll подгружается во все процессы. А все данные в dll (в том числе и глобальные) hInstance-зависимые. Поэтому мы объявим специальную разделяемую (shared) секцию. Данные обявленные в ней будут доступные всем экземплярам этой DLL. Обратите внимание на то, что во-первых, все переменные, объявленные здесь, должны быть проинициализированы; и во-вторых - имя секции может быть любым, но оно обрезается линкером до восьми символов (а то это может показаться странным когда вы посмотрите в откомпилированный екзешник).
В зависимости от типа хука - его callback функция возвращает разную информацию. Наш хук возвращает структуру MSG. Итак если она не пустая, сообщение - WM_CHAR и оно вынимается из очереди (ведь приложение может сколько угодно "смотреть" на сообщение, вызывая функцию PeekMessage с параметром PM_NOREMOVE, но вынуть его сможет один раз) посылаем своему приложению нотификацию.
Все. Можно компилировать. Основное приложениеОно очень простое. И состоит из одного файла
Компилируем! Кейлоггер готов. ЗаключениеДаже такой простой кейлоггер может многое. Будучи запущен с правами простого пользователя (не администратора) он может перехватывать ввод информации в практически любое окно Windows. Теперь вам доступно логгирование информации вводимой в окна броузеров, диалогов настройки и регистрации, оффисные приложения и окошко "Run as...". :) Однако, ввод в некоторые окна наша программа не перехватывает. Во-первых, это консольные окна в Win NT/2k/XP. Причина этому очень проста - сообщения WM_KEYDOWN и WM_KEYUP не транслируются в WM_CHAR. Этим окнам просто не приходит сообщение WM_CHAR. Во-вторых, консольные окна Win9X. Там ввод с клавиатуры в консольное окно вообще не отражается посылкой сообщений. И наконец, окошко winlogon-на - "специального" процесса в Win NT/2k/Xp. Но решение этих задач выходит за рамки данной статьи. Статья написана специально для http://www.uinc.ru Keywords: кейлоггер, как написать кейлоггер, клавиатурный шпион, как написать клавиатурный шпион, слежка
Все документы и программы на этом сайте собраны ТОЛЬКО для образовательных целей, мы
не отвечаем ни за какие последствия, которые имели место как следствие использования
этих материалов\программ. Вы используете все вышеперечисленное на свой страх и риск. |
[network & security news] [RSS & Twitter] [articles, programing info] [books] [links, soft & more...] [soft archive] | [home] |
2000-2015 © uinC Team |