16+
ComputerPrice
НА ГЛАВНУЮ СТАТЬИ НОВОСТИ О НАС




Яндекс цитирования


Версия для печати

Модуль поиска не установлен.

Оптимизируй это! Часть II

17.07.2008

Андрей Кочетов

В Windows есть два метода автозапуска программ. Если программа запускается как приложение, ее старт прописан в ключах реестра «HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run», «HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run» и может редактироваться программой «msconfig.exe», закладка «Автозагрузка».

Часть программ стартуют как службы, и тип их запуска можно изменить в консоли управления: «Пуск/Панель управления/Администрирование/Службы».

 

Антивирус

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

Мы остановили свой выбор на антивирусе DrWeb (www.drweb.com). Как сказано в первой части, для наших целей как нельзя лучше подходит его управляемость и модульность.

Вопросы собственно настройки DrWeb – файлового и почтового монитора, а также сканера – выходят за рамки этой статьи, но если будет на то воля читателей, автор впоследствии поделится своими соображениями на этот счет.

Начинаем инсталляцию. От «умолчального» варианта лучше сразу отказаться (см. рис. 1). При выборе устанавливаемых компонентов можно отказаться от сканера для DOS и обязательно – от планировщика DrWeb (рис. 2). У нас есть планировщик покруче… и не такой прожорливый.

После инсталляции и перезагрузки в диспетчере задач Windows вы сможете увидеть три новых процесса: «spiderml.exe», «spidernt.exe» и «spiderui.exe».

Начинаем борьбу с буржуйскими излишествами. Для начала удалим приложения из «Автозагрузки». Запустите программу «msconfig.exe» и на одноименной закладке снимите галки напротив задач «spiderml» и «spiderui» – см. рис. 3. Таким образом, мы избавимся от автоматической загрузки, соответственно, почтового монитора «Spider Mail» и интерфейса к файловому монитору «Spider NT» – «Spider User Interface».

Теперь разберемся с самим файловым монитором. Это служба «SpIDer Guard for Windows». Тип ее запуска изменим на ручной – см. рис. 4 – для того чтобы изначально, после загрузки Windows, служба не была запущена.

Но все не так просто, как хотелось бы. В DrWeb, начиная с версии 4.44, разработчики добавили еще одну службу, связанную с уже упомянутой. Эта служба и опасна и тру… то есть, невидима в списке процессов и ее нельзя остановить вручную. Именно эта служба осуществляет собственно файловый мониторинг на предмет поимки вирусов; имя ей – «SpIDer Guard File System Monitor».

А вышеупомянутая «SpIDer Guard for Windows», которая в предыдущих версиях DrWeb и занималась этой работой, теперь является, упрощенно говоря, посредником. Даже если ее остановить, файловый мониторинг не прекратит работу и нагрузка на систему не снизится.

Чтобы получить полный контроль над антивирусным монитором, зайдя в папку с установленной программой («C:\Program Files\DrWeb»), надо выполнить несколько несложных действий:

  •                     spidernt.exe /Remove
  •                     Перезагрузиться
  •                     spidernt.exe /install:manual
  •                     spidernt.exe /config:manual

Для запуска файлового монитора вручную следует запустить службу «SpIDer Guard File System Monitor», а затем службу «SpIDer Guard for Windows», затем, при необходимости, интерфейс управления – программу spiderui.exe. Останавливать монитор следует в обратном порядке.

Два слова об интерфейсе к файловому монитору – модуле «spiderui.exe». Это тот самый паучок , который поселяется в системном трее. Параметры файлового монитора настраиваются пунктами контекстного меню этого паучка. Антивирусный монитор – штука довольно консервативная и, будучи единожды настроена, в интерфейсе, в общем-то, больше не нуждается, разве что для редких уточняющих настроек. То есть, мы можем сэкономить несколько мегабайт в оперативной памяти, не запуская «spiderui.exe» после того как все настройки монитора выполнены.

