Обратная связь:

 

 

Оптимизируй это!

или как нам обустроить компьютер

Главная Часть I Часть II Часть III Часть IV Часть V

 

Часть II

Вводная

В 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 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 считает из настроек DrWebC:\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

 

Рис. 1

Рис. 2

 

Рис. 3

 

Рис. 4

 

Всё готовенькое

 

Чтобы вдохновить читателя на подвиги, сообщу, что в природе существует собранный мною дистрибутив nnCron, обладающий многими достоинствами:

·         nnCron устанавливается со всеми необходимыми плагинами и параметрами, его не придётся настраивать вручную

·         в состав дистрибутива уже входят все скрипты, описанные в данном цикле статей

·         устанавливается уже зарегистрированным. Это не наносит ущерба автору – как уже упоминалось, для жителей б.СССР это удовольствие бесплатное

·         также дистрибутив содержит утилиты Wget и Pkunzip, которые будут инсталлированы вместе с nnCron

·         дистрибутив выполняет некоторую оптимизацию Windows: создаёт папку для временных файлов с коротким именем «C:\TEMP»; отключает общиe ресурсы «Admin$», «С$», и т.д.; отключает встроенный отладчик «Dr.Watson»; запрещает выгружать ядро системы в файл свопинга, чем отсекает потенциальные «тормоза», просит Windows выгружать из памяти неиспользуемые приложениями библиотеки: это гораздо практичнее использования всяких левых «оптимизаторов оперативной памяти»

·         инсталлирует бесплатный дефрагментатор «JkDefrag», работающий в режиме экранной заставки

·         Наконец, размер этого дистрибутива поменьше «родного» - 854 Кб

 

Вся эта благодать стоит 1 000 рублей. Не имея целью навязать сей продукт, замечу, что дело это стоящее, сбережёт вам массу времени и нервов.

 

Готовенький DrWeb

 

Спешу порадовать совершенно замороченный народ. Вы можете бесплатно скачать специальную сборку антивируса Drweb (http://asksoft.net/Download/DrWeb_ask.exe), которая без лишних вопросов установит антивирус уже со всеми параметрами запуска и настройками, которые мы рассматривали в этой статье. После инсталляции следует скопировать ваш лицензионный ключ в папку «C:\Program Files\DrWeb».

Однако, должен предупредить, что такая конфигурация DrWeb сама по себе не имеет никакой ценности, т.к. по умолчанию отключено всё – и файловый, и почтовый мониторы.

Всё это хозяйство «наливается силой» только в тесной интеграции с nnCron, которому предписаны все задания, рассмотренные в данной статье.

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


Главная