Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #60, НОЯБРЬ 2005 г.

Виртуальный шпион

Tony (porco@argentina.com)

Спецвыпуск: Хакер, номер #060, стр. 060-058-2


Техника создания подобной DLL для автозагрузки твоего шпиона, между прочим, подробно описана в MSDN. Thanks fellows :). Именно эта техника используется в примере SpyBase, который ты можешь найти на нашем диске. Впрочем, это не единственный способ автозапуска. Стандартную программу, запускаемую при входе в систему, можно подменить на свой шпион, а из шпиона запускать замененную программу (лучше переименовать ее, добавив вместо латинского символа такой же, но кириллический, чтобы пользователь не увидел изменений в списке задач).

Игра в прятки

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

Более сложный метод - следить за запущенными программами и в случае появления regedit'а удалить ключ для автозапуска, который восстанавливается уже после завершения работы редактора реестра. Реализация функции, которая возвращает нам логический результат проверки (запущен тот или иной процесс), показана на листинге "Поиск процесса по имени".

Этот метод все равно не спасет нас от параноидального сканера. Необходимо более кардинальное решение, и оно, естественно, есть. Суть этой техники заключается в перехвате вызовов системных функций, которые позволяют итерироваться и получать информацию: о файлах, хранящихся в файловой системе, запущенных процессах, сервисах, ключах реестра, открытых портах и объектах ядра. Например, для сокрытия процесса от диспетчера задач мы должны перехватить вызов метода NtQuerySystemInformation (он используется диспетчером задач при получении информации о запущенных потоках), вызвать оригинальный метод и изменить его выходную информацию таким образом, чтобы был проигнорирован наш процесс. Для более подробной информации - ссылки, указанные на WWW-врезках. В программе SpyHookApp, прилагаемой к статье, используется готовая DLL NtHide, которая прячет твой процесс от пользователя (взять ее можно тут: http://dissolution.nm.ru/pr/nthide_dll.htm). Единственный минус программы заключается в том, что метод, который она экспортирует, принимает в качестве параметра дескриптор окна HWND. Мне пришлось немного извратиться, создав скрытое окно (без флажка Visible), после чего я получил желаемый HWND и благополучно скормил его NtHide (см. листинг "Игра в прятки").

Назад на стр. 060-058-1  Содержание  Вперед на стр. 060-058-3