С другой стороны, этот паучок является индикатором того, что антивирус запущен и все в порядке. Так что, запускать его или нет – дело вкуса.

Теперь, сделав DrWeb послушным, соорудим себе «манипуляторы», с помощью которых мы и будем управлять антивирусом. Это будут задания для планировщика nnCron (www.nncron.ru). Их можно добавлять из интерфейса nnCron (пункт контекстного меню «Добавить задачу»), но так получится создать только простейшую задачу. Поэтому будем добавлять новые задания прямым редактированием файла, содержащего скрипты для планировщика, – «C:\Program Files\nnCron\nncron.tab».

Это простой текстовый файл, в котором используется язык программирования Форт (Forth). Не пугайтесь, вам не придется заниматься ни программированием, ни, тем более, Фортом. Все задания для планировщика, приведенные в статье, вполне читаемы, а править в них вам почти ничего не придется, разве что закомментировать строчку-другую.

Итак, приступаем. Первая группа заданий (см. листинг 1) предназначена для запуска и остановки файлового монитора.

Задания «spiderui_start» и «spiderui_stop» предназначены для запуска и остановки пользовательского интерфейса к файловому монитору «Spider User Interface» .

Задание «spidernt_start», как уже понял проницательный читатель, запускает файловый монитор. Предварительно nnCron считает из настроек DrWeb («C:\Program Files\DrWeb\drweb32.ini») имя лог-файла, содержащего результаты предыдущего мониторинга, и удалит его – во исполнение концепции «сборки мусора»: компьютер должен содержать себя в порядке.

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

Закомментировать строку можно, добавив в ее начало обратный слэш и пробел; строка будет выглядеть так:

«\ …что угодно…».

Но нет худа без добра: в этом задании приведен пример чтения данных из INI-файла. Ничего не понятно, но работает!

Файловый монитор запускается посредством старта двух уже описанных служб. Последней строкой («spiderui_start RUN») запускается интерфейсный модуль . Если вы решите не запускать его, как вещь необязательную, эту строку в задании можно закомментировать: «\ spiderui_start RUN».

Задание «spidernt_stop» аккуратно остановит и выгрузит из памяти файловый монитор.

Последнее задание – «spiderui» – для ручного запуска и остановки «Spider User Interface» . Эта задача запустит (если интерфейс еще не запущен) или выгрузит из памяти компьютера «Spider User Interface» по нажатии «горячей клавиши» «Ctrl-Alt-U».

 

 

<%

\ Буква флешки, содержащей файл eboostr.dat

fVAR eBoostr_Letter

S" B" TO eBoostr_Letter

 

fVAR S_TMP

%>

 

 #( spiderui_start

NoLog

NoDel

AsLoggedUser

LoadProfile

Time: 41 16 18 10 * 2007

Action:

SWHide   NormalPriority

 

 PROC-EXIST: "spiderui.exe" NOT

 IF

    START-APP: "C:\Program Files\DrWeb\spiderui.exe" /Agent

 THEN

)#

 

#( spiderui_stop

NoLog

NoDel

AsLoggedUser

LoadProfile

Time: 41 16 18 10 * 2007

Action:

SWHide   NormalPriority

 

 PROC-EXIST: "spiderui.exe"

 IF

    KILL: "spiderui.exe"

    PAUSE: 100

    TRAY-REFRESH

 THEN

)#

 

#( spidernt_start

NoLog

NoDel

AsLoggedUser

LoadProfile

Time: 41 16 18 10 * 2007

Action:

SWHide   RealtimePriority

 

 PROC-EXIST: "spidernt.exe" NOT

 IF

    \ ++++++++ Удаление лог-файла ++++++++

    S" C:\Program Files\DrWeb\drweb32.ini" INI-FILENAME

    S" SpIDerGuardNT" INI-SECTION

    S" LogFileName" INI-GET-VALUE EVAL-SUBST TO S_TMP

 

    FILE-EXIST: "%S_TMP%"

    IF

      FILE-DELETE: "%S_TMP%"

    THEN

    \ -------- Удаление лог-файла --------

 

 

    START-APPW: net start "SpIDer Guard File System Monitor"

    START-APP: net start "SpIDer Guard for Windows"

   

    spiderui_start RUN

 THEN

)#

 

