Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа - Разработка компонент защиты от кейлоггеров.doc
Скачиваний:
171
Добавлен:
02.05.2014
Размер:
508.93 Кб
Скачать

1. Основные сведения

Spyware – это термин, определяющий приложения, которые записывают информацию о поведении пользователя в сети Интернет и сообщают об этом своим создателям. Результатом их действия может стать как всплывающая реклама, так и более серьёзные нарушения в безопасности системы, включая кражу информации, запись нажатых клавиш, изменение параметров соединения с глобальной сетью, а также установку «черного хода».

Spyware-приложения обычно попадают в систему посредством условно бесплатного ПО, основанного на показе баннеров и рекламы. Другие источники включают в себя программы для обмена сообщениями, различные Peer-to-Peer приложения, популярные download-менеджеры, online-игры, множественные порно- и хакерские сайты, и многое другое. Следует отметить, что в основном spyware-приложения направлены против браузера Microsoft Internet Explorer. Пользователи современных альтернативных web-браузеров, типа Mozilla Firefox или Apple Safari, в основном вообще не подвержены воздействию spyware.

Последние методы внедрения, используемые spyware-приложениями, не требуют никакого взаимодействия с пользователем. Известные как “drive-by downloads” (скачиваемые налету), spyware-приложения доставляются на компьютер пользователя без его ведома, либо при посещении определенной web-страницы, либо при открытии заархивированных файлов, либо при нажатии на всплывающее окошко, содержащее активный элемент типа ActiveX, Java Applet и т.п. Spyware-модули могут также содержатся в графических файлах, а иногда даже в драйверах для нового оборудования.

Программы-шпионы – это ПО, загружаемое в компьютер вместе с каким-либо полезным (и не очень) программным продуктом. Пользователь скачивает его из Интернета либо устанавливает с CD или других носителей. Многие из подобных программ попадают на компьютеры фактически легально, когда пользователь сам дает добро на их установку, «подписывая» не глядя условия лицензионного соглашения устанавливаемого продукта.

Подобное ПО может оказывать разное влияние на работу компьютера: задействовать вычислительные ресурсы сети, перехватывать обрабатываемую информацию, отправлять сообщения. В «облегченном» варианте шпионства предметом интереса могут стать адреса электронной почты, часто посещаемых пользователем веб-сайтов, а также персональные данные, утечка которых делает его мишенью для навязчивой рекламы и спама.

Если на ПК «поселился» более серьезный «шпион», это грозит перехватом ввода с клавиатуры и образов экрана, получением несанкционированного доступа к паролям, PIN-кодам и другой конфиденциальной информации. Такой «шпион» может осуществлять мониторинг любой деятельности пользователя на зараженной машине – и с заданной периодичностью отсылать собранную информацию своим создателям.

Рекламное ПО (adware) выполняет иную функцию – оно навязывает пользователю просмотр рекламы на протяжении всего времени запуска программы. Такое «приложение» часто включается в состав различного бесплатного ПО либо незаметно загружается в компьютер (аналогично cookies) при посещении абсолютно безобидных на первый взгляд страниц сайтов.

Программы дозвона (dialers) служат для подключения зараженной системы к платным ресурсам какой-либо службы. Результатом их работы становится счет за пользование сервисом, о котором пользователь даже не подозревает.

Клавиатурные шпионы входят в категорию вредоносных программ, представляющую немалую угрозу для безопасности пользователя. Как и программы, относящиеся к категории RootKit, о которых шла речь в предыдущем номере, клавиатурные шпионы не являются вирусами, поскольку не обладают способностью к размножению.

Клавиатурные шпионы

Клавиатурные шпионы — это программы для скрытной записи информации о нажимаемых пользователем клавишах. У термина «клавиатурный шпион» существует ряд синонимов: Keyboard Logger, KeyLogger, кейлоггер; реже встречаются термины «снупер», «snoop», «snooper» (от англ. snoop — буквально «человек, вечно сующий нос в чужие дела»).

