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-служба работает по определенному параметру, нужно добавить счетчик по этому параметру, в результате чего программа выстроит график производительности службы. На этом пример заканчивается, однако есть еще масса вещей, которые антивирусные компании и хакеры просто так не оставят :). |