#( spidernt_stop

NoLog

NoDel

AsLoggedUser

LoadProfile

Time: 41 16 18 10 * 2007

Action:

SWHide   NormalPriority

 

 PROC-EXIST: "spidernt.exe"

 IF

    START-APPW: net stop "SpIDer Guard for Windows"

    START-APP: net stop "SpIDer Guard File System Monitor"

 THEN

 

 spiderui_stop RUN

)#

 

#( spiderui

NoLog

AsLoggedUser

LoadProfile

WatchHotKey: "^@u"

Action:

SWHide   NormalPriority

 

 PROC-EXIST: "spiderui.exe"

 IF

    spiderui_stop RUN

 ELSE

    spiderui_start RUN

 THEN

)#

 

Листинг 1

 

Ну вот. «Манипуляторы» мы построили. Каждую из этих задач можно запустить на выполнение вручную – пунктом меню «Выполнить задачу» nnCron.

Но ведь это полуфабрикаты. Не для того мы столько вытерпели, чтобы запускать все это «ручками». «Манипуляторы» будут мертвы без управляющих «нервных импульсов». Вот теперь мы подошли к использованию одного из преимуществ nnCron’а. Как вы помните, это событийно-ориентированный планировщик, который может реагировать на широкий ассортимент системных событий.

Начнем с события «Вставка диска». Понятно, что в момент включения внешнего носителя возникает потенциальная угроза безопасности. Есть вероятность, что любая флешка, которую вы подключаете к компьютеру, содержит вирусы. Наша задача – не дать им перекочевать в компьютер. Мы научим компьютер запускать файловый монитор в этот момент и останавливать его после извлечения диска или флешки.

На первый взгляд, ничего сложного нет: nnCron умеет реагировать на подобные события. На самом деле все не так просто. Во-первых, я бы не включал монитор при вставке CD/DVD-диска: сейчас почти все диски – либо лицензионные, либо «слизанные» с них, получить сюрприз с таким диском маловероятно. Поэтому будет полезно различать тип вставленного диска (CD/DVD или флешка) и в первом случае антивирусный монитор не запускать. Вопрос, конечно, спорный, и все несогласные могут запускать монитор в любом случае – для этого потребуется лишь чуть-чуть подправить приведенный скрипт.

Гораздо хуже другое. Мы создадим два задания для планировщика: запуск монитора при вставке диска и его остановку при извлечении диска. И все будет работать отлично с CD/DVD-диском или вашей родной флешкой. До тех самых пор, пока приятель не принесет флешку, которая до этого еще ни разу не подсоединялась к вашему компьютеру.

Все, наверное, помнят, что в таких случаях Windows устанавливает драйвер вновь «увиденного» устройства. И самое плохое в этом то, что в процессе этой «установки» возникают два системных события: «вставка диска в USB-порт» и «извлечение диска». И возникают эти события одно за другим, с интервалом в несколько секунд.

Наш компьютер запустит антивирус и почти сразу остановит его (ведь ему пришло уведомление о том, что диск извлечен). И это в тот самый момент, когда антивирус необходим, как воздух, – во время работы с незнакомой флешкой! Смахивает на предательство лучшего друга. Чтобы друг не «оказался вдруг», а остался в прежнем качестве, надо просто не оставить ему шансов на предательство. Займемся этим.

Для начала создадим задачу «OnFlashEjectAny», которая остановит файловый монитор при извлечении диска, если она, эта задача, активна.

Затем добавим задачу «EnableSpiderStop», которая по умолчанию не активна; но если ее активизировать, через полминуты после этого она позволит выполняться задаче «OnFlashEjectAny», а сама снова «уснет» – до следующего явного вызова.

