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

20 вистов и пуля

ДРОЗДОВ АНДРЕЙ AKA SULVERUS

Спецвыпуск: Хакер, номер #072, стр. 072-038-4


Ручная настройка антивирусной службы

#region Component Designer generated code //подправленный нами)

private System.ServiceProcess.ServiceProcessInstaller ProcessInstaller;

private System.ServiceProcess.ServiceInstaller ServiceInstaller; //создаем инсталлеры

private void InitializeComponent()

{

this.ProcessInstaller = new System.ServiceProcess.ServiceProcessInstaller();

this.ServiceInstaller = new System.ServiceProcess.ServiceInstaller();

this.ProcessInstaller.Account = System.ServiceProcess.ServiceAccount.LocalSystem;

this.ProcessInstaller.Password = null; //настраиваем параметры

this.ProcessInstaller.Username = "System";

this.ServiceInstaller.ServiceName = "HaService";

this.Installers.AddRange(new System.Configuration.Install.Installer[] {this.ProcessInstaller, this.ServiceInstaller}); //добавляем параметры

}

#endregion

Код довольно понятен: в начале создаются два инсталлера, далее настраиваются их параметры, после этого они заносятся в общие параметры инсталлера. Кстати, у системы нет пароля, поэтому мы присвоили ему значение null. Естественно, никто не сможет авторизоваться под пользователем System, поскольку это не уровень пользователя, а нулевой уровень. Также нужно включить в службу возможность протоколирования ошибок, используя класс EventLog пространства имен System.Diagnostics. Основным методом этого класса является метод WriteEntry(), отправляющий данные об ошибках или успехах в журнал служб. Для работы с логами мы должны будем включить в код службы следующее:

Протоколирование ошибок

protected override void OnStart(string[] args)

{

try

{

//тот же код

EventLog.WriteEntry("Process Start OK", EventLogEntryType.SuccessAudit);

}

catch

{

EventLog.WriteEntry("error", EventLogEntryType.Error);

}

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

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

installutil HaServise.exe

Далее, если ты все скомпилировал правильно - появится надпись

The Commit phase completed successfully.

The transacted install has completed.

Теперь, если зайти в Windows Services Manager в панели управления, можно увидеть нашу службу под именем HaService. По умолчанию инсталлер прописывает в автозагрузку с ключом «manual», то есть автоматически она запускаться не будет, однако это можно исправить одной строкой кода:

this.ServiceInstaller.StartType = ServiceStartMode.Automatic;

После этого служба будет запускаться автоматически при входе в систему. Для последующего тестирования и контроля производительности службы можно использовать утилиту perfmon, позволяющую полностью отслеживать ее работу, записи в журнал, ошибки и так далее. Для того чтобы посмотреть, как .NET-служба работает по определенному параметру, нужно добавить счетчик по этому параметру, в результате чего программа выстроит график производительности службы. На этом пример заканчивается, однако есть еще масса вещей, которые антивирусные компании и хакеры просто так не оставят :).

Назад на стр. 072-038-3  Содержание  Вперед на стр. 072-038-5