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

Видео-шпион

gh05t (gh05t@yandex.ru)

Хакер, номер #076, стр. 076-108-5


Открыв SCM, мы должны создать в нем наш сервис визуального наблюдения. Делается это функцией CreateService. Параметров у нее достаточно, опишу лишь ключевые:

hSCManager : SC_HANDLE – хэндл SCM’а, который получили выше;

lpServiceName : string - имя сервиса;

lpDisplayName : string - видимое пользователю название сервиса;

dwDesiredAccess : cardinal - запросы, на которые будет отвечать сервис. Я использовал SERVICE_ALL_ACCESS, но если ты совсем никого не любишь, то можешь оставить только SERVICE_INTERROGATE;

dwServiceType : cardinal - тип сервиса. Поскольку наш шпион – это интерактивный сервис, то есть ему требуется доступ к рабочему столу, к обычному значению типа сервиса SERVICE_WIN32_OWN_PROCESS мы должны дописать «or SERVICE_INTERACTIVE_PROCESS»;

lpBinaryPathName : string - путь до исполняемого файла сервиса.

Остальные параметры функции нас совершенно не касаются, поэтому мы заполняем их nil’ами.

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

По окончанию работы с сервисом (но не по окончанию работы самого сервиса) хэндл придется закрыть функцией CloseServiceHandle.

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

Вместе веселее

Хороший получился шпион, только сырой немного. У него есть масса мелких недостатков. Но если их устранить, то хоть на прилавок клади и продавай. К примеру, из-за того, что мы использовали в проекте стандартные компоненты Delphi, экзешник сервиса страшно разросся.

Плюс, все письма будут с одинаковыми Subject’ами – разобраться, какой скрин когда снят будет сложновато. И т.п. и т.д. В общем, нет предела совершенству. Если тебе понравилась идея видео-шпиона, и ты хочешь ее развивать – пиши. Возможно, вместе у нас получиться что-нибудь потрясающее.

TService

В Delphi невероятное количество разных классов и компонентов. В том числе есть компонент для быстрой разработки сервисов. О нем уже писал Horrific в Ха №6.2004. Использование его наверняка сильно упростило бы работу над нашим видео-шпионом, но не дало бы такого полного представления о работе сервисной системы в Windows. За счет того, что мы написали сервис в Delphi на чистом API, у нас теперь не должно возникнуть никаких трудностей при переписывании его на Си или ассемблере.

CD

На диске ты найдешь проект, описанного в статье сервиса, а также установщик к нему.

WWW

Если захочешь заняться лишним весом шпиона, то тебе наверняка пригодятся эти линки: http://www.team-x.ru/show.php?id=coding/96 - статья, описывающая процесс отправки письма через MAPI, http://www.codenet.ru/progr/alg/jpeg_00.php - описание алгоритма сжатия JPEG.

INFO

В случае если пользователь не залогинен в систему функция GetDesktopWindow вернет 0, и скриншот придет пустой.

Назад на стр. 076-108-4  Содержание