И, наконец, вот оно, встречайте! Задание «OnDisk_insert» срабатывает при вставке CD/DVD-диска в дисковод или при включении флешки/переносного диска в USB-порт.

Как вы можете видеть, вначале nnCron определяет тип диска, и если это CD/DVD, ничего не делает. Если вы хотите и в этом случае запускать антивирусный монитор, просто раскомментируйте строку «\ spidernt_start RUN».

Если же вставлена флешка, компьютер сделает следующее: запретит на 30 секунд обработку события «извлечение диска» (задачу «OnFlashEjectAny»), запустит антивирусный монитор, а затем запустит «отменялку» запрета.

При этом все сработает именно так, как мы и ожидали от интеллектуальной системы: при вставке флешки, даже незнакомой, стартует антивирус, который не будет остановлен возникшим «паразитным» событием «извлечение диска». А при реальном извлечении флешки уже разрешенная обработка этого события тихо-мирно остановит и выгрузит из памяти файловый монитор.

 

#( OnFlashEjectAny

NoLog

AsLoggedUser

WatchDriveRemove: "*"

Action:

SWHide   NormalPriority

 

 \ Если выполнение задачи НЕ запрещено, остановить SpiderNT

 CF-ACTIVE?

 IF

    HOST-EXIST: "rbc.ru" NOT

    IF

      spidernt_stop RUN

    THEN

 THEN

)#

 

#( EnableSpiderStop

NoActive

NoLog

AsLoggedUser

LoadProfile

VARIABLE SEM_SPIDER

Action:

ShowNormal   NormalPriority

 

 \ Если выполнение задачи НЕ запрещено

 CF-ACTIVE?

 IF

    PAUSE: 30000

 

    \ Тело цикла выполняется каждые 30 секунд

    2 0 DO

      SEM_SPIDER GET

        \ Если выполнение "OnFlashEjectAny" ЗАПРЕЩЕНО...

        OnFlashEjectAny @ CRON-FLAGS @ CF-ACTIVE AND?

        IF

        ELSE

          \ ...разрешить его

          OnFlashEjectAny @ CF-ACTIVE SET-CRON-FLAG

        THEN

       

        PAUSE: 30000

      SEM_SPIDER RELEASE

    LOOP

   

    \ Запретить выполнение самой себя

    EnableSpiderStop @ CF-ACTIVE CLR-CRON-FLAG

 THEN

)#

 

#( OnDisk_insert

WINAPI: GetDriveTypeA Kernel32.dll

0 VALUE DiskType

NoLog

AsLoggedUser

LoadProfile

WatchDriveInsert: "*"

Action:

SWHide   NormalPriority

 

 \ Найти тип новоявленного диска

 S" %DRIVE-LETTER%:\" EVAL-SUBST DROP GetDriveTypeA TO DiskType

 

 DiskType

 5 =

 IF \ Если это CD/DVD

    \ Включить SpiderNT

    \ spidernt_start RUN

 ELSE \ Если это USB

    \ Временно запретить выполнение задачи "OnFlashEjectAny"

    OnFlashEjectAny @ CF-ACTIVE CLR-CRON-FLAG

   

    \ Включить SpiderNT

    spidernt_start RUN

   

    \ Включить "отменялку" запрета выполнения задачи "OnFlashEjectAny"

    EnableSpiderStop @ CF-ACTIVE SET-CRON-FLAG

  THEN

)#

Листинг 2.

 

Теперь рассмотрим еще одну ситуацию, во время которой возникает потребность в защите средствами антивируса. Речь пойдет о работе с почтой. Нам надо сделать так, чтобы при запуске почтового клиента запускался почтовый монитор, который анализирует POP3-трафик и не пропускает заразу. А при закрытии почтовика и почтовому монитору делать нечего, пусть вываливается из памяти, все ресурсы – пользователю!

Как всегда, сначала создадим задания для собственно запуска и остановки почтового монитора – «spiderml_start» и «spiderml_stop». Ничего замечательного в них нет, можно только закомментировать операторы в «spiderml_start», удаляющие лог-файл уже этого приложения.

