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

Трепанация для почтовой мыши

Фленов Михаил

Xakep, номер #066, стр. 066-108-1


(www.vr-online.ru)

Пишем сервис, сканирующий адресную книгу The Bat!

Почему The Bat! считается самым безопасным почтовым клиентом? Дело в том, что он не поддерживает всякие VB скрипты, а формат его адресной книги засекречен. Если в Outlook любой вирус может получить доступ к адресбуку и разослать себя твоим друзьям, то в The Bat! это нереально. Вернее, кажется нереальным. Мы как IBM-совместимые люди вполне можем написать сервис, который вытащит все e-mail’ы и аккуратненько сложит их в txt-файл.

Надрез

Начнем с создания сервиса как такового. Есть два способа. Можно, конечно, слегка порукоблудить и написать его с помощью WinAPI, но зачем выдумывать пистолет, когда есть пулемет? Поэтому мы воспользуемся готовым классом TService от великой корпорации Borland.

Теперь запускаем Delphi и сразу закрываем созданный по умолчанию проект. Теперь выбирай File/New/Other (Для Delphi меньше 7 версии просто File/New) и в появившемся окне на закладке New ищи Service Application (см. рис.1). Кликай на нем. Можно считать, что первый надрез на теле почтовой мышки уже сделан ;).

Исследуем содержимое

Код главного модуля похож на все те, с которыми ты уже привык работать. Но изюминка спрятана под печенью (под печенью обычно прячется гонококковый перигепатит :) - прим. Dr), а именно - в объекте, от которого все происходит. Если стандартное приложение происходит от объекта TForm, то тут мы пляшем мазурку от TService.

Визуальная форма больше похожа на модуль данных (Data Module), и на ней можно размещать только невизуальные компоненты. Это и понятно, ведь сервис работает невидимо для пользователя.

А теперь давай посмотрим на самые вкусные свойства объекта TService, которые ты можешь увидеть в объектном инспекторе.

Паровоз летит вперед

AllowPause – разрешить пользователю возможность приостанавливать работу сервиса. Я злой, поэтому в своем недобром сервисе отключаю эту возможность.

AllowStop – позволять пользователю останавливать сервис. И снова моя злость заставляет убрать эту возможность.

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

Штрихи невидимости

DisplayName – отображаемое имя. Именно этот текст можно будет увидеть в оснастке сервисов в качестве имени. Для примера я указал «Сервис на Delphi», но в реальном зле я бы посоветовал подойти к выбору имени более тщательно. Как корабль назовешь, так он и потонет :).

Например, можно написать здесь «Служба безопасности NTFS», тогда ни у одного пользователя не поднимется рука остановить такое. Но и запускной файл в этом случае должен иметь достойное имя, а не просто Project1.exe ;).

Содержание  Вперед на стр. 066-108-2
<<< НАЗАД ||| ГЛАВНАЯ