Как правило, современные клавиатурные шпионы не просто записывают коды вводимых клавиш — они как бы привязывают клавиатурный ввод к текущему окну и элементу ввода. Кроме того, многие клавиатурные шпионы отслеживают список запущенных приложений, умеют делать снимки экрана по заданному расписанию или событию, шпионить за содержимым буфера обмена и решать ряд задач, нацеленных на скрытное слежение за пользователем. Записываемая информация сохраняется на диске, и большинство современных клавиатурных шпионов могут формировать различные отчеты, передавать их по электронной почте или по протоколам FTP и HTTP. Кроме того, ряд современных клавиатурных шпионов пользуется технологиями RootKit для маскировки следов своего присутствия в операционной системе.

Для системы клавиатурный шпион, как правило, нестрашен, — а вот для пользователя он чрезвычайно опасен, поскольку с его помощью можно перехватить пароли и прочую конфиденциальную информацию, вводимую пользователем. К сожалению, в последнее время известны сотни разнообразных кейлоггеров, причем многие из них не распознаются антивирусами.

Перед описанием основных принципов работы клавиатурного шпиона необходимо рассмотреть модель аппаратного ввода системы Windows. Достаточно подробное описание этой модели можно найти в книге «Windows для профессионалов» Д.Рихтера.

При возникновении неких событий ввода (например, при нажатии клавиш или перемещении мыши) события обрабатываются соответствующим драйвером и помещаются в системную очередь аппаратного ввода (рис. 2). В системе имеется особый поток необработанного ввода, называемый RIT (Raw Input Thread), который извлекает события из системной очереди и преобразует их в сообщения. Полученные сообщения помещаются в конец очереди виртуального ввода одного из потоков (Virtualized Input Queue, VIQ виртуальная очередь потока). При этом RIT сам выясняет, в очередь какого конкретного потока необходимо поместить событие. Для событий мыши поток определяется путем поиска окна, над которым расположен курсор мыши. Клавиатурные события обычно отправляются только одному, так называемому активному потоку (то есть потоку, которому принадлежит окно, с которым работает пользователь). Но на самом деле это не всегда так — в частности, на рисунке показан поток A, не имеющий очереди виртуального ввода. В данном случае получается, что потоки A и B совместно используют одну очередь виртуального ввода. Это достигается путем вызова функции Windows API AttachThreadInput, которая позволяет одному потоку подключиться к очереди виртуального ввода другого потока.

Рис.2. Модель аппаратного ввода системы Windows.

Следует отметить, что поток необработанного ввода отвечает за обработку специальных сочетаний клавиш, в частности Alt+Tab и Ctrl+Alt+Del.

Слежение за клавиатурным вводом при помощи ловушек

Данная методика является классической для клавиатурных шпионов, а суть ее заключается в применении механизма ловушек (hook) операционной системы. Ловушки позволяют наблюдать за сообщениями, которые обрабатываются окнами других программ. Установка и удаление ловушек производятся при помощи хорошо документированных функций библиотеки user32.dll (функция SetWindowsHookEx позволяет установить ловушку, UnhookWindowsHookEx — снять ее). При установке ловушки указывается тип сообщений, для которых должен вызываться обработчик ловушки. В частности, существует два специальных типа ловушек: WH_KEYBOARD и WH_MOUSE — для регистрации событий клавиатуры и мыши соответственно. Ловушка может быть установлена для заданного потока и для всех потоков системы, причем последнее очень удобно для построения клавиатурного шпиона.

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

На прилагаемом к журналу компакт-диске имеется демонстрационный клавиатурный шпион, построенный на основе ловушки. Он регистрирует клавиатурный ввод во всех GUI-приложениях и дублирует вводимый текст на своем окне. Данный пример можно использовать для тестирования программ, противодействующих клавиатурным шпионам.

Методика ловушек весьма проста и эффективна, но у нее есть ряд недостатков. Одним из них можно считать то, что DLL с ловушкой проецируется в адресное пространство всех GUI-процессов, что может применяться для обнаружения клавиатурного шпиона. Кроме того, регистрация событий клавиатуры возможна только для GUI-приложений — это легко проверить при помощи демонстрационной программы.

Слежение за клавиатурным вводом при помощи опроса клавиатуры

Данная методика основана на периодическом опросе состояния клавиатуры. Для опроса состояния клавиш в системе предусмотрена специальная функция GetKeyboardState, возвращающая массив из 255 байт, в котором каждый байт содержит состояние определенной клавиши на клавиатуре. Данный метод уже не требует внедрения DLL в GUI-процессы, и в результате шпион менее заметен.