В приведенном листинге 3 запуск и остановка «Spider Mail» настроены на событие появления и закрытия почтового клиента MS Outlook. Простейшим редактированием эти задания можно научить реагировать на любой другой почтовый клиент.

Тело задания «OutlookOn» выполняется только в том случае, если почтовик запускается при наличии соединения с Интернетом («виден» сайт www.mail.ru); при отсутствии соединения какой смысл запускать монитор, анализирующий POP3-трафик?

Итак, компьютер «подождет», пока Outlook полностью запустится, и затем запустит «Spider Mail». Это сделано из соображений эффективности: действительно, зачем встревать в процесс запуска «тяжелого» приложения и отвлекать дисковый ресурс (движение головок диска) на запуск еще чего-то? Это не увеличит суммарную скорость запуска. Мы подождем, пока Outlook полностью запустится, а затем спокойно включим почтовый монитор.

Если у вас многоядерный процессор, можно раскомментировать строку в начале скрипта: «\ S" OUTLOOK.EXE" 2 AFFINITY». В этом случае Outlook будет работать исключительно на втором ядре, оставив ресурсы первого для чего-нибудь более важного.

А задание «OutlookOff», как явствует из названия, при закрытии почтовика выгружает из памяти почтовый монитор и удаляет временные файлы, созданные почтовым клиентом.

В этой статье мы подробно рассмотрели решение некоторых вопросов, реализованных в русле концепции, обрисованной в первой части. В следующих номерах будет рассказ о брандмауэре, а также об обработке событий «подключение к Интернету» и «отключение от Интернета».

 

#( spiderml_start

NoLog

NoDel

AsLoggedUser

LoadProfile

Time: 41 16 18 10 * 2007

Action:

SWHide   NormalPriority

 

 PROC-EXIST: "spiderml.exe" NOT

 IF

    \ ++++++++ Удаление лог-файла ++++++++

    S" C:\Program Files\DrWeb\drweb32.ini" INI-FILENAME

    S" SpIDerMailHome" INI-SECTION

    S" LogFileName" INI-GET-VALUE EVAL-SUBST TO S_TMP

 

    FILE-EXIST: "%S_TMP%"

    IF

      FILE-DELETE: "%S_TMP%"

    THEN

    \ -------- Удаление лог-файла --------

 

 

    START-APP: "C:\Program Files\DrWeb\spiderml.exe"

 THEN

)#

 

#( spiderml_stop

NoLog

NoDel

AsLoggedUser

LoadProfile

Time: 41 16 18 10 * 2007

Action:

SWHide   NormalPriority

 

 PROC-EXIST: "spiderml.exe"

 IF

    KILL: "spiderml.exe"

    PAUSE: 100

    TRAY-REFRESH

 THEN

)#

 

#( OutlookOn

NoLog

AsLoggedUser

LoadProfile

WatchProc: "OUTLOOK.EXE"

Action:

 

 \ S" OUTLOOK.EXE" 2 AFFINITY

 

 HOST-EXIST: "mail.ru"

 IF

    \ Дождаться окончания загрузки OUTLOOK

    PAUSE: 500

   

    FOR-PROCS: "OUTLOOK.EXE"

      FOUND-PID PROC-WAIT-IDLE

    ;FOR-PROCS

   

    spiderml_start RUN

 THEN

)#

 

#( OutlookOff

NoLog

AsLoggedUser

LoadProfile

WatchProcStop: "OUTLOOK.EXE"

Action:

 

 \ Остановить почтовый антивирус-монитор

 spiderml_stop RUN

 

 \ Удалить временные файлы

 FILE-DELETE: "%TEMP%\ExchangePerflog*.dat"

 FILE-DELETE: "%TEMP%\Perflib_Perfdata*.dat"

)#

Листинг 3



статьи
статьи
 / 
новости
новости
 / 
контакты
контакты