Оптимизируй это! или как нам обустроить компьютер |
|
|
Часть 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». Это тот самый паучок С другой стороны, этот паучок является индикатором того, что антивирус запущен и всё в порядке. Так что, запускать его или нет – дело вкуса. Возвращаемся к нашим баранам. Теперь, сделав 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»)
запускается интерфейсный модуль Задание «spidernt_stop» аккуратно остановит и выгрузит из памяти файловый монитор.
Последнее задание - «spiderui» -
для ручного запуска и остановки «Spider
User
Interface»
<% \ Буква флешки, содержащей файл 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
Готовенький DrWeb
Спешу порадовать совершенно замороченный народ. Вы можете бесплатно скачать специальную сборку антивируса Drweb (http://asksoft.net/Download/DrWeb_ask.exe), которая без лишних вопросов установит антивирус уже со всеми параметрами запуска и настройками, которые мы рассматривали в этой статье. После инсталляции следует скопировать ваш лицензионный ключ в папку «C:\Program Files\DrWeb». Однако, должен предупредить, что такая конфигурация DrWeb сама по себе не имеет никакой ценности, т.к. по умолчанию отключено всё – и файловый, и почтовый мониторы. Всё это хозяйство «наливается силой» только в тесной интеграции с nnCron, которому предписаны все задания, рассмотренные в данной статье. Это как живая вода, не имеющая силы без мёртвой. Более того, ни первая, ни вторая не сработают без мудрого волхва, знающего, куда, сколько и какой водицы капнуть. |
|
|