Однако изменение статуса клавиш происходит в момент считывания потоком клавиатурных сообщений из его очереди, поэтому подобная методика работает только для слежения за GUI-приложениями. Этого недостатка лишена функция GetAsyncKeyState, возвращающая состояние клавиши на момент вызова функции.

На прилагаемом компакт-диске имеется демонстрационный клавиатурный шпион, построенный на основе циклического опроса клавиатуры, — приложение KD2.

Недостатком клавиатурных шпионов такого типа является необходимость периодического опроса состояния клавиатуры с достаточно высокой скоростью — не менее 10-20 опросов в секунду.

Слежение за клавиатурным вводом при помощи перехвата функций Windows API

Данная методика не получила широкого распространения, но тем не менее может с успехом применяться для построения клавиатурных шпионов. Методики перехвата функций API подробно рассматривались в статье, посвященной RootKit. Разница между RootKit и клавиатурным шпионом в данном случае невелика — шпион перехватывает функции с целью мониторинга, а RootKit — с целью модификации принципов работы и результатов вызова.

Простейшим способом может быть перехват функций GetMessage, PeekMessage и TranslateMessage библиотеки User32, что позволит вести мониторинг всех сообщений, получаемых GUI-приложениями.

Аппаратные клавиатурные шпионы

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

Аппаратные кейлоггеры (keystroke recording device, hardware keylogger и пр.) представляют собой миниатюрные приспособления, которые могут быть прикреплены между клавиатурой и компьютером или встроены в саму клавиатуру. Они регистрируют все нажатия клавиш. Процесс этот абсолютно незаметен для пользователя. Аппаратные кейлоггеры не требуют установки какой-либо программы на компьютере интересующего объекта, чтобы успешно перехватывать все нажатия клавиш. Такое устройство может быть тайно прикреплено к ПК кем угодно - коллегой, уборщицей, посетителем и т.д. Когда аппаратный кейлоггер прикрепляется, абсолютно не имеет значения, в каком состоянии находится компьютер - включенном или выключенном.

Затем атакующий может снять устройство в любой удобный момент, а его содержимое (записанные нажатия клавиш) скачать, когда ему это будет удобно. Объемы внутренней энергонезависимой памяти данных устройств позволяют записывать до 10 миллионов нажатий клавиш. Прикрепить данное устройство к компьютеру пользователя очень легко. Внешний вид этих устройств настолько многообразен, что даже специалист не в состоянии иногда определить их наличие при проведении информационного аудита.

Особо известны на рынке аппаратные кейлоггеры KeyKatcher, KeyGhost, MicroGuard, Hardware KeyLogger, производителями которых являются компании Alien Concepts, Inc., Amecisco, KeyGhost, Ltd., MicroSpy, Ltd.

Аппаратные кейлоггеры подразделяются на внешние и внутренние, их особенности описаны ниже.

Внешние аппаратные кейлоггеры.

Наружные аппаратные кейлоггеры подключаются между обычной клавиатурой ПК и компьютером и регистрируют каждое нажатие клавиш. Им не нужны ни батареи, ни программы, и они могут работать на любом ПК. Можно подключить их к одному компьютеру, чтобы записать информацию, а затем к другому, чтобы воспроизвести ее. Современные аппаратные кейлоггеры представляют собой приспособления, которые выглядят, как оборудование для ПК.

Внутренние аппаратные кейлоггеры.

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

Он представляет собой встроенное небольшое устройство, внедренное в разрыв шнура клавиатуры и покрытое изоляционным материалом.

Для поиска клавиатурных шпионов на домашнем компьютере вполне достаточно удостовериться в отсутствии программ-кейлоггеров. Но в корпоративной среде, в частности на компьютерах, применяемых для выполнения банковских операций, для проведения электронных торгов или для решения задач, связанных с обработкой секретных документов, имеется опасность применения аппаратных средств, предназначенных для регистрации вводимой с клавиатуры информации. Рассмотрим основные каналы утечки информации с точки зрения применения аппаратных средств.

Рис. 3. Возможные места аппаратного перехвата вводимой информации

1. Аппаратная закладка внутри клавиатуры

В любой клавиатуре обычно бывает много полостей, размер которых достаточен для размещения небольшой платы. Питание устройства и съем информации может производиться путем непосредственного подключения к печатной плате контроллера клавиатуры. Аппаратная закладка может быть установлена вручную или промышленным способом. Например, на сайте http://www.keyghost.com можно увидеть рекламу клавиатур со встроенным аппаратным кейлоггером.

Методика противодействия: вскрытие клавиатуры и ее проверка на предмет наличия посторонних электронных узлов с последующим пломбированием корпуса клавиатуры при помощи пломбира или стикера.

2. Считывание данных с кабеля клавиатуры бесконтактным методом

Данная методика предполагает считывание информации посредством бесконтактного датчика. Для установки такого устройства не требуется ни вскрытия клавиатуры, ни включения каких-либо устройств в разрыв кабеля. Бесконтактный аппаратный кейлоггер должен иметь автономное питание, а его устройство значительно сложнее, чем в случае непосредственного подключения. По внешнему виду подобное устройство может выглядеть как съемный фильтр помех, надеваемый на кабель.

Методика противодействия: бесконтактное считывание наиболее эффективно в случае размещения датчика в непосредственной близости от кабеля клавиатуры (а еще лучше — вокруг этого кабеля), а потому при проверке рабочих мест необходимо убедиться в отсутствии посторонних предметов неизвестного назначения вблизи кабеля клавиатуры или непосредственно на нем.

3. Включение устройства в разрыв кабеля

Клавиатурные шпионы данного типа являются самыми распространенными и их легко как установить, так и обнаружить. Аппаратный кейлоггер выполняется в виде небольшого устройства, которое включается в PS/2- или USB-разъем компьютера, а клавиатура включается в разъем на корпусе кейлоггера. Для выполнения подобной операции не требуется никакой квалификации, причем подключение кейлоггера к USB-клавиатуре может производиться без выключения компьютера. Известен ряд серийно выпускаемых устройств, например KEYKatcher Hardware Keyloggers (http://www.keykatcher.com), который выпускается в двух видах — для PS/2- и USB-клавиатур. Другой пример — KeyGhost (http://www.keyghost.com).

Рис.4. Компьютер с установленным аппаратным кейлоггером KeyGhost

Аппаратный кейлоггер может выглядеть как фильтр помех или переходник. Устройство состоит из входных цепей, предназначенных для фильтрации помех и защиты устройства от перенапряжения, микроконтроллера с малым потреблением электроэнергии и Flash-памяти, предназначенной для хранения собираемой информации. Объем Flash-памяти варьируется от 32 Кбайт до десятков мегабайт; типичный объем — от 128 Кбайт до 2 Мбайт.

Рис. 5 Функциональная схема аппаратного кейлоггера

Методика противодействия: периодический осмотр рабочего места на предмет наличия посторонних устройств, включенных в разрыв кабеля клавиатуры. Штекер клавиатуры довольно просто защитить стикером, нарушаемым при извлечении штекера из разъема.

4. Аппаратная закладка внутри системного блока

Этот шпион не отличается по принципу действия от устройств типов 1 и 3, но размещается внутри системного блока. Установить его может только специалист, причем для этого потребуется вскрытие корпуса.

Методика противодействия: пломбирование системного корпуса при помощи стикеров. Перед пломбировкой необходимо исследовать содержимое системного блока и убедиться в отсутствии посторонних устройств (типовое место подключения — материнская плата; подключение производится параллельно разъему клавиатуры).

5. Съем информации на основании анализа акустических и электромагнитных излучений

Уловить электромагнитное излучение клавиатуры на расстоянии весьма сложно (хотя теоретически и возможно), но уловить акустические шумы — на порядок проще. Даже при разговоре по телефону иногда можно отчетливо услышать, как собеседник вводит информацию на клавиатуре. Исследования специалистов в области безопасности показывают, что каждая клавиша при нажатии производит специфический звук, позволяющий идентифицировать нажимаемые клавиши. Наиболее известная работа в этом направлении проведена учеными Калифорнийского университета в Беркли (подробнее см. http://zdnet.ru/?ID=498415), которые пришли к выводу, что по обычной звукозаписи можно распознавать от 60 до 96% вводимых символов. Без применения специализированных программ для анализа можно достаточно просто установить количество символов в набираемом пароле и наличие повторяющихся символов.

Методика противодействия: основной способ защиты от утечки информации путем анализа акустических сигналов — постоянный и планомерный инструктаж персонала.

Клавиатурный шпион на базе драйвера

Данный метод еще более эффективен, чем описанные выше. Возможны как минимум два варианта реализации этого метода — написание и установка в систему своего драйвера клавиатуры вместо штатного или установка драйвера-фильтра. Применение драйвера-фильтра, на наш взгляд, является наиболее корректной методикой.

Драйвер-фильтр

Работа кейлоггеров данного типа основана на установке драйвера, подключаемого к драйверу клавиатуры в качестве фильтра. Пример реализации фильтра клавиатуры приведен в DDK, и данный шпион является одним из самых простых в плане как реализации, так и обнаружения.

Клавиатурный шпион этого типа может быть построен по одной из двух схем:

драйвер-фильтр в сочетании с управляющим приложением, которое выполняет установку, загрузку и настройку драйвера. Драйвер передает информацию о нажимаемых клавишах управляющему приложению, которое производит обработку и протоколирование полученных данных;

полностью автономный драйвер самостоятельно ведет запись событий. В данном случае требуется только произвести первичную установку драйвера в систему, после чего установившее драйвер приложение может самоуничтожиться. Возможно решение и без приложения-инсталлятора — в этом случае драйвер устанавливается при помощи INF-файла.

В момент загрузки драйвер должен подключиться к стеку клавиатурного драйвера посредством функций IoCreateDevice и IoAttachDevice. В большинстве известных реализаций фильтр подключается к стеку устройства «\\Device\\KeyboardClass0», являющегося драйвером класса и реализующего общую функциональность для клавиатур различных типов (рис. 6).

Рис. 6. Общая функциональность для клавиатур различных типов.

Для клавиатурного шпиона будут представлять интерес только прерывания типа IRP_MJ_READ, поскольку на основе их анализа можно получить коды клавиш. Источником этих IRP-запросов является процесс csrss.exe, а точнее — принадлежащий этому процессу поток необработанного ввода RawInputThread. Посылаемое этим потоком прерывание сначала попадает к драйверу-фильтру шпиона (шаг 1), который устанавливает свой обработчик завершения при помощи функции IoSetCompletionRoutine и передает IRP драйверу Kbdclass (шаг 2). Тот, в свою очередь, помечает IRP как ожидающий завершения и ставит в очередь. При возникновении клавиатурных событий Kbdclass извлекает из очереди ожидающий завершения IRP, вносит в его буфер информацию о нажатых клавишах и завершает IRP. А поскольку в IRP установлен адрес обработчика завершения, то будет произведен вызов этого обработчика (шаг 3). Обработчик может проанализировать содержимое буфера и передать содержащуюся там информацию системе протоколирования (шаг 4). Далее IRP возвращается в поток RawInputThread, а затем весь процесс повторяется. Естественно, что наличие корректно написанного драйвера-фильтра никак не сказывается на работе приложений и обеспечивает глобальный перехват клавиатурного ввода.

Обнаружение описанного шпиона не представляет особой сложности, — для его поиска достаточно изучить стек клавиатурного драйвера на предмет наличия неопознанных драйверов-фильтров.

Подмена драйвера клавиатуры

Данный метод в действительности основан на подмене драйвера Kbdclass или одного из низкоуровневых драйверов клавиатуры драйвером собственной разработки. Сложность реализации указанного метода состоит в том, что заранее неизвестен тип применяемой пользователем клавиатуры, а потому подмену драйвера сравнительно просто обнаружить. Вследствие этого подобный метод практически не встречается.

Клавиатурный шпион на базе руткит-технологии в UserMode

Принцип действия такого клавиатурного шпиона основан на перехвате ряда функций USER32.DLL для мониторинга их вызовов. Данные вредоносные программы пока не получили особого распространения, но это только вопрос времени. Опасность применения руткит-технологии в клавиатурном шпионе объясняется тем, что, во-первых, многие антикейлоггеры не рассчитаны на поиск шпионов такого типа и не способны им противодействовать, а во-вторых, антируткиты часто не проверяют перехваты функций библиотеки user32.dll.

Принцип работы шпиона достаточно прост: при помощи любой из известных руткит-технологий производится перехват одной или нескольких функций, позволяющих получить контроль над вводимой с клавиатуры информацией. Самым простым является перехват функций GetMessage и PeekMessage (рис. 7).

Рис. 7. Перехват функций GetMessage и PeekMessage.

Работа шпиона организована следующим образом. Приложение вызывает функцию PeekMessage для того, чтобы узнать, есть ли в очереди сообщения указанного типа. Этот вызов перехватывается по руткит-принципу (методика в данном случае не имеет значения). Затем перехватчик вызывает реальную функцию PeekMessage из user32.dll и анализирует возвращаемые результаты. Если функция возвращает true, это означает, что сообщение было в очереди и что оно извлечено в тот буфер, указатель на который передается в качестве первого параметра функции. В этом случае перехватчик проверяет сообщения в буфере на предмет обнаружения сообщений типа WM_KEYDOWN (нажатие клавиши), WM_KEYUP (отпускание клавиши), WM_CHAR (посылается окну после обработки WM_KEYDOWN при помощи TranslateMessage). При выявлении подобного сообщения можно узнать код нажимаемой клавиши и передать его системе протоколирования и анализа (шаг 4). Далее управление возвращается приложению (шаг 5), которое не знает о наличии перехватчика.

Подобный клавиатурный шпион очень опасен, так как:

он не обнаруживается стандартными методиками поиска клавиатурных шпионов;

возможно внедрение перехватчика по определенным условиям, в результате чего он внедряется не во все GUI-процессы, а в строго определенные (например, в процессы браузера или в приложение типа WebMoney);

против него бесполезны экранные клавиатуры и прочие средства борьбы с клавиатурными шпионами;

кроме перехвата функций PeekMessage и GetMessage, могут быть перехвачены функции копирования информации при работе с буфером обмена (OpenClipboard, CloseClipboard, GetClipboardData, SetClipboardData), опроса состояния клавиатуры (GetKeyState, GetAsyncKeyState, GetKeyboardState) и другие функции user32.dll, что усиливает опасность шпиона, а перехват функций типа CreateWindow позволяет отслеживать создание окон.

Клавиатурный шпион на базе руткит-технологии в KernelMode

Принцип действия шпиона данного типа аналогичен UserMode, но в данном случае производится перехват одной или нескольких функций win32k.sys. Как и в случае с UserMode, наибольший интерес для перехватчика представляет функция PeekMessage и ее аналоги, поскольку это позволяет производить мониторинг и модификацию абсолютно всех получаемых программой сообщений без установки ловушки или фильтра.

На рис. 8 перехватчик показан условно, поскольку для его установки существуют разные методики, в частности:

перехват SYSCALL и INT 2E;

перехват функции с подменой адреса в соответствующей ячейке таблицы KeServiceDescriptorTableShadow. Единственной сложностью для создателя подобного шпиона является поиск этой таблицы, которая не экспортируется ядром и не документирована. Однако известны пути преодоления этой проблемы, а средства для этого можно найти в Интернете;

модификация машинного кода win32k.sys. Для этого тоже необходим поиск таблицы KeServiceDescriptorTableShadow. При этом возможна интересная ситуация: функция может быть уже перехвачена (например, антикейлоггером), и тогда будет произведена модификация машинного кода перехватчика, что еще больше усложнит обнаружение шпиона.

Рис. 8. Перехватчик.

Алгоритм работы шпиона весьма прост. Приложение вызывает функцию библиотеки user32.dll (шаг 1; в качестве примера рассмотрим вызов PeekMessage). Функция PeekMessage в user32.dll по своей сути является переходником, а в конечном счете при помощи SYSCALL в Windows XP или INT 2E в Windows NT и Windows 2000 будет произведен вызов функции ядра (шаг 2). Этот вызов будет перехвачен шпионом (местоположение перехватчика зависит от методики перехвата). Перехватчик, в свою очередь, вызовет реальную функцию (шаг 3) и проанализирует возвращенные ей результаты. В случае успешного извлечения из очереди сообщения нужного шпиону типа он произведет его анализ и за-протоколирует результаты (шаг 4). Работа шпиона абсолютно незаметна для всех приложений, и обнаружить его можно только специальными программами, производящими поиск перехватов и модификации машинного кода модулей ядра.