Начальная страница

AVZ 5. Руководство пользователя
×

  • Начальная страница
  • Следующая

Антивирусная утилита AVZ 5

Руководство пользователя
2021
(c) z-oleg.com , 2021


1. Оглавление

2. Обшие сведения
2.1. О программе
2.2. Инсталляция и системные требования
2.3. Структура папок программы
2.4. Техническая поддержка
2.5. Назначение программы
3. Работа с программой
3.1. Главное окно программы
3.1.1. Вкладка 'Область поиска'
3.1.2. Вкладка "Типы файлов"
3.1.3. Вкладка 'Параметры поиска'
3.1.4. Группа 'Параметры лечения'
3.1.5. Протокол
3.2. Обновление баз
3.3. Отложенное удаление файла
3.4. Профили настроек
3.5. Профили локализации
4. Карантин
4.1. Карантин и папка Infected
4.2. Автокарантин
4.3. Добавление в карантин по списку
5. Встроенные средства поиска
5.1. Поиск данных в реестре
5.2. Поиск файлов на диске
5.3. Поиск Cookie по данным
6. Встроенные утилиты
6.1. Диспетчер процессов
6.2. Диспетчер служб и драйверов
6.3. Модули пространства ядра
6.4. Менеджер Winsock SPI (LSP, NSP, TSP)
6.5. Открытые порты TCP/UDP
6.6. Менеджер автозапуска
6.7. Менеджер расширений IE
6.8. Менеджер расширений проводника
6.9. Менеджер апплетов панели управления (CPL)
6.10. Менеджер расширений системы печати
6.11. Менеджер планировщика заданий (Task Scheduler)
6.12. Менеджер внедренных dll
6.13. Менеджер протоколов и обработчиков
6.14. Менеджер Active Setup
6.15. Менеджер файла Hosts
6.16. Общие ресурсы и сетевые сеансы
7. Функции анализа и восстановления
7.1. Исследование системы
7.2. Восстановление системы
7.3. Стандартные скрипты
7.4. Резервное копирование
7.5. Мастер поиска и устранения проблем
8. Подсистема AVZGuard
8.1. О технологии AVZGuard
8.2. Управление системой
8.3. AVZGuard и антируткит
9. Подсистема AVZPM
9.1. О технологии AVZ PM
9.2. Управление системой
10. Подсистема Boot Cleaner
10.1. О технологии Boot Cleaner
11. Ревизор
11.1. О технологии ревизора
11.2. Создание базы ревизора
11.3. Сравнение
12. Категории вредоносных программ
12.1. Вирусы
12.2. AdWare
12.3. Spy или SpyWare
12.4. PornWare и Dialer
12.5. Hijacker
12.6. RiskWare
13. Дополнительная информация
13.1. Что такое RootKit
13.2. Эвристический анализатор AVZ
13.3. Local Service Provider (LSP/SPI)
14. Параметры командной строки
14.1. Основные параметры
14.2. Специализированные ключи
14.3. Коды возврата
14.4. Примеры
15. Часто задаваемые вопросы (FAQ)
15.1. Что делать, если AVZ обнаружил подозрение на вирус или вредоносную программу ?
15.2. Что делать, если AVZ выдал подозрение на keylogger ?
15.3. Что делать, если AVZ выдал подозрение на RootKit ?
15.4. Что такое 'Порт TCP 5000' и как с ним бороться ?
15.5. Что делать, если после распаковки AVZ не может найти файл *.avz ?
15.6. AVZ удалил вредоносные программы, но стартовая страница и прочие настройки браузера по прежнему повреждены
15.7. Во время сканирования диска мой антивирусный монитор сообщил, что файл avz*.tmp заражен вирусом или является вредоносной программой
15.8. Что делать, если выдается сообщение "Ошибка загрузки драйвера - проверка прервана"
15.9. Что делать, если в ходе обновления баз возникает ошибка
15.10. Что делать, если в ходе загрузки архива с AVZ возникают ошибки
15.11. В ходе проверки AVZ в активное окно вводится текстовая строка с текстом "test"
15.12. Под Windows Vista, 8, 10 не работают некоторые функции AVZ
15.13. Особенности применения AVZ на Windows Server
15.14. Что делать, если вредоносная программа блокирует запуск AVZ ?
15.15. При запуске AVZ вместо надписей [?xxx?]
16. Скрипты управления
16.1. Введение
16.2. Структура скрипта
16.3. Типы переменных
16.4. procedure Sleep
16.5. procedure SleepMS
16.6. procedure ActivateWatchDog
16.7. procedure SetupAVZ
16.8. procedure RunScan
16.9. procedure ExitAVZ
16.10. Информация о компьютере
16.10.1. function GetSystemBootMode
16.10.2. function GetComputerName
16.10.3. function GetComputerComments
16.10.4. function IsNT
16.10.5. function IsAdmin
16.10.6. function IsElevated
16.10.7. function IsWow64
16.10.8. function IsTermSession
16.10.9. function GetComputerHash
16.10.10. function GetComputerIP
16.10.11. function GetEnvironmentVariable
16.10.12. function GetComputerDomain
16.10.13. function GetOSVersion
16.10.14. function GetUserName
16.10.15. function GetTickCount
16.11. Взаимодействие с пользователем
16.11.1. function TranslateStr
16.11.2. procedure ShowMessage
16.11.3. function InputBox
16.11.4. function MessageDLG
16.12. Автоматическое обновление
16.12.1. function ExecuteAVUpdate
16.12.2. function ExecuteAVUpdateEx
16.13. Работа с протоколом
16.13.1. procedure AddToLog
16.13.2. procedure SaveLog
16.13.3. procedure ClearLog
16.13.4. procedure SaveCSVLog
16.13.5. function AddLineToTxtFile
16.14. Карантин и папка Infected
16.14.1. procedure ExecuteAutoQuarantine
16.14.2. function CreateQurantineArchive
16.14.3. function CreateInfectedArchive
16.14.4. function QuarantineFile
16.14.5. function QuarantineFileF
16.14.6. function ClearQuarantine
16.14.7. function ClearQuarantineEx
16.14.8. function ClearQuarantineFilter
16.14.9. function AddQuarantineFilter
16.15. Функции запроса информации о AVZ
16.15.1. function GetAVZDirectory
16.15.2. function GetScanPath
16.15.3. function GetAVZVersion
16.15.4. function GetAVZVersionTxt
16.15.5. function GetAVZDBDate
16.15.6. function GetAVZSvcName
16.16. Интерфейс AVZ
16.16.1. procedure UnLockInterface
16.16.2. procedure LockInterface
16.16.3. procedure SetStatusBarText
16.17. Управление AVZPM
16.17.1. function SetAVZPMStatus
16.17.2. function GetAVZPMStatus
16.18. Управление AVZGuard
16.18.1. function SetAVZGuardStatus
16.18.2. function GetAVZGuardStatus
16.19. Управление Boot Cleaner
16.19.1. function BC_Activate
16.19.2. function BC_DeActivate
16.19.3. function BC_Execute
16.19.4. function BC_Clear
16.19.5. function BC_LogFile
16.19.6. function BC_QrFile
16.19.7. function BC_QrSvc
16.19.8. function BC_DeleteFile
16.19.9. function BC_CopyFile
16.19.10. function BC_DeleteReg
16.19.11. function BC_DeleteSvcReg
16.19.12. function BC_DeleteSvc
16.19.13. function BC_DisableSvc
16.19.14. function BC_ImportDeletedList
16.19.15. function BC_ImportQuarantineList
16.19.16. function BC_ImportALL
16.19.17. Типовые примеры
16.20. Эвристическая проверка системы
16.20.1. procedure SearchRootkit
16.20.2. procedure SearchKeylogger
16.20.3. procedure ExecuteSysChkEV
16.20.4. procedure ExecuteSysChkIPU
16.20.5. procedure ExecuteSysCheck
16.20.6. procedure ExecuteSysCheckEx
16.20.7. function ExecuteWizard
16.21. Эвристическая чистка системы
16.21.1. function ExecuteSysClean
16.21.2. procedure SysCleanAddFile
16.21.3. procedure SysCleanDelFilesList
16.21.4. procedure SysCleanGetFilesList
16.21.5. procedure SysCleanSetFilesList
16.22. Восстановление системы и стандартные скрипты
16.22.1. function ExecuteRepair
16.22.2. function ExecuteStdScr
16.22.3. function ExecuteScript
16.23. Завершение работы и перезагрузка
16.23.1. procedure ShutdownWindows
16.23.2. procedure RebootWindows
16.24. Использование AV анализатора в скрипте
16.24.1. function CheckFile
16.24.2. function GetLastCheckTxt
16.25. Работа с CLSID и BHO
16.25.1. function CLSIDExists
16.25.2. function CLSIDFileExists
16.25.3. function CLSIDFileName
16.25.4. procedure DelCLSID
16.25.5. function BHOExists
16.25.6. procedure DelBHO
16.26. Работа со службами и драйверами
16.26.1. function ServiceExists
16.26.2. function ServiceAndFileExists
16.26.3. function StartService
16.26.4. function StopService
16.26.5. function DeleteService
16.26.6. function GetServiceFile
16.26.7. function GetServiceStart
16.26.8. function SetServiceStart
16.26.9. function GetServiceName
16.27. Работа с SPI/LSP
16.27.1. procedure DelSPIByFileName
16.27.2. procedure CheckSPI
16.27.3. procedure AutoFixSPI
16.28. Работа с автозапуском и Winlogon
16.28.1. procedure DelWinlogonNotifyByFileName
16.28.2. procedure DelWinlogonNotifyByKeyName
16.28.3. function DelAutorunByFileName
16.29. Работа с планировщиком заданий
16.29.1. procedure DeleteSchedulerTask
16.30. Работа с реестром
16.30.1. function RegKeyExists
16.30.2. function RegKeyExistsEx
16.30.3. procedure RegKeyDel
16.30.4. procedure RegKeyCreate
16.30.5. function RegKeyParamExists
16.30.6. procedure RegKeyParamDel
16.30.7. function RegKeyStrParamRead
16.30.8. function RegKeyIntParamRead
16.30.9. procedure RegKeyStrParamWrite
16.30.10. procedure RegKeyIntParamWrite
16.30.11. procedure RegKeyBinParamWrite
16.30.12. function RegKeyParamWrite
16.30.13. function RegSearch
16.30.14. function ExpRegKey
16.30.15. function ExpRegKeyEx
16.30.16. function BackupRegKey
16.30.17. function RegKeyEnumVal
16.30.18. function RegKeyEnumKey
16.30.19. function RegKeyResetSecurity
16.30.20. Имена разделов
16.30.21. Редиректор реестра
16.31. Работа с INI файлами
16.31.1. function INIStrParamRead
16.31.2. function INIStrParamWrite
16.31.3. function INISectionExists
16.31.4. function INIEraseSection
16.31.5. function INIEraseParam
16.32. Работа с файлом Hosts
16.32.1. function GetHostsFileName
16.32.2. function ClearHostsFile
16.33. Работа с файлами и папками
16.33.1. function GetCurrentDirectory
16.33.2. function GetSystemDisk
16.33.3. function GetTempDirectoryPath
16.33.4. function NormalDir
16.33.5. function NormalFileName
16.33.6. function ExtractFileName
16.33.7. function ExtractFilePath
16.33.8. function ExtractFileExt
16.33.9. function DirectoryExists
16.33.10. procedure CreateDirectory
16.33.11. procedure DeleteDirectory
16.33.12. function FileExists
16.33.13. function FileExistsMask
16.33.14. function GetFileSize
16.33.15. function GetFileVersion
16.33.16. function GetAttr
16.33.17. function SetAttr
16.33.18. function CalkFileMD5
16.33.19. function CalkFileSHA1
16.33.20. function DeleteFile
16.33.21. function DeleteFileMask
16.33.22. function DeleteFileSecure
16.33.23. function CopyFile
16.33.24. function RenameFile
16.33.25. function GetDriveType
16.33.26. function SearchFiles
16.33.27. function SearchFolders
16.33.28. function FolderIsEmpty
16.33.29. function FSResetSecurity
16.33.30. Макросы, допустимые в именах файлов
16.33.31. Кодирование атрибутов файла
16.34. Работа с текстовыми файлами и списками строк
16.34.1. Класс TStringList
16.34.2. Примеры
16.35. Поиск файлов и папок
16.35.1. Класс TFileSearch
16.35.2. Примеры поиска
16.36. Работа с процессами
16.36.1. function ExecuteFile
16.36.2. function ExecuteFileOUT
16.36.3. function GetLastExitCode
16.36.4. function RefreshProcessList
16.36.5. function GetProcessCount
16.36.6. function GetProcessName
16.36.7. function GetProcessPID
16.36.8. function TerminateProcess
16.36.9. function TerminateProcessByName
16.36.10. Пример
16.37. Сигнатурный анализатор файла
16.37.1. function LoadFileToBuffer
16.37.2. function LoadFileToBufferEx
16.37.3. function FreeBuffer
16.37.4. function GetBufferSize
16.37.5. function GetBufferByte
16.37.6. function GetBufferWord
16.37.7. function GetBufferDWord
16.37.8. function GetBufferStr
16.37.9. function SearchSign
16.37.10. Пример реализации сигнатурного искателя
16.38. Работа с результатами исследования системы
16.38.1. function SC_INIT
16.38.2. function SC_FREE
16.38.3. function SC_SelectNode
16.38.4. function SC_GetItemsCount
16.38.5. function SC_GetParamVal
16.38.6. function SC_GetTagName
16.38.7. function SC_SearchItem
16.38.8. Примеры
16.39. Функции запроса статистики
16.39.1. function GetSuspCount
16.39.2. function GetDetectedCount
16.40. Обработка параметров командной строки
16.40.1. function GetParamCount
16.40.2. function GetParamStr
16.40.3. function GetParamByName
16.40.4. Пример обработки параметров
16.41. Работа со строками
16.41.1. function StringReplace
16.41.2. function Pos
16.41.3. procedure Insert
16.41.4. procedure Delete
16.41.5. function Copy
16.41.6. function Length
16.41.7. function Trim
16.41.8. function UpperСase
16.41.9. function LowerСase
16.41.10. function Chr
16.41.11. function Ord
16.41.12. Преобразования в строку
16.41.12.1. function IntToStr
16.41.12.2. function IntToHex
16.41.12.3. function FloatToStr
16.41.12.4. function DateToStr
16.41.12.5. function TimeToStr
16.41.12.6. function DateTimeToStr
16.41.12.7. function FormatFloat
16.41.12.8. function FormatDateTime
16.41.13. Преобразования из строки
16.41.13.1. function StrToInt
16.41.13.2. function StrToFloat
16.41.13.3. function ValidInt
16.41.13.4. function ValidFloat
16.41.13.5. function ValidDate
16.41.13.6. function StrToDate
16.41.13.7. function StrToTime
16.41.13.8. function StrToDateTime
16.42. Работа с числами
16.42.1. function Round
16.42.2. function Trunc
16.42.3. function Int
16.42.4. function Frac
16.42.5. function Sqrt
16.42.6. function Abs
16.42.7. procedure Inc
16.42.8. procedure Dec
16.42.9. procedure Randomize
16.42.10. function Random
16.43. Работа с датами и временем
16.43.1. function Now
16.43.2. function Date
16.43.3. function Time
16.43.4. function EncodeDate
16.43.5. function EncodeTime
16.43.6. procedure DecodeDate
16.43.7. procedure DecodeTime
16.43.8. function DayOfWeek
16.43.9. function DaysInMonth
16.44. Передача оповещения администратору
16.44.1. function SendNetMessage
16.44.2. function SendSyslogMessage
16.44.3. function SendEmailMessage
16.45. Работа с Интернет
16.45.1. function DownloadFile
16.45.2. function FTPSendFile
16.45.3. function GetHostByName
16.45.4. function Ping
16.46. Работа с WMI
16.46.1. function WMI_Init
16.46.2. procedure WMI_Free
16.46.3. function WMI_Query
16.46.4. function WMI_Fetch
16.46.5. function WMI_GetField
16.46.6. Примеры
16.47. Работа с архивами
16.47.1. function ZIP_CreateArchive
16.47.2. function ZIP_ExtractArchive
16.48. Типовые примеры
16.48.1. Параметры запуска
16.48.2. Сканирование компьютера
16.48.3. Блокировка сканирования по условию
16.48.4. Сканирование и автокарантин
16.48.5. Лечение заданных папок по условию
16.48.6. Автокарантин и сбор подозрительных файлов с ПК
16.48.7. Поиск файла на диске
16.48.8. Заготовка скрипта для сканирования сети
16.48.9. Обновление баз с протоколированием
16.48.10. Пример удаления троянской программы с известным именем
16.48.11. Поиск подозрительных объектов по именам
16.48.12. Блокировка повторного запуска скрипта в течение дня
16.48.13. Сканирование и отправка результатов по почте
16.48.14. Пример построения простого antimalware сканера с собственными базами
16.48.15. Сканирование ПК и отправка результатов по FTP


2. Обшие сведения

AVZ 5. Руководство пользователя
×

  • 2. Обшие сведения
  • Предыдущая
  • Следующая

Содержание 2. Обшие сведения

2.1. О программе
2.2. Инсталляция и системные требования
2.3. Структура папок программы
2.4. Техническая поддержка
2.5. Назначение программы


2.1. О программе

Антивирусная утилита AVZ является инструментом для исследования и восстановления системы, и предназначена для автоматического или ручного поиска и удаления:
  • •
    Разнообразных шпионских и рекламных приложений (SpyWare и AdvWare). Это одно из основных назначений утилиты;
  • •
    Клавиатурных шпионов и прочих программ, которые могут применяться для слежения за пользователем;
  • •
    Майнеров криптовалюты;
  • •
    Руткитов и вредоносных программ, маскирующих свои процессы.
  • •
    Сетевых и почтовых червей;
  • •
    Троянских программ (включая все их разновидности, в частности Trojan-PSW, Trojan-Downloader, Trojan-Spy) и Backdoor (программ для скрытного удаленного управления компьютером);
  • •
    Программ двойственного назначения, например - утилит удаленного управления компьютером. Для данных утилит следует учитывать, что они могут опознаваться как безопасные и помечаться зеленым цветом в таблицах и отчетах.
Утилита AVZ зарегистрирована в Российском Отраслевом Фонде Алгоритмов и Программ, номер свидетельства ОФАП 6427, код ЕСПД .52038851.00116-01.
Изначально утилита являлась прямым аналогом программ типа Trojan Hunter и LavaSoft Ad-aware 6. Первичной задачей программы является удаление AdWare, SpyWare и троянских программ.
Сразу следует отметить, что программы категорий SpyWare, AdWare по определению не являются вирусами или троянскими программами. Они шпионят за пользователем, собирая и отправляя определенную статистику, а также загружают информацию и программный код на пораженный компьютер, причем в основном из маркетинговых соображений (т.е. передаваемая информация не содержит критических данных – паролей, номеров кредитных карт и т.п., а загружаемая информация является рекламой или обновлениями). Однако очень часто грань между SpyWare и троянской программой достаточно условна и точная классификация затруднительна. Моя методика классификации и критерии описаны в данной справочной системе. Дополнительную информацию о вредоносных программах можно найти в моей книге "Rootkits, SpyWare/AdWare, Keyloggers & BackDoors. Обнаружение и защита"
Особенностью программы AVZ является возможность настройки реакции программы на каждую из категорий вредоносных программы – например, можно задать режим уничтожения найденных вирусов и троянских программ, но заблокировать удаление AdWare.
Начиная с версии 4 основной особенностью AVZ являются многочисленные эвристические проверки системы, не основанные на механизме поиска по сигнатурам – это поиск RootKit на основе выявления перехвата функций и маскировки процессов, клавиатурных шпионов на основании их специфического поведения, выявления различных Backdoor и средств удаленного управления по базе типовых портов TCP/UDP. Подобные методы поиска позволяют находить новые разновидности вредоносных программ.
Кроме типового для программ данного класса поиска файлов по сигнатурам в AVZ встроена база с цифровыми подписями более миллиона легитимных файлов. Применение данной базы позволяет значительно уменьшить количество ложных срабатываний эвристики и позволяет решать ряд задач. В частности, в системе поиска файлов есть фильтр для исключения известных файлов из результатов поиска, в диспетчере запущенных процессов и настроек SPI производится цветовое выделение известных процессов, при добавлении файлов в карантин производится блокировка добавления известных AVZ безопасных файлов.
Как показала моя практика, очень часто программа типа SpyWare может быть классифицирована как AdWare и наоборот (причины просты – целью шпионажа в большинстве случаев является целевая реклама). Для таких случаев в своей классификации я ввел обобщающую категорию Spy, которая грубо может трактоваться как AdWare+SpyWare. Термин Spy переводится как «шпион», «тайный агент», «следить», «подглядывать», «совать нос в чужие дела». Этот термин достаточно хорошо подходит к программам подобного класса.
Начиная с версии 4.29 в AVZ предусмотрена локализация интерфейса и протоколов выполняется на основе обновляемых баз, на текущий момент поддерживается русский и английский язык, выбор языка производится автоматически или вручную при помощи параметра командной строки Lang или профиля локализации.
По умолчанию выбор языка идет автоматически (на русскоязычной системе русский, на остальных - английский) или вручную через параметры командной строки и профиль локализации. Параметр командной строки - lang=X, где X - название локализации, RU для русского, EN - для английского. Т.е. для принудительного включения русского языка нужно вызывать AVZ в виде avz.exe lang=ru (соответственно для принудительного включения английского avz.exe lang=en )
Ограничения программы:
  • 1.
    Т.к. утилита направлена в первую очередь на борьбу с Backdoor и AdWare/SpyWare, и в настоящий момент она не поддерживает проверку архивов некоторых типов, PE упаковщиков и документов. Для борьбы с указанным ПО в этом просто нет надобности.
  • 2.
    Утилита не лечит программы, зараженные компьютерными вирусами. Для качественного и корректного лечения зараженной программы необходимы специализированные антивирусы (например, антивирус Касперского, DrWeb, Norton Antivirus, Panda и т.п.).


2.2. Инсталляция и системные требования

Антивирусная утилита AVZ не требует инсталляции на ПК. У текущей версии в комплекте нет инсталлятора и деинсталлятора - в них просто нет надобности.
Единственно требование, которое должно быть соблюдено для нормального функционирования утилиты - размещение баз (они имеют расширение *.avz) в подкаталоге BASE утилиты. Антивирусная утилита AVZ при выключенном лечении (это режим по умолчанию) в процессе работы ничего не изменяет в настройках системы и реестре, не устанавливает и не удаляет классы и библиотеки, поэтому проверка компьютера при выключенном лечении не оказывает на ПК и операционную систему никакого воздействия. Единственным изменением, вносимым на время работы в конфигурацию компьютера, является загрузка драйвера AVZ.SYS, который на время проверки копируется в каталог Driver и удаляется после завершения проверки. Этот драйвер устанавливается и загружается только при включенном режиме поиска руткитов.
Работа утилиты в режиме лечения вносит изменения - в этом случае с ПК удаляются найденные вредоносные программы и (в ряде случаев) сопутствующая им информация (ключи реестра, ярлыки и т.п.). При использовании визардов поиска и устранения проблем производятся изменения в настройках системы, в основном - модификации реестра, которые при необходимости можно откатить.
Антивирусная утилита AVZ не выдвигает особых системных требований - ее работоспособность проверена на сотнях компьютеров с операционной системой начиная с Windows XP и Windows 2003 (SP1), Windows Vista (SP1, SP2), Windows 7, Windows 8, Windows 10. Технологии AVZPM, AVZGuard, BootCleaner не поддерживаются в 64-bit версиях операционных систем.
При использовании AVZ необходимо учитывать, что при его применении на серверах следует соблюдать особую осторожность, особенно в случае запуска AVZ из терминальной сессии. Работа сервера имеет множество особенностей, в частности: недопустимость перезагрузки системы, наличие множества профилей пользователей, работа фоновых процессов, особенности терминального режима и т.п..
Антивирусная утилита AVZ не обменивается информацией с сетью и Интернет (не передает и не принимает данные, не прослушивает порты), поэтому для ее эксплуатации не требуется дополнительная настройка Firewall и не требуется выход в интернет. Исключением является:
1. обновление баз, которое запускается по команде пользователя, в ходе работы стандартных скриптов или по команде пользовательского скрипта - для обновления баз AVZ обращается к указанному в настройке сайту по порту 80 с использованием протокола HTTP/HTTPS.
2. диагностика сети. По умолчанию отключена, и при запуске сканирования вручную не используется. Данная проверка включается в настройках исследования системы вручную, а также автоматически применяется в стандартных скриптах №3,4,7,9. Предполагает определение IP адресов популярных ресурсов, для которых чаще всего создаются вредоносные редиректы, через DNS по умолчанию. В протокол заносится полученный от DNS IP адрес, для его сравнения с заранее правильными, определенными командой NSLOOKUP. При определении IP адреса проверяется его доступность путем стандартного Ping. В случае недоступности сети в момент такой проверки в протоколе делается отметка об ошибке проверки, на дальнейшую работу процесса исследования это не влияет.
В случае необходимости можно произвести принудительное удаление ключей реестра и файлов, которые AVZ мог создать на диске, что эквивалентно его деинсталляции - для этого следует воспользоваться микропрограммой номер 6 в разделе Стандартные скрипты или выполнить скрипт:
begin
ExecuteStdScr(6);
end.


2.3. Структура папок программы

Утилита AVZ может устанавливаться в любую папку, но для определенности будем считать, что это папка с именем AVZ.
Структура папок:
AVZ
Base Базы AVZ с описаниями вредоносных программ и методик их лечения. Загруженные обновления необходимо помещать именно в эту папку
Backup Папка с резервными копиями критических настроек системы. Резервные копии создаются автоматически в процессе лечения и восстановления системы или выполняются по команде пользователя. Папка содержит подкаталоги с именами вида «ГГГГ-ММ-ДД», где ГГГГ – год, ММ – месяц, ДД – день.
Infected Папка с копиями удаленных вредоносных объектов
Quarantine Карантин – папка с копиями подозрительных объектов
Папки Infected и Quarantine внутри содержат подкаталоги с именами вида «ГГГГ-ММ-ДД», где ГГГГ – год, ММ – месяц, ДД – день. Такая организация существенно упрощает последующую работу с этими папками (в частности, упрощается их очистка и просмотр).
На заметку:
Папки Infected и Quarantine могут быть перемещены в любой каталог с помощью ключа командной строки QuarantineBaseFolder


2.4. Техническая поддержка

Несмотря на то, что утилита AVZ является бесплатной программой, у нее имеется техническая поддержка по электронной почте:
· avz@z-oleg.com - по этому адресу Вы можете задать вопросы по работе программы, сообщить об ошибках или прислать предложения по усовершенствованию программы и методик ее работы;
· newvirus@z-oleg.com - на этот адрес следует присылать недетектируемые AVZ вредоносные программы / протоколы AVZ / подозрительные файлы для проверки (отправка подозрительного объекта должна производиться в архиве формата ZIP с паролем "virus", крайне желательно подозрительные объекты поместить в карантин AVZ и создать архив средствами карантина AVZ).
· VirusInfo.Info - в этой конференции вирусологов есть раздел "Помогите", в котором можно описать свою проблему и приложить протокол исследования системы AVZ (подробности запроса помощи описаны в правилах данной конференции). AVZ в частности обучается по найденным в данной конференции вредоносным программам, анализ протоколов и формирование рекомендаций происходит достаточно оперативно - в большинстве случаев проблему удается решить в день обращения за помощью. С помощью сервиса " Прислать чистые файлы " данного сайта можно прислать архив с чистыми файлами для базы безопасных AVZ, а в разделе " Beta тестирование " идет обсуждение новых версий AVZ и предложений по его доработке.
· По адресу http://www.z-oleg.com/secur/avz/report.php расположена форма, при помощи которой можно сообщить об ошибке, возникающей в процессе работы с AVZ. Следует понимать, что обращение через WEB форму анонимно и рекомендуется применять ее для рапортов об ошибках. Нет смысла задавать через эту форму вопросы, не указав параметры обратной связи
· По адресу http://z-oleg.com/secur/avz/upload_qr.php расположен сервис, предназначенный для отправки карантинов. Содержащиеся в карантине файлы изучаются, и затем используются для пополнения базы чистых и вредоносных программ, а также формирования эвристики AVZ. Через данную форму следует отсылать только архивы, созданные из карантина AVZ
При написании письма желательно четко сформулировать тему письма, кратко и точно изложить суть проблемы, пожелания или вопроса. От этого будет зависеть время реакции на письмо (согласитесь, заголовок "Подозрительный объект для проверки" гораздо информативнее, чем "Спасите !", "Помогите", "SOS" и т.п.). Если Вы присылаете подозрительный объект, о котором у Вас есть информация (например, AVZ заподозрил некую DLL как клавиатурный шпион, а Вы знаете, что она является компонентом программы X) - пожалуйста, укажите ее - это упростит и ускорит анализ. Файлы, присланные не через карантин AVZ или в архивах экзотического формата рассматриваются в последнюю очередь.
При написании письма желательно придерживаться следующих правил:
1. Создавать письма с информативными заголовками. Это упростит анализ и ускорит время реакции. Например "Подозрительный файл (срабатывание антикейлоггера)" или "Подозрение на RootKit" - куда информативнее, чем заголовки типа "SOS", "Спасите", "Помогите", "Караул", "от Васи Пупкина" и т.п.
2. В тексте письма желательно указать:
2.1 Версию операционной системы
2.2 Краткую формулировку проблемы (т.е. что и где обнаружилось, где, какие симптомы)
2.3 Желательно приложить протокол AVZ и результаты исследования системы (Файл/Исследование системы)
3. В случае, если подозрительные файлы в архиве занимают большой объем (более 1-2 МБ), то необходимо предварительно прислать письмо с описанием проблемы, протоколами и указанием размера подозрительных файлов.


2.5. Назначение программы

Назначением программы является:
  • •
    Поиск известных malware-программ и их удаление. Удаление предполагает автоматическую очистку критичных для работы системы следов вредоносной программы в реестре и INI файлах. В этом плане удобно применять AVZ для экспресс-очистки зараженного компьютера перед применением "тяжелой артиллерии" - установки мощного антивирусного пакета и проведения сканирования с его помощью. Сканер может проверять архивы распространенных типов, файлы электронной почты, потоки NTFS. Начиная с версии 4 данный функционал стал вспомогательным, так как эффективность баз небольшого объема невелика.
  • •
    Оперативное автоматическое исследование компьютера с формированием протокола в формате HTML для анализа вручную и XML для автоматизированного анализа. В ходе исследования автоматически отфильтровываются файлы, прошедшие проверку по базе безопасных AVZ и каталогу безопасности Microsoft, что существенно уменьшает размер протоколов и позволяет выявлять аномалии. Данный режим удобен для оперативного изучения подозрительного компьютера администратором, а также для удаленного исследования системы. Возможность запуска сканирования системы и карантина из скрипта позволяет полностью автоматизировать данную операцию, сведя действия пользователя на месте к запуску bat файла или запуску AVZ через доменные политики.
  • •
    Автоматический карантин файлов , не имеющих ЭЦП Microsoft и не описанных в базе безопасных AVZ для их последующего изучения вручную или антивирусными программами. Данный режим удобен для быстрого сбора всех неопознанных файлов для их последующего анализа. Кроме того, в AVZ предусмотрен карантин по заданному пользователем списку и поддерживаются команды добавления в карантин в скриптах, что упрощает дистанционный сбор подозрительных файлов с проверяемых компьютеров. Начиная с 5-й версии через скрипт можно настроить фильтр, исключающий попадание в карантин файлов с заданными расположениями или расширениями.
· Скриптовой язык , позволяющий управлять AVZ. Скрипты позволяют автоматизировать работу AVZ, в том числе применять его в полностью автоматическом режиме в корпоративной сети - в этом случае AVZ может запускаться из logon-скрипта или автозапуска, и работать по скрипту, созданному администратором. Скрипты позволяют автоматизировать большинство операций, выполняемых AVZ вручную, вплоть до создания собственных реализаций несложных сигнатурных сканеров. Поддержка скриптов является одной из основных особенностей, отличающих AVZ от аналогичных программ. Для упрощения процесса составления скрипта имеется подробная документация с примерами, а также специальный редактор скриптов , являющийся отдельным приложением.
· Выполнение поиска руткитов и иных перехватчиков API с функцией поиска скрытых процессов. Кроме анализа перехватов AVZ обладает функций нейтрализации перехватчиков UserMode и KernelMode, а также реализует ряд алгоритмов поиска скрытых процессов по косвенными признакам.
· Выполнение восстановление системы . AVZ содержит микропрограммы для автоматического исправления типовых повреждений настроек операционной системы, браузера Internet Explorer, проводника, а также выполнения сброса настроек рабочего стола, удаления создаваемых вредоносными программами правил Policy. Данные операции не всегда производятся антивирусами, в результате после успешного удаление вредоносной программы нормальная работа системы не восстанавливается в полном объеме.
· Резервное копирование . Предназначено для выполнения резервных копий критических настроек системы. Резервное копирование выполняется по команде пользователя или автоматически в ходе лечения и восстановления системы.
· Мастер поиска и устранения проблем . Данная система предназначена для автоматического поиска и устранения проблем, возникающих после заражения вредоносными программами. Начиная с версии 4.20, данный мастер позволяет также удалять следы активности пользователя в виде различных протоколов и кешей, а также выявлять и удалять "мусор" на ПК.
· Автоматическая проверка настроек SPI/LSP и исправление ошибок в автоматическом режиме. Позволяет устранить большинство типовых проблем с LSP, в частности, возникающих после удаления некоторых AdWare. В случае невозможности восстановления настроек предусмотрено их полное пересоздание.
· Поиск файлов на диске . Поиск защищен антируткитом AVZ и обладает рядом полезных для поиска malware функций, в частности: исключение из списка найденных файлов, прошедших проверку по базе безопасных AVZ и каталогу безопасности Microsoft, что позволяет существенно сузить область поиска.
· Встроенный ревизор диска . Ревизор создает базы, содержащие информацию о файлах в соответствии с настройками пользователя (задаются каталоги, маски поиска). Данные базы могут применяться для отслеживания изменений на диске.
· Анализатор запущенных процессов , позволяющий в режиме максимальной эвристики производить поиск подозрительных объектов.
· Система AVZGuard , позволяющая защитить AVZ и любые указанные им приложения от действующих в системе вредоносных программ и ограничит влияние вредоносных программ на систему.
· Система прямого доступа к диску для работы с заблокированными файлами. Работает на FAT16/FAT32/NTFS, поддерживается на всех операционных системах линейки NT, позволяет сканеру анализировать заблокированные файлы и помещать их в карантин.
· Драйвер мониторинга процессов и драйверов AVZPM . Предназначен для отслеживания запуска и остановки процессов и загрузки/выгрузки драйверов для поиска маскирующихся драйверов и обнаружения искажений в описывающей процессы и драйверы структурах, создаваемых DKOM руткитами.
· Драйвер Boot Cleaner . Предназначен для выполнения чистки системы (удаление файлов, драйверов и служб, ключей реестра) из KernelMode. Операция чистки может выполняться как в процессе перезагрузки компьютера, так и в ходе лечения.
· Поиск потенциальных уязвимостей. Предназначен для поиска некорректных настроек ПК, которые могут отрицательно влиять на безопасность.
Таким образом AVZ позиционируется как интерактивный инструмент, предназначенный для полуавтоматического изучения ПК с целью поиска и уничтожения вредоносных программ. Одной из основных особенностей AVZ является поддержка внешних скриптов, под управлением которых возможен автоматический анализ, чистка компьютера, карантин файлов, поиск и исправление типовых проблем. Система команд скриптового языка и примеры их использования описаны в отдельном разделе справочной системы .


3. Работа с программой

AVZ 5. Руководство пользователя
×

  • 3. Работа с программой
  • Предыдущая
  • Следующая

Содержание 3. Работа с программой

3.1. Главное окно программы
3.2. Обновление баз
3.3. Отложенное удаление файла
3.4. Профили настроек
3.5. Профили локализации


3.1. Главное окно программы

Перед началом работы с программой на время проверки и лечения рекомендуется отключить средства фонового мониторинга изменений реестра и антивирусные мониторы. Данное условие не является обязательным, однако его несоблюдение может привести к существенному увеличению длительности сканирования - несколько часов вместо нескольких минут. Причина этого состоит в том, что антивирусный монитор проверяет все открываемые файлы в момент их открытия.
Главное окно программы
Главное окно программы содержит все основные элементы управления - главное меню, настройки процесса поиска и лечения, окно просмотра протокола и строку статуса.
Кнопка "Пуск" позволяет запустить проверку выбранных дисков и каталогов.
Кнопка "Пауза" позволяет временно приостановить проверку файлов. Данная кнопка автоматически разблокируется при выполнении операций, для которых допустима приостановка. Возобновление сканирования производится повторным нажатием на кнопку "Пауза"
Кнопка "Стоп" позволяет в любой момент прервать процесс проверки.
На время проверки большинство элементов интерфейса AVZ блокируются.
См. также:
3.1.1. Вкладка 'Область поиска'
3.1.2. Вкладка "Типы файлов"
3.1.3. Вкладка 'Параметры поиска'
3.1.4. Группа 'Параметры лечения'
3.1.5. Протокол

Содержание 3.1. Главное окно программы

3.1.1. Вкладка 'Область поиска'
3.1.2. Вкладка "Типы файлов"
3.1.3. Вкладка 'Параметры поиска'
3.1.4. Группа 'Параметры лечения'
3.1.5. Протокол


3.1.1. Вкладка 'Область поиска'

3.1.1. Вкладка 'Область поиска'

Вкладка "Область поиска"

Вкладка "Область поиска" предназначена для задания области поиска вредоносных программ. Она содержит древовидный список дисков и папок. Напротив каждого элемента списка имеется переключатель, который позволяет включить любой из элементов списка в поиск или исключить из него, возможны варианты:
- файлы и подкаталоги данного диска или каталога не сканируются.
- сканируются все файлы и подкаталоги данного каталога.
- сканируются все файлы данного каталога и часть его подкаталогов (эта ситуация возникает, если подкаталогов несколько и отмечена часть из них).
- сканируются только файлы данного подкаталога, подкаталоги не сканируются. Включить этот режим сканирования каталога можно через контекстное меню, вызываемое по правой кнопки мыши - пункт "Проверять только файлы в указанной папке (без подкаталогов)".
При нажатии над списком папок правой кнопки мыши выводится меню:
позволяющее:
  • •
    "Выделить все HDD" - отмечает все жесткие диски (HDD).
  • •
    "Выделить все CD-ROM/DVD-ROM" - отмечает приводы CD/DVD.
  • •
    "Выделить все дисководы и Flash диски" - отмечает все дисководы и Flash диски.
  • •
    "Добавить папку". Выполнение этого пункта меню приводит к выводу диалогового окна с запросом имени папки. Данная функция удобна для быстрой отметки каталога в случае, если имеется полный путь к нему.
  • •
    "Проверять только файлы в указанной папке (без подкаталогов)". Отмечает текущую папку в особом режиме - в нем сканируются только файлы, размещенные в данной папке - без сканирования вложенных каталогов.
  • •
    "Обновить" - производит обновление списка, данная операция может быть вызвана путем нажатия клавиши F5.
Наверх

Индикатор выполнения

Главный прогресс-индикатор, показывающий примерное состояние процесса сканирования.
Наверх

Флажок "Проверять запущенные процессы"

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

Флажок "Эвристическая проверка системы"

Включает дополнительную эвристическую проверку системы. Особенность этой проверки состоит в анализе запущенных процессов, реестра и диска для поиска неизвестных для AVZ разновидностей вредоносных программ по их характерным признакам. Если этот режим включен и AVZ обнаружит подозрительные объекты, то он сообщит об этом в протоколе. Включение эвристической проверки увеличивает общее время сканирования системы. Основой эвристической проверки системы являются так называемые микропрограммы эвристики, которые хранятся в базах данных и постоянно обновляются.
Наверх

Флажок "Поиск потенциальных уязвимостей"

Включает подсистему, которая ищет потенциальные проблемы в области безопасности. Следует понимать, что выдаваемые данной системой сообщения носят рекомендательный характер из раздела "На это стоит обратить внимание". Если после выполнения поиска потенциальных уязвимостей выполнить исследование системы, то в средство формирования скрипта протокола исследования системы будут добавлены пункты для создания скрипта устраняющего найденный проблемы (при условии, что их можно исправить скриптом).
Наверх


3.1.2. Вкладка "Типы файлов"

Вкладка "Типы файлов" позволяет настроить типы проверяемых файлов.
3.1.2. Вкладка "Типы файлов"

Переключатель "Типы файлов"

Данный переключатель позволяет выбрать типы файлов, проверяемые AVZ.
По умолчанию выбран пункт "Потенциально опасные файлы" - в этом случае AVZ проверяет только файлы с определенными, жетко заданными расширениями (EXE, DLL, OCX, SYS, CAB, INF …) - т.е. исполняемые файлы или файлы, которые могут содержать данные для установки вредоносных программ или опасные скрипты.
Выбор пункта "Все файлы" приводит к проверке абсолютно всех файлов, независимо от их расширения. При сканировании диска в этом режиме проверяется большее количество файлов, в результате скорость проверки существенно замедляется. В этом режиме блокируется переключатель "Включая файлы по маске", т.к. в данном случае он теряет смысл.
Выбор пункта "Файлы по маскам пользователя" приводит к тому, что поиск ведется только по маскам, заданным пользователем в полях "Включая файлы по маске" и "Исключая файлы по маске".
На заметку: Если на закладке "Область поиска" включен переключатель "Проверять запущенные процессы", то запущенные программы и загруженные библиотеки проверяются в любом случае, независимо от их расширения и настроек в переключателя "Типы файлов".
Наверх

Флажок "Включая файлы по маске"

Позволяет включить в поиск файлы, соответствующие заданной пользователем маске. Этот переключатель теряет смысл в режиме "Все файлы" и при выборе этого режима автоматически выключается и становится недоступным.
Наверх

Маски сканируемых файлов

Одна или несколько масок, разделенных запятой, пробелом или символом ";". Имеет смысл и доступен при включении "Включая файлы по маске:"
Наверх

Флажок "Исключая файлы по маске"

Позволяет исключить из проверки файлы, соответствующие заданной пользователем маске. Исключение файлов по маске может использоваться совместно с включением по маске или режимов "Все файлы". Указание одинаковых элементов в списке включения и исключения не является ошибкой, исключение имеет приоритет над включением - например, при указании включения в сканирование файлов *.vir и исключения *.vir последнее будет иметь приоритет. Более того, исключение по более общей маске доминирует над включением, например: при включении trojan*.exe и исключении *.exe файл с именем trojan.exe будет исключен из проверки.
Наверх

Маски исключения

Одна или несколько масок, разделенных запятой, пробелом или символом ";". Имеет смысл и доступен при включении "Исключая файлы по маске:"
Наверх

Флажок "Отчет о чистых объектах"

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

Флажок "Проверять чистые объекты по базе безопасных"

Имеет смысл только при включении отчет о чистых объектах, дополняет информацию о каждом файле результатам проверки по базе чистых AVZ.
Наверх

Флажок "Проверять потоки NTFS"

Включает проверку NTFS потоков каждого сканируемого файла.
Наверх

Флажок "Проверять архивы"

Управляет проверкой архивов, включен по умолчанию. Под архивом понимаются так-же CHM файлы, MHT файлы, файлы электронной почты и прочие структуры, которые могут содержать внутри себя другие файлы.
Наверх

Флажок "Не проверять архивы более"

Доступен при условии, если включена проверка архивов. По умолчанию включен и действует заданное в параметре "Максимальный размер архива" ограничение. Отключать данный флажок не рекомендуется, так как проверка архива большого размера может зханимать очень много времени при том, что находящиеся в архиве вредоносные программы прямой угрозы для ПК не представляют.
Наверх

Максимальный размер архива

Имеет смысл и доступен при условии, что включен флажок "Не проверять архивы более". Задает максимальный размер архива, проверка которого разрешена. Архивы большего размера из проверки исключаются. Размер задается в мегабайтах и не может быть менее 1 мб.
Наверх
На заметку: Поля с маской могут включать несколько масок, разделенных запятой, пробелом или символом ";".
В маске могут присутствовать символы "?" (любой символ в позиции знака ?) и * (любые символы).
Например:
*.* - поиск всех файлов
*.exe - поиск файлов с расширением exe
dialer.exe - поиск файла с конкретным именем "dialer.exe"
dialer.exe, *.dll, trojan*.sys - поиск файлов с именем dialer.exe или файлов с любым именем и расширением DLL или файлов с именем Trojan<любые символы>.sys
*.exe, *.dll, *.sys, *.ocx - поиск файлов с указанными расширениями


3.1.3. Вкладка 'Параметры поиска'

3.1.3. Вкладка 'Параметры поиска'

Регулятор уровня эвристики

AVZ поддерживает 4 уровня эвристического анализа:
· Эвристический анализ отключен. В этом случае обнаруживаются только известные AVZ вредоносные объекты при полном совпадении проверяемого объекта с описанием в базе;
· Минимальный уровень эвристики - в этом режиме AVZ выдает предупреждения при обнаружении объектов, очень похожих на вредоносные;
· Средний уровень эвристики - аналогичен минимальному, но порог срабатывания ниже. Это рекомендуемый режим работы, в котором уровень ложных срабатываний обычно не превышает 10-15%;
· Максимальный уровень эвристики - этот режим часто называют "параноидальным", так как предупреждения о подозрении на malware выдаются даже при обнаружении отдаленного сходства проверяемого объекта с вредоносным. В этом режиме возможны многочисленные ложные срабатывания.
Наверх

Флажок "Расширенный анализ"

Доступен только при установке максимального уровня эвристики, по умолчанию отключен. Включение данного переключателя задействует дополнительные проверки, которые позволяют обнаруживать подозрительные объекты по второстепенным признакам типа двойного расширения, наличия в имени большого количества пробелов перед расширением, использование идентичных по начертанию букв различных алфавитов и т.п.
Расшифровка основных сообщений эвристического анализатора приведена в разделе Эвристический анализатор AVZ ;
Наверх

Флажок "Детектировать перехватчики API и RootKit"

Управляет детектором RootKit , который пытается обнаружить присутствие в системе RootKit по характерным для него признакам в виде перехвата функций или маскировки объектов. Детектор является пассивным анализатором, блокировка и нейтрализация перехватов выполняется только при включении "Блокировать работу RootKit User-Mode" и "Блокировать работу RootKit Kernel-Mode".
Наверх

Флажок "Блокировать работу RootKit User-Mode"

Доступен только при включенном переключателе "Детектировать RootKit" и позволяет включить систему активного противодействия RootKit User-Mode путем снятия и нейтрализации перехватов. Данная операция не оказывает глобального влияния на систему, по этой причине перезагрузка не требуется. При включении блокирования RootKit автоматически включается система эвристического поиска процессов и файлов RootKit. Принцип действия системы основан на анализе системы до и после блокировки перехватчиков, что позволяет обнаружить маскируемые процессы, сервисы и драйверы.
Наверх

Флажок "Блокировать работу RootKit Kernel-Mode"

Доступен только при включенном переключателе "Детектировать RootKit" и позволяет включить систему активного противодействия RootKit Kernel-Mode. Следует отметить, что включение противодействия подобным RootKit может привести к непредсказуемым последствиям и нужно быть готовым к зависанию программы AVZ и системы в целом. Поэтому перед активацией противодействия необходимо закрыть все программы, желательно отключится от сети, выгрузить антивирусный монитор и Firewall.
При включении блокирования RootKit автоматически включается система эвристического поиска процессов и файлов RootKit. Принцип действия системы основан на анализе системы до и после блокировки перехватчиков, что позволяет обнаружить маскируемые процессы, сервисы и драйверы.
Система AVZGuard и антируткит режима ядра являются взаимоисключающими, при включении AVZGuard нейтрализация руткитов в режима ядра отключается.
Наверх

Флажок "Проверять настройки SPI / LSP"

Включает анализатора настроек SPI (который более известен как LSP благодаря утилите LSP Fix). Настройки SPI модифицируют многие современные вредоносные программы, типовые проявлением поврежденной настройки является появление сбоев при работе в Интернет. При включенном флажке проверка производится автоматически и все найденные проблемы и ошибки выводятся в протокол.
Наверх

Флажок "Автоматически исправлять ошибки в SPI/LSP"

Имеет смысл и доступен при включенном режиме "Проверять настройки SPI / LSP". Установка флажка "Автоматически исправлять ошибки в SPI/LSP" позволяет включить систему автоматического исправления найденных ошибок - исправление ошибок производится в автоматическом режиме и не требует от пользователя понимания тонкостей работы SPI. Начиная с версии AVZ 4.26 в случае обнаружения ошибок перед их исправлением AVZ автоматически создает резервную копию настроек SPI в папке BackUp. Резервная копия является стандартным REG файлом, который может быть импортирована в реестр в случае необходимости.
На заметку: Для устранения ошибок в ручном режиме рекомендуется использовать Менеджер Winsock SPI (LSP, NSP, TSP).
На заметку: На серверах крайне не рекомендуется включение автоматического устранения ошибок!
Наверх

Флажок "Поиск портов TCP/UDP троянских программ"

Переключатель "Поиск портов TCP/UDP троянских программ" включает автоматический анализ списка открытых портов TCP и UDP. В составе AVZ имеется специальная база, в которой описаны несколько сотен портов, применяемых распространенными троянскими программами, Backdoor и вирусами. При обнаружении открытых портов, описанных данной базе, в протокол выводится предупреждение с указанием номера порта и списка вредоносных программ, применяющих данный порт. Открытые порты TCP и UDP можно также просмотреть в окне " Открытые порты TCP/UDP "
Наверх

Флажок "Поиск клавиатурных перехватчиков (Keylogger)"

Переключатель "Поиск клавиатурных шпионов (Keylogger)" позволяет включить детектор клавиатурных шпионов и троянских DLL (под троянской DLL понимается библиотека, внедряемая в адресное пространство запущенных процессов). Поиск ведется без применения механизма сигнатур, в результате чего результаты носят вероятностный характер. Для оценки степени похожести обнаруженных библиотек на клавиатурный шпион (KeyLogger) применяется нейросеть, распознающая характерные особенности клавиатурного перехватчика. Кроме того, AVZ производит поведенческий анализ всех заподозренных библиотек и выводит собранную информацию в протокол.
На заметку: Анализатор AVZ и нейросеть в состоянии найти подозрительные библиотеки и оценить степень их похожести на типовые перехватчики событий оконных событий, событий клавиатуры и мыши (т.н. hook). Однако анализатор не может отличить вредоносный перехватчик (предназначенный для слежения за пользователем) и перехватчик, выполняющий полезные действия.
Наверх

Флажок "Автоматически исправлять системные ошибки"

Переключатель "Автоматически исправлять системные ошибки" включает режим автоматического устранения опасных системных ошибок. Поиск системных ошибок ведется в ходе сканирования системы, на шаге 9. По умолчанию данный переключатель отключен, поэтому поиск ошибок ведется, информация об ошибках записывается в протокол, но они не устраняются. Следует учитывать, что помимо автоматического устранения ошибок можно применять мастер поиска и устранения проблем , который позволяет вручную выбрать, какие конкретно из найденных проблем следует исправить. В ходе автоматического устранения системных ошибок ведется запись проделанных изменений, позволяющая откатить эти изменения в случае необходимости через мастер поиска и устранения проблем .
Наверх
На заметку:
В случае проверки системы с нейтрализацией Kernel-Mode RootKit необходимо перезагрузиться после завершение проверки и лечения, а перед проверкой закрыть все приложения и сохранить открытые документы!! Это связано с тем, что нейтрализация перехватчиков может нарушить работу антивирусных мониторов, компонент Firewall и прочих программ, отвечающих за безопасность. Перезагрузка актуальна только в случае восстановления перехваченных функций - в этом случае AVZ указывает на необходимость перезагрузки в конце протокола.


3.1.4. Группа 'Параметры лечения'

Группа "Параметры лечения" содержит настройки, определяющие действия AVZ при обнаружении вирусов.
Основным в этой группе является переключатель "Удалять найденные вирусы". По умолчанию данный переключатель отключен и AVZ работает в диагностическом режиме - информация обо всех найденных вредоносных объектах заносится в протокол, но никаких действий над ними не производится (во время сканирования AVZ ничего не изменяет в реестре или на диске).
Переключатель "Удалять найденные вирусы"
При включении переключателя "Удалять найденные вирусы" AVZ переходит в режим лечения, при этом становятся доступными настройки для каждой из категорий вредоносных объектов. Для каждой категории объектов можно выбрать одно из двух действий - "удалять" (в этом случае производится удаление вредоносного объекта) и "Только отчет" - в этом случае лечение блокируется, но в протокол выводится сообщение об обнаруженном объекте.
Переключатель "Эвристическое удаление файлов"
Переключатель "Эвристическое удаление файлов" позволят включить "разумное" удаление вредоносных файлов. Оно состоит в том, что после удаления файла производится анализ системы и удаляются все обнаруженные ссылки на удаленный файл (ключи реестра для автозапуска, зарегистрированные в реестре классы, элементы автозапуска и WinLogon, элементы SPI/LSP и т.п.). В результате удаление файла получается максимально корректным и данный режим рекомендуется включить.
Переключатель "Копировать удаляемые файлы в Infected"
Переключатель "Копировать удаляемые файлы в Infected" включает режим создания резервных копий удаляемых файлов в папке Infected. Эта папка автоматически создается в каталоге AVZ. Для просмотра файлов в папке Infected в AVZ предусмотрен специальный просмотрщик, вызываемый из меню "Файл".
Переключатель "Копировать подозрительные в карантин"
Переключатель "Копировать подозрительные в карантин" позволяет включить режим копирования подозрительных объектов в карантин. Это очень удобно для последующей отправки файлов на анализ, т.к. AVZ сам делает копии подозрительных файлов и снабжает каждый файл информационным ярлыком, в котором указано местоположение файла на диске, дата и причина помещения в карантин. В окне просмотра карантина имеется возможность автоматического создания защищенного паролем архива для его пересылки по электронной почте.


3.1.5. Протокол

Утилита AVZ ведет два протокола:
•
Текстовый протокол AVZ – он размещен в нижней части главного окна программы. Текстовый протокол содержит разнообразную информацию, описывающий ход проверки системы, обнаруженные ошибки, найденный вредоносные файлы и т.п.
•
Протокол обнаруженных вредоносных файлов и подозрительных объектов (вызывается при нажатии кнопки [image] на панели управления справа от текстового протокола). Данный протокол представляет собой таблицы вида «файл» - «описание». В описании файла указывается название вируса или описание причин, по которым файл признан подозрительным. Каждая строка таблицы снабжена переключателем, который позволяет отметить файл. Отмеченные файлы можно вручную скопировать в карантин или удалить.
Текстовый протокол может автоматически фильтроваться, управление режимом фильтрации производится при помощи ключа командной строки MiniLog . Кроме того, предусмотрено дублирование выводимой в протокол информации параллельным выводом в текстовый файл - управление этим режимом производится при помощи ключа SpoolLog


3.2. Обновление баз

Обновление баз в AVZ начиная с версии 4.00 может производиться через Интернет.
Для выполнения обновления баз необходимо выполнить пункт меню "Файл/Обновление баз".
Загрузка ведется с одного из нескольких сайтов, заданных в списке источников обновления.
Выбор сайта по умолчанию производится автоматически случайным образом, но есть возможность задать сайт вручную.
Обновление баз состоит из четырех операций:
1. Загрузка файла с описанием актуального состояния AV баз.
2. Сравнение базы локального компьютера с описанием.
3. В случае обнаружения расхождений (ввиду появления в базе новых файлов, обновления существующих или обнаружения повреждения существующих) производится загрузка необходимых файлов и их установка.
4. Перезагрузка обновленных баз. Выполняется в случае необходимости.
В случае сбоя в ходе загрузки файлов все успешно загруженные файлы остаются в папке Temp и при повторных попытках обновления их повторная загрузка не производится.
По умолчанию для обращения в Интернет применяются настройки, заданные в Internet Explorer. Однако в ряде случаев (например, если не для работы с Интернет применяется IE или он не настроен) требуется вручную задать настройку обмена с Интернет. Для этого необходимо нажать кнопку в правой части поля "Настройки", что приведет к выводу окна настройки:
В данном окне можно задать один из четырех режимов работы:
  • •
    Использовать настройки Internet Explorer. В этом режиме все настройки обмена берутся из настроек Internet
  • •
    Прямое соединение с Internet. Обмен с Интернет ведется напрямую
  • •
    Через прокси-сервер, не требующий авторизации. Обмен с Интернет ведется через прокси-сервер, в этом режиме обязательно указать имя или IP адрес прокси-сервера в формате имя:порт, например my_proxy:3128 или 192.168.0.1:8080
  • •
    Через прокси-сервер, требующий авторизацию. Отличается от предыдущего режима тем, что прокси сервер требует передачи имени и пароля
Переключатель "запомнить настройки" позволяет сохранить введенные настройки для того, чтобы не выполнять перенастройку при каждом запуске AVZ. Настройки сохраняются в файле AVZ.INI и автоматически загружаются при следующем запуске AVZ.
На заметку: В случае применения AVZ в корпоративной сети возможно обновление баз с любого адреса и с любыми параметрами, заданными администратором. Для этого необходимо применить скрипт, содержащий команду ExecuteAVUpdateEx


3.3. Отложенное удаление файла

Отложенное удаление файла является встроенной функцией AVZ и применяется автоматически сканером для удаления известных вредоносных программ. Отложенное удаление позволяет удалять файлы запущенных приложений, загруженных DLL или файлы, открытые с монопольным доступом.
AVZ выполняет отложенное удаление в два этапа:
1. Делается попытка удаление файлы обычным способом. Если эта попытка успешна и файл удаляется, то отложенное удаление не применяется
2. Если удаление файла на шаге 1 было неуспешным, то файл регистрируется для отложенного удаление.
Отложенное удаление файла производится при помощи пункта меню "Файл\Отложенное удаление файла".
После выполнения этого пункта меню выводится диалоговое окно для ввода имени файла:
Имя файла можно ввести вручную, скопировать через буфер обмена или выбрать в диалоговом окне, которое вызывается при нажатии кнопки в правой части поля для ввода имени файла. После ввода имени файла необходимо нажать ОК для его удаления или кнопку "Отмена" для закрытия окна без удаления файла.
В случае нажатия кнопки "ОК" выводится диалоговое окно с настройками параметров удаления файла:
Поддерживается два режима удаления:
1. Обычное удаление указанного файла (производится при выборе опции "Удаление файлов"). Этот режим не рекомендуется применять
2. Удаление файла и эвристическая чистка ссылок на файл в системе. В этом режиме кроме удаления файла производится автоматическая зачистка автозапуска и ряда ключей реестра, в которых мог быть зарегистрирован удаляемый файл (Winlogon, регистрация CLSID, расширения Internet Explorer и проводника и т.п.). Подобная очистка производится автоматически и делает удаление более корректным.
Если включить переключатель "Копировать удаляемые файлы в карантин", то перед удалением файла в карантине будет создана его копия.


3.4. Профили настроек

AVZ позволяет сохранять настройки в виде именованных профилей. Профили являются текстовыми и содержат параметры, идентичные параметрам командной строки . После сохранения профили можно редактировать вручную.
Для сохранения текущих настроек в виде профиля необходимо вызвать пункт меню "Файл\Сохранить профиль настроек". В открывшемся диалоговом окне сохранения файла необходимо задать имя файла и местоположение. Расширение файла не играет роли, но по умолчанию у профилей используется расширение prf.
Загрузка профиля производится при помощи пункта меню "Файл\Загрузить профиль настроек". При выполнении этого пункта меню выводится диалоговое окно открытия файла, в котором необходимо выбрать нужный профиль.
У AVZ предусмотрена поддержка профиля по умолчанию. Этот профиль автоматически загружается при старте AVZ и должен располагаться в рабочей папке AVZ под именем "avz.prf".


3.5. Профили локализации

Профиль локализации - это INI файл, лежащий в папке на одном уровне с avz.exe с расширением loc. По умолчанию это avz.loc, но если avz.exe переименовывается скажем в test.exe, то профиль локализации должен симметрично переименоваться в test.loc. Профиль содержит секции:
[MAIN] - главная секция с настройками. На текущий момент содержит единственный параметр Lang=X, аналогичный параметру командной строки (параметр командной строки имеет приоритет над параметром Lang секции Main)
[XX] - таких секций может быть неограниченное множество, где XX - название локализации, в частности - RU для русского, EN - для английского.
Содержит параметры:
Font - имя шрифта, применяемого в данной локализации вместо стандартного MS San Serif
CharSet - кодовая страница. RUSSIAN_CHARSET соответствует 204, OEM_CHARSET - 255, ANSI_CHARSET - 0, DEFAULT_CHARSET - 1)
ThreadLocale - если таковой параметр существует, то производится вызов SetThreadLocale, и заданное в нем значение передается данной API функции.
Параметры CharSet и ThreadLocale не имеют смысла для версии 5 по причине того, что данная версия работает в Unicode и проблем с кодовой страницей в ней не возникает.
Пример профиля локализации:
[Main]
Lang=RU
[RU]
Font=Arial
CharSet=204


4. Карантин

AVZ 5. Руководство пользователя
×

  • 4. Карантин
  • Предыдущая
  • Следующая

Содержание 4. Карантин

4.1. Карантин и папка Infected
4.2. Автокарантин
4.3. Добавление в карантин по списку


4.1. Карантин и папка Infected

В утилите AVZ предусмотрено две папки для хранения копий удаляемых вредоносных файлов (папка Infected - карантин для инфицированных файлов) и подозрительных файлов (папка "карантин"), найденных эвристическим анализатором или помещенных в карантин пользователем вручную.
Работа с карантином и папкой Infected абсолютно идентична и производится в специальном окне, вызываемом из меню "Файл". Для работы с карантином необходимо воспользоваться меню "Просмотр карантина", для работы с папкой Infected - "Файл/ Просмотр папки Infected".
Дальнейшую работу для определенности рассмотрим на примере папки "Карантин".
В левой части окна размещается список вложенных папок папки "Карантин". Для упрощения работы папки именуются автоматически - имя папки формируется по маске ГГГГ-ММ-ДД, где ГГГГ - четыре цифры года, ММ - две цифры месяца, ДД - две цифры дня. Вложенные папки создаются автоматически по мере надобности, и такая структура существенно упрощает анализ файлов в карантине - они оказываются сгруппированными по дате занесения в карантин. Текущая папка подсвечивается маркером. Кнопки под списком папок позволяют удалить текущую папку (Кнопка "Удалить папку") и произвести полную очистку карантина (кнопка "Очистить карантин"). Полная очистка карантина приводит к удалению всех файлов и папок, находящихся в карантине.
При выборе папки в левой части окна отображается список находящихся в карантине файлов. Для каждого файла отображается полное исходное имя файла, причина помещения файла в карантин (имя вируса, сообщение о подозрении на вирус, информация о занесении файла вручную), имя файла в карантине и его размер.
Каждый файл можно отметить при помощи переключателя перед его именем. Для быстрой отметки всех файлов можно воспользоваться меню, вызываемым при нажатии правой кнопки над списком (меню содержит пункты, позволяющие отметить все файлы, снять отметку со всех файлов и инвертировать отметку).
Над списком файлов располагается панель инструментов с кнопками, позволяющими выполнять операции над отмеченными файлами. Нажатие кнопки "Удалить отмеченные файлы" позволяет избирательно удалить один или несколько отмеченных файлов, что полезно для чистки карантина. Кнопка "Архивировать отмеченные файлы" позволяет создать архив, в который помещаются отмеченные файлы. Архив по формату полностью совместим с ZIP архивом и автоматически защищается паролем "virus". Пароль полезен для отправки файлов на анализ, т.к. незащищенные паролем файлы могут быть остановлены почтовым антивирусом. Архивация выполняется встроенным в AVZ архиватором (для работы этой функции устанавливать и настраивать архиваторы типа WinZip не требуется). Если при создании архива указывается имя существующего файла zip, то файлы дописываются к существующему архиву. Таким образом, если возникает необходимость поместить в архив несколько файлов из разных папок карантина, то эту задачу можно решить, указывая в диалоге "Поместить в архив" один и тот же архивный файл.
Файлы в карантине (и соответственно в архиве) переименовываются - имена файлов формируются как avzNNNN.dta (где NNNNN - порядковый номер файла в папке). Для каждого файла avzNNNN.dta создается avzNNNN.ini, содержащий описание файла (исходное имя и местоположение файла в системе, дата и время помещения в карантин, причины карантина и размер файла).
Кнопка "Добавить по списку" вызывает диалоговое окно карантина файлов по списку .
Кнопка "Автодобавление" вызывает диалоговое окно системы автоматического карантина файлов .


4.2. Автокарантин

Автокарантин - это встроенное средство AVZ, позволяющее автоматически поместить в карантин все файлы, которые AVZ не опознает как компоненты системы при помощи каталога безопасности Microsoft или как безопасные объекты при помощи базы безопасных объектов. Автоматический карантин очень удобен для оперативного сбора файлов на исследуемом компьютере для последующего изучения или проверки несколькими антивирусами в стационарных условиях.
Автокарантин вызывается из меню "Файл\Автокарантин" или при нажатии кнопку "Автодобавление" в окне просмотра содержимого карантина
Переключатели в диалоговом окне автоматического карантина позволяют указать, файлы каких категорий необходимо поместить в карантин. По умолчанию отмечены все категории.
Для категории "Службы и драйвера" предусмотрена дополнительная настройка - по умолчанию в карантин копируются только активные службы и драйверы. Однако при помощи выпадающего списка можно выбрать другой режим - "все службы и драйверы".
Копирование в карантин начинается при нажатии кнопки "Пуск" и может продолжаться достаточно продолжительное время (в зависимости от конкретной конфигурации, наличия антивирусного монитора и мощности компьютера автокарантин работает от 5-10 секунд до 2-3 минут). Процесс анализа отображается прогресс-индикатором.
Нажатие кнопки "Закрыть" закрывает окно автоматического копирования в карантин.


4.3. Добавление в карантин по списку

Сервис "Добавление в карантин по списку" удобен для массового добавления файлов в карантин по заранее известному списку. Для вызова диалогового окна карантина по списку можно применить меню "Файл\Добавление в карантин по списку" или нажать кнопку "Добавить по списку" в окне карантина .
Список файлов необходимо внести в поле "Список файлов", в одной строке должно быть по одному имени файла. В именах файлов допускается указание символов маски "*" и "?". После заполнения списка файлов необходимо нажать кнопку "Пуск" для выполнения карантина. В поле "Протокол" при этом формируется протокол выполнения карантина файлов.


5. Встроенные средства поиска

AVZ 5. Руководство пользователя
×

  • 5. Встроенные средства поиска
  • Предыдущая
  • Следующая

Содержание 5. Встроенные средства поиска

5.1. Поиск данных в реестре
5.2. Поиск файлов на диске
5.3. Поиск Cookie по данным


5.1. Поиск данных в реестре

В окне системы поиска в реестре размещается строка с образцом для поиска. В этой строке необходимо ввести образец для поиска, например имя DLL файла или фрагмент URL, установившегося в качестве домашней страницы.
При нажатии кнопки "Пуск" производится запуск процесса поиска (сам процесс может длиться несколько минут - скорость поиска зависит от производительности компьютера, количества ключей в реестре и настроек программы). Кнопка "Стоп" позволяет прервать процесс поиска.
Закладка "Протокол"
Закладка "Протокол" содержит протокол работы программы. В протоколе содержатся найденные ключи, служебная информация, информация об удаленных ключах. Протокол может быть скопирован через буфер обмена для размещения в конференции или отправки по электронной почте. Кроме того, можно сохранить протокол в текстовый файл (меню "Файл/Сохранить протокол").
Закладка "Найденные ключи"
Закладка "Найденные ключи" содержит таблицу с отсортированным по имени ключа списком всех найденных ключей (в таблице три столбца - "ключ", "параметр" и "значение").
Каждая строка таблицы содержит переключатель (check box), который позволяет отметить строку.
Под таблицей размещены две кнопки:
·"Создать reg файл с отмеченными ключами". При нажатии на эту кнопку создается стандартный reg файл, в который экспортируются отмеченные ключи реестра. Данная функция полезна для создания резервных копий перед удалением ключей. Важным моментом является то, что в файл экспортируются только отмеченные ключи (если отмеченный ключ имеет параметры или вложенный ключи, то все они не будут экспортированы). Для полного экспорта одного или нескольких ключей следует воспользоваться программой Regеdit;
·"Удалить отмеченные ключи". Удаляет отмеченные ключи (или значения ключей). При удалении ключей следует соблюдать большую осторожность, т.к. повреждение реестра может привести к краху системы. Поэтому если Вы не уверены в назначении удаляемых ключей, то Вам необходимо обязательно проконсультироваться со специалистами;
При нажатии над таблицей правой кнопки мыши выводится всплывающее меню, позволяющее отметить все строки, снять пометку со всех строк и инвертировать отметку.
Закладка "Параметры"
Данная закладка содержит настройки поиска и настройки программы.
·Группа параметров "Искать в ключах" позволяет указать, в ключах каких ветвей реестра необходимо производить поиск.
·Группа параметров "Просматривать при поиске" позволяет настроить область поиска. По умолчанию поиск ведется в именах и значениях параметров


5.2. Поиск файлов на диске

Для поиска файлов на диске в AVZ встроена специальная сервисная функция, вызываемая из меню "Сервис / Поиск файлов на диске". Поиск файлов средствами AVZ имеет ряд преимуществ над системным поиском по ряду причин:
·Система поиска файлов AVZ защищена встроенной в AVZ системой противодействия RootKit - это с сущности основная причина, по которой в AVZ встроена система поиска файлов. Маскировка процессов в памяти и файлов на диске присуща многим современным троянским программам, производится эта маскировка как правило перехватом API. В результате системные средства поиска позволят обнаружить на диске маскируемые файлы(и соответственно не позволят скопировать их для отправки на анализ).
·Система поиска файлов связана с карантином AVZ - любой из найденных файлов может быть скопирован в карантин;
·Поиск производится независимо от расширения файла, его местоположения и атрибутов - системные средства поиска часто при поиске показывают не все файлы (это особенно важно для системных папок типа Downloaded Program Files)
Для выполнения поиска необходимо отметить диски (или папки) в древовидном списке дисков и папок "Область поиска". Меню, вызываемое по правой кнопке мыши над проводником "Область поиска", позволяет быстро отметить жесткие диски, дисководы и CD ROM. После задания области поиска необходимо указать имя файла или маску. Можно указать несколько имен файлов или несколько масок, перечисляя их через пробел, запятую или точку с запятой. Можно сочетать имена файлов и маски.
Примеры:
*.* - поиск всех файлов
*.exe - поиск файлов с расширением exe
dialer.exe - поиск файла с конкретным именем "dialer.exe"
dialer.exe, *.dll, trojan*.sys - поиск файлов с именем dialer.exe или файлов с любым именем и расширением DLL или файлов с именем Trojan<любые символы>.sys
*.exe, *.dll, *.sys, *.ocx - поиск файлов с указанными расширениями
В маске можно использовать стандартные символы * (на месте * могут встречаться любые символы в любом количестве) и ? (любой символ в заданной позиции).
Пример:
Trojan.ex? - этой маске к примеру могут соответствовать файлы Trojan.exe и Trojan.ex_
Маска является обязательной (для поиска файлов с любым именем необходимо указать маску *.*).
Кроме маски можно задать ряд условий поиска - размер, дату создания, дату модификации. Для включения условия необходимо установить переключатель, выбрать тип условия их списка и заполнить параметры в полях. Если параметр заполнен неправильно, то он подчеркивается красной волнистой линией и поиск блокируется. При наведении курсора мыши на некорректное поле выводится всплывающая подсказка, поясняющая причину ошибки.
Особого внимания заслуживает опция фильтра "Исключить файлы, известные AVZ как системные и безопасные". Включение данного переключателя приводит к тому, что каждый файл, соответствующий всем прочим условиям поиска проверяется по базе известных AVZ безопасных и системных файлов. Опознанные по базе безопасные файлы исключаются из результатов поиска. Это, как правило, очень существенно сокращает количество найденных файлов. Данный режим фильтрации очень удобен для поиска вирусов и SpyWare - можно задать маску поиска "*.exe *.dll", указать папку Windows, задать диапазон дат (как правило имеет смысл искать файлы, созданные за последний месяц от момента появлении проблем с ПК) и включить опцию "Исключить файлы, известные AVZ как системные и безопасные"
Поиск запускается при нажатии кнопки "Пуск". Для остановки поиска применяется кнопка "Стоп". Результаты поиска выводятся в протокол (закладка "Протокол") и в таблицу (Закладка "Найденные файлы"). В таблице отображаются основные параметры найденных файлов, любой из файлов можно отметить при помощи переключателя перед его именем. Отмеченные файлы можно скопировать в карантин или удалить (эти операции выполняются при нажатии соответствующих кнопок под списком).
На заметку:
У таблицы найденных файлов есть меню, вызываемое по правой кнопке мыши. Данное меню позволяет отметить все найденные файлы, снять и инвертировать отметку.


5.3. Поиск Cookie по данным

Для оперативного анализа содержимого хранимых на компьютере Cookies можно применить "Поиск Cookie по данным". Этот анализатор изучает Cookie, которые сохраняются браузерами Internet Explorer и Mozilla Firefox. Окно системы поиска вызывается из меню «Сервис\Поиск cookies». Данный анализатор позволяет пользователю узнать, какие сайты сохраняют в cookies критичную для него информацию - в последствии для этих сайтов можно создать правила, блокирующие прием от них cookies.
Особенностью системы поиска является то, что поиск может вестись одновременно по нескольким текстовым образцам (при этом образцы разделяются пробелом или «;»). Поиск ведется с учетом того, что данные в cookie могу быть представлены в формате Base64, UUE, url-encoding или quoted-printable. Анализируемые форматы можно выбрать на закладке «Настройки», по умолчанию ведется попытка поиска во всех форматах.
Для проведения анализа в строке «Образец» необходимо ввести фрагменты e-mail адресов пользователя, применяемые для регистрации на Интернет сайтах имена и пароли, фрагменты номеров кредитных карт или иную информацию, которая вводилась в WEB формы и утечка которой, по мнению пользователя, представляет для него угрозу. При указании образцов поиска следует учитывать, что по сути ведется поиск вхождения указанных образцов в данных cookie, поэтому часто для эффективного поиска достаточно указать уникальные фрагменты, например "newvirus" вместо «newvirus@z-oleg.com» или последние 5 цифр номера кредитной карты вместо ее полного номера.
После задания образцов необходимо нажать кнопку «Пуск» для запуска поиска. Поиск может занять некоторое время, как правило, не более 10-20 секунд. После завершения поиска формируется протокол, в котором указано, в каких cookie встречались указанные образцы.
На закладке «Найденные Cookies» можно просмотреть список найденных Cookies, при нажатии кнопки «Просмотреть Cookie» на экран выводится содержимое текущего Cookie для детального анализа.
На закладке "Настройки" задаются настройки поиска. Настройки позволяют указать типы браузеров, для которых необходимо анализировать Cookie и типы кодировок, которые необходимо применять в ходе анализа содержимого Cookie.


6. Встроенные утилиты

AVZ 5. Руководство пользователя
×

  • 6. Встроенные утилиты
  • Предыдущая
  • Следующая

Содержание 6. Встроенные утилиты

6.1. Диспетчер процессов
6.2. Диспетчер служб и драйверов
6.3. Модули пространства ядра
6.4. Менеджер Winsock SPI (LSP, NSP, TSP)
6.5. Открытые порты TCP/UDP
6.6. Менеджер автозапуска
6.7. Менеджер расширений IE
6.8. Менеджер расширений проводника
6.9. Менеджер апплетов панели управления (CPL)
6.10. Менеджер расширений системы печати
6.11. Менеджер планировщика заданий (Task Scheduler)
6.12. Менеджер внедренных dll
6.13. Менеджер протоколов и обработчиков
6.14. Менеджер Active Setup
6.15. Менеджер файла Hosts
6.16. Общие ресурсы и сетевые сеансы


6.1. Диспетчер процессов

Для поиска шпионского ПО и троянских программ вручную в программу AVZ встроен собственный диспетчер процессов.
Вызов диспетчера производится из меню "Сервис \ Диспетчер процессов".
Диспетчер процессов позволяет:
· отображать список запущенных процессов (список процессов строится различными способами, для Windows NT предусмотрено построение списка процессов штатными средствами, при помощи Native API, при помощи подсистемы поиска скрытых процессов);
· отображать список библиотек для каждого из процессов;
Для всех объектов диспетчер процессов может вычислять контрольные суммы MD5 и собирает дополнительную информацию. .
Другой особенностью диспетчера процессов AVZ является возможность использования в его работе системы противодействия RootKit. В результате диспетчер процессов AVZ, как правило, в состоянии обнаружить и остановить процессы, маскируемые RootKit. Кроме того, если в систему установлен драйвер AVZ PM, до собранная им информация используется диспетчером процессов, что в частности позволяет удалять маскирующиеся процессы из KernelMode.
Закладка "Процессы"
Закладка "Процессы" содержит список процессов (верхняя таблица) и информацию о текущем процессе (на закладках под таблицей процессов). Таблица процессов обновляется при нажатии кнопки "Обновить".
Кнопка "Удалить процесс" позволяет завершить работу текущего процесса.
Кнопка "Копировать в карантин" позволяет отправить копию исполняемого файла текущего процесса в папку "Карантин". Данная кнопка доступна только в случае, если файл не опознан по базе безопасных
Кнопка "Копировать в карантин все процессы, не опознанные как безопасные" позволяет отправить копию исполняемых файлов всех процессов, не опознанных по базе безопасных в папку "Карантин".
Кнопка "Сохранить протокол".
Производит формирование HTML протокола, который сохраняется на диск в указанное пользователем место (для сохранения протокола выводится диалог сохранения файла стандартного вида). После сохранения протокола выдается предложение открыть его (открытие производится применяемым по умолчанию браузером).
Закладка "Параметры"
На закладке "Параметры" размещены настройки диспетчера процессов:
·Переключатель "Вычислять контрольные суммы MD5 для файлов" - включение этого переключателя активирует расчет контрольных сумм для каждого файла. Этот процесс требует больших затрат ресурсов и обновление списка происходит медленнее;
·Переключатель "Проверять файлы по базе безопасных файлов" - включение этого переключателя активирует проверку исполняемых файлов и DLL по базам безопасных объектов, идущим в составе AVZ. Файлы, опознанные как безопасные, выделяются при просмотре зеленым цветом. Данный режим полезен для поиска неопознанных процессов и DLL
Контекстное меню списка DLL
·Копировать в карантин. Выполняет копирование текущего файла в карантин (безопасные файлы в карантин не копируются)
·Поиск в Google - открывает браузер по умолчанию и передает ему строку URL, выполняющего поиск в Google по имени файла
·Поиск в Yandex - открывает браузер по умолчанию и передает ему строку URL, выполняющего поиск в Yandex по имени файла
·Поиск в Rambler - открывает браузер по умолчанию и передает ему строку URL, выполняющего поиск в Rambler по имени файла
·Поиск в реестре по имени файла - вызывает окно поиска в реестре, в образце поиска которого уже задано имя текущего файла
·Поиск в реестре по имени файла - вызывает окно поиска в реестре, в образце поиска которого уже задано полное имя текущего файла
·Принудительно выгрузить DLL - выполняет принудительную выгрузку указанного модуля.
На заметку
Принудительная выгрузка модуля в большинстве случаев приведет к неустранимой ошибке в приложении, из адресного пространства которого выгружена DLL. Собственно, ошибка в этом приложении любом случае произойдет при первой же попытке приложения вызвать функцию выгруженной таким образом DLL.


6.2. Диспетчер служб и драйверов

Для поиска шпионского ПО и троянских программ вручную в программу AVZ встроен собственный диспетчер служб и драйверов (он работает только под NT и последующими системами на ее основе - Windows 2000, XP).
Диспетчер служб и драйверов позволяет:
· Отображать список служб и драйверов с фильтрацией по типу (служба, драйвер) и статусу (запущен, не запущен);
· Останавливать и запускать службы (или загружать/выгружать драйвера;
· Копировать файлы в карантин;
· Формировать HTML протоколы.
Особенностью диспетчера служб и драйверов AVZ является возможность использования в его работы системы противодействия RootKit.
Вызов диспетчера производится из меню "Сервис\Диспетчер служб и драйверов"
Фильтр
Фильтр позволяет управлять информацией, отображаемой на закладках с данными. Тип задает тип записей (Служба, Драйвер, Все), Поле статус - статус службы/драйвера в текущий момент (Активный, Не активный, Все). При включении закладки "Сервисы (по анализу реестра)" фильтрация по статусу становится невозможной - тип фильтра автоматически устанавливается в положение "Все".
Закладки
В окне диспетчера служб и драйвером предусмотрено три закладки:
"Сервисы (по данным API)" - отображает службы и (или) драйверы по данным, возвращаемым API
"Сервисы (по анализу реестра)" - отображает службы и (или) драйверы по данным, зарегистрированные в реестре
"Параметры" - параметры диспетчера. Содержит единственный переключатель, управляющий проверкой файлов по базе безопасных.
Кнопки панели управления
·Кнопка "Обновить". Обновляет отображаемый список. Обновление производится автоматически при смене параметров фильтрации
·Кнопка "Сохранить протокол". Производит формирование HTML протокола, который сохраняется на диск в указанное пользователем место (для сохранения протокола выводится диалог сохранения файла стандартного вида). После сохранения протокола выдается предложение открыть его (открытие производится применяемым по умолчанию браузером).
·"Копировать в карантин" - копирует текущий файл в карантин. Кнопка доступна только для службы и драйверов, не опознанных по базе безопасных и каталогу Microsoft
·"Копировать в карантин все файлы, не опознанные по как безопасные" - копирует в карантин все службы/драйверы, не опознанные по базе безопасных и каталогу Microsoft
·"Запустить службу (загрузить драйвер)" - производит попытку запуска службы или загрузки драйвера
·"Остановить службы (выгрузить драйвер)"- производит попытку остановки службы или выгрузки драйвера
·"Удалить текущую службу\драйвер" - производит удаление текущей службы или драйвера (файл с диска при этом не удаляется).


6.3. Модули пространства ядра

Менеджер модулей пространства ядра предназначен для отображения модулей, загруженных в пространство ядра. Запуск менеджера производится из меню "Сервис/Модули пространства ядра".
Менеджер модулей пространства ядра позволяет:
  • •
    Просматривать список модулей с сортировкой по имени, базовому адресу или размеру модуля;
  • •
    Копировать в карантин модули, не опознанные по базе безопасных AVZ;
  • •
    Выполнять снятие дампа памяти любого модуля для последующего изучения.
  • •
    Формировать HTML протоколы
Менеджер модулей пространства ядра связан с автокарантином, исследованием системы и системой AVZPM


6.4. Менеджер Winsock SPI (LSP, NSP, TSP)

Менеджер SPI/LSP позволяет просматривать списки поставщиков службы имен (NSP) и транспорта (TSP). Каждый поставщик может быть удален пользователем вручную. Подробно про SPI/LSP/TSP/NSP провайдеры можно почитать в отдельно разделе - Local Service Provider (LSP/SPI)
В окне менеджера Winsock SPI размещено три закладки:
  • •
    Поставщики пространства имен (NSP - Name Service Provider). Отображает список библиотек, зарегистрированных в качестве NSP поставщиков. Для каждой библиотеки отображается название поставщика, статус и полное имя исполняемого файла. Файла могут быть скопированы в карантин, включены или отключены или удалены при помощи кнопок на панели под списком поставщиков
  • •
    Поставщики транспортных протоколов. Данная закладка аналогична предыдущей, но для поставщиков транспортных протоколов предусмотрена только операция удаления
  • •
    Поиск ошибок. Данная закладка содержит список ошибок в настройках LSP, обнаруженных в ходе их изучения. На данной закладке предусмотрена кнопка "Автоматическое исправление найденных ошибок", которая запускает процесс автоматического устранения ошибок в настройках.
На заметку
Поиск ошибок может некорректно работать в случае запуска AVZ из терминальной сессии. Попытка исправления из терминальной сессии может привести к неработоспособности сети.
На заметку
Автоматическое исправление ошибок доступно из диалогового окна " Восстановление системы " и из скриптового языка (см. команду AutoFixSPI ).
Начиная с версии 4.26 перед исправлением ошибок AVZ автоматически создает резервную копию настроек в папке BackUp. Резервная копия является стандартным REG файлом.


6.5. Открытые порты TCP/UDP

В AVZ встроен менеджер, позволяющий просматривать:
· Открытые порты TCP
· Активные соединения по протоколу TCP/IP
· Открытые порты UDP
Для каждого открытого порта (или соединения) выводится имя исполняемого файла, если таковой возможно установить. Кроме того, у AVZ имеется особая база с описанием назначения наиболее распространенных портов и степени их опасности (опасными считаются порты, используемые сетевыми вирусами, троянскими и Backdoor программами). Открытый порт, который используется опасной программой, выделяется красным цветом и в описании указано, какие вредоносные программы могут использовать данный порт.
Кроме возможности просмотра списка открытых портов в AVZ встроена автоматическая проверка, выполняемая в ходе сканирования системы. В ходе данной проверки производится построение списка открытых портов TCP и UDP, после чего AVZ сопоставляет этот список с базой портов, применяемых троянскими программами и сетевыми вирусами. При обнаружении совпадений в протокол выводятся предупреждения с указанием номера порта, его описания и имени программы (имя программы выводится только в XP, Windows 2003).


6.6. Менеджер автозапуска

Менеджер автозапуска отображает список программ и библиотек, загружаемых в ходе загрузки системы. Менеджер позволяет:
· Отображать список автозапускаемых программ с указанием метода запуска;
· Временно отключать элементы автозапуска;
· Удалять элементы автозапуска;
· Копировать файлы в карантин;
· Формировать HTML протоколы
Анализатор менеджера автозапуска подключен к исследованию системы и автокарантину.
Окно менеджера автозапуска разделено на две части. В левой отображается список категорий автозапуска - папки автозапуска, реестре, Winlogon, MPR Servicies. Для просмотра конкретной группы автозапуска необходимо выбрать ее в древовидном списке категорий.


6.7. Менеджер расширений IE

Менеджер расширений IE отображает список подключенных к Internet Explorer модулей расширения. Модули расширения - это BHO и различные панели.
Менеджер позволяет:
·Отображать список модулей расширения IE;
·Временно отключать расширения;
·Удалять модули расширения (при этом исполняемый файл не удаляется - удаляется только регистрационная информация в реестре);
·Копировать файлы в карантин;
·Формировать HTML протоколы
Анализатор менеджера расширений IE подключен к исследованию системы и автокарантину.


6.8. Менеджер расширений проводника

Менеджер расширений проводника отображает список подключенных к Explorer модулей расширения.
Менеджер позволяет:
· Отображать список модулей расширения проводника;
· Временно отключать расширения;
· Удалять модули расширения (при этом исполняемый файл не удаляется - удаляется только регистрационная информация в реестре);
· Копировать файлы в карантин;
· Формировать HTML протоколы
Анализатор менеджера расширений Explorer подключен к исследованию системы и автокарантину.


6.9. Менеджер апплетов панели управления (CPL)

Менеджер апплетов панели управления отображает список CPL файлов. CPL файл - это динамическая библиотека, экспортирующая определенные функции для взаимодействия с панелью управления.
Менеджер позволяет:
·Отображать апплетов панели управления;
·Временно отключать любой из апплетов;
·Удалять апплеты (при этом удаляется исполняемый CPL файл);
·Копировать файлы в карантин;
·Формировать HTML протоколы
Анализатор апплетов панели управления подключен к исследованию системы и автокарантину.


6.10. Менеджер расширений системы печати

Менеджер расширений проводника отображает список расширений системы печати. Известно две разновидности расширений - мониторы печати и провайдеры.
Менеджер позволяет:
  • •
    Отображать список модулей расширений системы печати;
  • •
    Временно отключать расширения;
  • •
    Удалять модули расширения (при этом исполняемый файл не удаляется - удаляется только регистрационная информация в реестре);
  • •
    Копировать файлы в карантин;
  • •
    Формировать HTML протоколы
Анализатор менеджера расширений печати подключен к исследованию системы и автокарантину.


6.11. Менеджер планировщика заданий (Task Scheduler)

Менеджер планировщика заданий отображает задания, поставленные в очередь планировщиком задач или командой AT. Анализ заданий полезен ввиду того, что некоторые SpyWare и троянские программы используют планировщик для своего запуска или для запуска дроппера, который восстанавливает удаленный компоненты SpyWare.
Менеджер позволяет:
·Отображать список заданий планировщика;
·Удалять задания;
·Копировать файлы в карантин;
·Формировать HTML протоколы
Анализатор менеджера планировщика заданий подключен к исследованию системы и автокарантину.


6.12. Менеджер внедренных dll

Менеджер внедренных DLL позволяет просмотреть список всех посторонних DLL, внедренных в процесс AVZ. Для каждой DLL выводится дополнительная информация (в частности, определенная нейросетью степень похожести на типовой перехватчик). Цветовая раскраска таблицы стандартна для AVZ - опознанные по базе безопасных библиотеки выделяются зеленым цветом.
Основание назначение анализатора - поиск причины сбоев в работе программ, вызванных установкой в систему некоторых перехватчиков - он показывает все внедренные DLL, в то время как искатель троянских DLL и кейлоггеров отображает только подозрительные.
Менеджер обладает типовой для остальных менеджеров AVZ функциональностью - карантин отдельного файла или всех неопознанных файлов, сохранение HTML протокола.


6.13. Менеджер протоколов и обработчиков

Менеджер протоколов и обработчиков отображает список модулей, зарегистрированных в системе в качестве обработчиков для протоколов (например, AP GZIP Encoding/Decoding Filter) и обработчиков (Handler-s), например ftp: Asychronous Pluggable Protocol Handler или http: Asychronous Pluggable Protocol Handler).
Менеджер позволяет:
·Отображать список модулей, зарегистрированных в качестве обработчиков;
·Временно отключать любой из обработчиков;
·Удалять обработчики (при этом исполняемый файл не удаляется - удаляется только регистрационная информация в реестре);
·Копировать файлы в карантин (возможно автоматическое копирование всех неопознанных файлов);
·Формировать HTML протоколы
Анализатор протоколов и обработчиков подключен к исследованию системы и автокарантину.


6.14. Менеджер Active Setup

Менеджер Active Setup отображает список приложений, зарегистрированных в качестве Active Setup инсталляций. Известен ряд вредоносных программ, применяющих регистрацию в Active Setup для скрытного автозапуска.
Менеджер позволяет:
·Отображать список приложений, зарегистрированных в Active Setup;
·Временно отключать любое из приложений;
·Удалять записи Active Setup (при этом исполняемый файл не удаляется - удаляется только регистрационная информация в реестре);
·Копировать файлы в карантин (возможно автоматическое копирование всех неопознанных файлов);
·Формировать HTML протоколы
Анализатор Active Setup подключен к исследованию системы и автокарантину.


6.15. Менеджер файла Hosts

Менеджер файла Hosts позволяет просмотреть содержимое файла Hosts с возможностью удаления любой из его строк. Кроме удаления строк файла Hosts предусмотрена кнопка очистки данного файла, которая оставляет в файле только одну строку "127.0.0.1 localhost", что полезно для оперативной чистки данного файла после его повреждения троянскими программами.
Анализатор менеджера файла Hosts подключен к исследованию системы.


6.16. Общие ресурсы и сетевые сеансы

Данный менеджер выполняет функции, аналогичные штатной системной утилите "Инспектор сети". В окне менеджера имеется три закладки - "Общие ресурсы", "Сетевые сеансы" и "Открытые файлы". Информация на данных закладках обновляется автоматически с интервалом 2 секунды.


7. Функции анализа и восстановления

AVZ 5. Руководство пользователя
×

  • 7. Функции анализа и восстановления
  • Предыдущая
  • Следующая

Содержание 7. Функции анализа и восстановления

7.1. Исследование системы
7.2. Восстановление системы
7.3. Стандартные скрипты
7.4. Резервное копирование
7.5. Мастер поиска и устранения проблем


7.1. Исследование системы

Исследование системы - это функция, позволяющая изучить систему и сформировать HTML протокол, позволяющий обнаружить подозрительные файлы и программы. Исследование системы может применяться для оперативного изучения системы и (или) последующей отправки протокола для анализа в конференции вирусологов.
Запуск исследования системы производится из меню "Файл / Исследование системы", при выполнении которого выводится диалоговое окно исследования системы.
Переключатели позволяют указать, какую информацию необходимо собрать в ходе исследования системы. По умолчанию все переключатели включены и сбор информации идет по максимуму.
На исследование системы оказывает влияние антируткит (поскольку нейтрализация перехватов может привести к отображению маскируемой руткитом информации) и наличие в системе драйвера расширенного мониторинга системы AVZPM .
Важно отметить факты, касающихся исследование системы:
1. В ходе исследования не производится активное воздействие на систему (не правится реестр, не оказывается воздействие на состояние запущенных процессов или служб и т.п.). Как следствие, его можно повторять многократно без риска для ПК, и после исследования не требуется перезагрузка.
2. В ходе исследования системы AVZ не обменивается с "облаком" и какими бы то ни было внешними ресурсами, и никуда не передает собираемую информацию. Как следствие, доступ в сеть Интернет исследуемому ПК не требуется.
3. Созданные в ходе исследования протоколы никуда не передаются, сохраняются в указанном пользователем месте на диске, и могут быть просмотрены пользователем при помощи любого браузера, или отправлены пользователем на исследование по запросу специалистов.
Группа параметров "Собираемая информация"
Переключатель "Запущенные процессы"
Если он включен, то в отчет исследования системы выводится таблица со списком процессов.
Переключатель "Библиотеки процессов"
Данный переключатель доступен, если включен переключатель "Запущенные процессы". Если он включен, то в отчет исследования системы выводится таблица со списком библиотек, используемых запущенными процессами. Поддерживается два вида списка - список DLL, совмещенный со списком процессов (после каждого процесса перечисляются его DLL) и список DLL в виде отдельной таблицы без повторов. Последний вариант выбран по умолчанию, т.к. список DLL без повторов гораздо компактнее (в этом списке есть столбец со списком PID процессов, использующих DLL)
Переключатель "Службы и драйверы"
Если он включен, то в отчет исследования системы выводится таблица со списком служб и драйверов изучаемого компьютера. Данная функция не работает на Windows 9x
Переключатель "Модули пространства ядра"
Если он включен, то в отчет исследования системы выводится таблица со списком модулей пространства ядра. Данная функция не работает на Windows 9x
Переключатель "Автозапуск"
Если он включен, то в отчет исследования системы выводится таблица со списком автозапускаемых программ. Для каждого элемента автозапуска в примечаниях указано, каким образом он стартует.
Переключатель "Настройки SPI/LSP"
Если он включен, то в отчет исследования системы выводится таблица со списком модулей расширения SPI (NSP и TSP провайдеры)
Переключатель "Порты TCP/UDP"
Если он включен, то в отчет исследования системы выводится таблица открытых портов TCP/UDP (на Windows XP и 2003 выводится информация о прослушивающем порт приложении)
Переключатель "Модули расширения IE"
Если он включен, то в отчет исследования системы выводится таблица со списком модулей расширения Internet Explorer (BHO, панели и т.п.)
Переключатель "Модули расширения проводника"
Если он включен, то в отчет исследования системы выводится таблица со списком модулей расширения проводника (explorer.exe). Модули расширения проводника регистрируются в системном реестре и известны вредоносные программы, регистрирующие себя как расширение проводника для обеспечения своего скрытного запуска
Переключатель "Модули расширения системы печати"
Если он включен, то в отчет исследования системы выводится таблица со списком модулей расширения системы печати - мониторы печати, провайдеры печати. Модуль расширения является обычной библиотекой DLL и известен ряд троянских программ, применяющих такой метод автозапуска.
Переключатель "Задания планировщика TaskScheduler"
Если он включен, то в отчет исследования системы выводится таблица c данными о заданиях планировщика.
Переключатель "Записи файла Hosts"
Если он включен, то в отчет исследования системы выводится информация о значимых записях файла Hosts (комментарии и пустые строки игнорируются)
Переключатель "Протоколы и обработчики"
Если он включен, то в отчет исследования системы выводится информация о настройках протоколов и обработчиков, хранящихся в ключе реестра SOFTWARE\Classes\PROTOCOLS
Переключатель "Downloaded Program Files (DPF)"
Если он включен, то в отчет исследования системы выводится информация о Downloaded Program Files - специализированных приложениях, загружаемых Internet Explorer
Переключатель "Апплеты панели управления (CPL)"
Если он включен, то в отчет исследования системы выводится информация об апплетах, используемых панелью управления Windows. Подобные файлы имеют расширения CPL.
Переключатель "Приложения Active Setup"
Включает в отчет список приложений, зарегистрированных в качестве Active Setup инсталляций. Известен ряд вредоносных программ, применяющих регистрацию в Active Setup для скрытного автозапуска.
Переключатель "Расширенный анализ"
Если он включен, то запускается сбор дополнительных данных о ПК, влияющих на его защищенность. В текущей реализации фиксируется информация о антивирусе и Firewall и их состоянии (включен/выключен, актуальность баз). Данные записываются в XML отчет, тег <SecurityCenter>.
Переключатель "Общие ресурсы"
Если он включен, то в отчет исследования системы выводится информация об общих ресурсах изучаемого ПК. По умолчанию данная опция отключена, так как информация о сетевых шарах не требуется в большинстве исследований. Одно она может быть полезной в случае, если вредоносная программа создала посторонние сетевые шары, которые могут применяться для несанкционированного доступа к информации.
Переключатель "Диагностика сети"
Если он включен, то в отчет исследования системы выводится диагностическая информация о настройке сетевых интерфейсов. Также в ходе проверки выполняются DNS запросы к ресурсам, доступ к которым чаще всего перехватывается путем манипуляция с настройками сети и выполняется PING этих ресурсов. По умолчанию данная опция отключена, ее рекомендуется включить в случае, если есть подозрения на проблемы с работой сети.
Группа параметров "Параметры"
Переключатель "Исключить из протокола файлы, опознанные как безопасные"
Если он включен, то из отчета исследования системы исключаются все файлы, опознанные по базе безопасных. В большинстве случаев включение данной опции приводит к существенному сокращению размера протокола и упрощению его анализа.
Переключатель "Добавить протокол последнего сканирования AVZ"
Если он включен, то к протоколу исследования системы добавляется текущий протокол AVZ, сформированный в ходе последнего сканирования. Включение данной опции удобно в случае необходимости отправки протокола вместе с результатами исследования системы.
Переключатель "Создать ZIP архив с протоколом исследования системы"
Если данный переключатель включен, то помимо протоколов исследования автоматически создается архив формата ZIP, содержащий протокол исследования. Эта опция удобна в случае, если протокол необходимо отправить по почте или поместить в конференцию.
Переключатель "Добавить в протокол интерактивные элементы для генерации скриптов"
Включение данного переключателя приводит к добавлению в протокол интерактивных элементов, позволяющих полуавтоматически создавать скрипты. Следует учесть, что при открытии такого протокола в IE может выводиться сообщение системы безопасности о том, что документ содержит активные элементы. Если не разрешить их использование, то протокол откроется, но интерактивные функции в нем будут недоступны.
Переключатель "Создать XML протокол для автоматического анализа"
Включение данного переключателя приводит к созданию XML файла, дублирующего HTML протокол. XML файл предназначен для использования в автоматических анализаторах протоколов.
Кнопка "Пуск"
Кнопка пуск запускает исследование системы. Перед началом исследования запрашивается имя файла для сохранения протокола. После выбора имени файла проводится исследование системы, формируется файл протокола и выводится запрос на просмотр протокола. В случае согласия пользователя протокол открывается в браузере, применяемом в системе по умолчанию.
Кнопка "Закрыть"
Закрывает окно исследования
На заметку:
Следует учитывать, что наличие в системе включенного антивируса может замедлить исследование и оно может длиться от 1-2 до 10 минут. Типовое время формирования составляет не более 1 минуты. В процессе исследования в нижней части окна выводится прогресс-индикатор.
На заметку:
Перед запуском исследования системы рекомендуется:
1. Запустить браузеры - это позволит анализатору изучить загруженные в его адресное пространство библиотеки.
2. Во время исследования системы не рекомендуется запускать и завершать программы, как-то работать с системой - это может повлиять на результаты анализа.


7.2. Восстановление системы

Восстановление системы - это особая функция AVZ, которая позволяет восстановить ряд системных настроек, поврежденных вредоносными программами.
Микропрограммы восстановления системы хранятся в антивирусной базе и обновляются по мере необходимости.
Рекомендация: применять восстановление системы необходимо только в ситуации, когда имеется точное понимание того, что оно требуется и иных путей устранения проблемы (в частности - путем запуска мастера поиска и устранения проблем ) нет. Перед его применением настоятельно рекомендуется сделать резервную копию или точку отката системы. Важно отметить, что запуск некоторых операций восстановления на серверных операционных системах
На заметку: операции восстановления системы записывают данные автоматического резервного копирования в виде файлов формата REG в каталоге Backup рабочей папки AVZ.
В настоящее время в базе есть следующие микропрограммы:
1.Восстановление параметров запуска .exe, .com, .pif файлов
Данная микропрограмма восстанавливает реакцию системы на файлы exe, com, pif, scr.
Показания к применению: после удаления вируса перестают запускаться программы.
Возможные риски: минимальны, однако рекомендуется применять мастер поиска и устранения проблем
2.Сброс настроек префиксов протоколов Internet Explorer на стандартные
Данная микропрограмма восстанавливает настройки префиксов протоколов в Internet Explorer
Показания к применению: при вводе адреса типа www.yandex.ru идет его подмена на что-то вида www.seque.com/abcd.php?url=www.yandex.ru
Возможные риски: минимальны
3.Восстановление стартовой страницы Internet Explorer
Данная микропрограмма восстанавливает стартовую страницу в Internet Explorer
Показания к применению: подмена стартовой страницы
Возможные риски: минимальны
4.Сброс настроек поиска Internet Explorer на стандартные
Данная микропрограмма восстанавливает настройки поиска в Internet Explorer
Показания к применению: При нажатии кнопки "Поиск" в IE идет обращение к какому-то постороннему сайту
Возможные риски: минимальны
5.Восстановление настроек рабочего стола
Данная микропрограмма восстанавливает настройки рабочего стола. Восстановление подразумевает удаление всех активных элементов ActiveDesctop, обоев, снятие блокировок на меню, отвечающее за настройки рабочего стола.
Показания к применению: Исчезли закладки настройки рабочего стола в окне "Свойства:экран", на рабочем столе отображаются посторонние надписи или рисунки
Возможные риски: настройки пользователя будут удалены, рабочий стол примет вид по умолчанию
6.Удаление всех Policies (ограничений) текущего пользователя
Windows предусматривает механизм ограничений действий пользователя, называемый Policies. Этой технологией пользуются многие вредоносные программы, поскольку настройки хранятся в реестре и их несложно создавать или модифицировать.
Показания к применению: Заблокированы функции проводника или иные функции системы.
Возможные риски: у операционных систем различных версий существуют политики по умолчанию, и сброс политик на некие стандартные значения не всегда оптимален. Для исправления часто изменяемых вредоносными проблемами политик следует применять безопасный в плане возможных сбоев системы мастер поиска и устранения проблем
7.Удаление сообщения, выводимого в ходе WinLogon
Windows NT и последующие системы в линейке NT (2000, XP) позволяют установить сообщение, отображаемое в ходе автозагрузки. Этим пользуется ряд вредоносных программ, причем уничтожение вредоносной программы не приводит к уничтожению этого сообщения.
Показания к применению: В ходе загрузки системы вводится постороннее сообщение.
Возможные риски: нет
8.Восстановление настроек проводника
Данная микропрограмма сбрасывает ряд настроек проводника на стандартные (сбрасываются в первую очередь настройки, изменяемые вредоносными программами).
Показания к применению: Изменены настройки проводника
Возможные риски: минимальны, наиболее характерные для вредоносных программ повреждения настроек находит и исправляет мастер поиска и устранения проблем .
9.Удаление отладчиков системных процессов
Регистрация отладчика системного процесса позволят осуществить скрытый запуск приложение, что и используется рядом вредоносных программ
Показания к применению: AVZ обнаруживает неопознанные отладчики системных процессов, возникают проблемы с запуском системных компонент, в частности после перезагрузки исчезает рабочий стол.
Возможные риски: минимальны, возможно нарушение работы программ, использующих отладчик для легитимных целей (например, подмена стандартного диспетчера задач)
10.Восстановление настроек загрузки в SafeMode
Некоторые вредоносные программы, в частности червь Bagle, повреждают настройки загрузки системы в защищенном режиме. Данная микропрограмма восстанавливает настройки загрузки в защищенном режиме.
Показания к применению: Компьютер не загружается в защищенном режиме (SafeMode). Применять данную микропрограмму следует только в случае проблем с загрузкой в защищенном режиме.
Возможные риски: высокие, так как восстановление типовой конфигурации не гарантирует исправление SafeMode. В плене безопасности мастер поиска и устранения проблем находит и исправляет конкретные поврежденные записи настройки SafeMode
11.Разблокировка диспетчера задач
Блокировка диспетчера задач применяется вредоносными программами для защиты процессов от обнаружения и удаления. Соответственно выполнение данной микропрограммы снимает блокировку.
Показания к применению: Блокировка диспетчера задач, при попытке вызова диспетчера задач выводится сообщение "Диспетчер задач заблокирован администратором".
Возможные риски: минимальные, аналогичную проверку делает мастер поиска и устранения проблем
12.Очистка списка игнорирования утилиты HijackThis
Утилита HijackThis хранит в реестре ряд своих настроек, в частности - список исключений. Поэтому для маскировки от HijackThis вредоносной программе достаточно зарегистрировать свои исполняемые файлы в списке исключений. В настоящий момент известен ряд вредоносных программ, использующих данную уязвимость. Микропрограмма AVZ выполняет очистку списка исключений утилиты HijackThis
Показания к применению: Подозрения на то, что утилита HijackThis отображает не всю информацию о системе.
Возможные риски: минимальные, следует учесть, что настройки игнорирования HijackThis будут удалены
13. Очистка файла Hosts
Очистка файла Hosts сводится к поиску файла Hosts, удалению из него всех значащих строк и добавлению стандартной строки "127.0.0.1 localhost".
Показания к применению: Подозрения на то, файл Hosts изменен вредоносной программой. Типичные симптомы - блокировка обновления антивирусных программ. Проконтролировать содержимое файла Hosts можно при помощи менеджера Hosts файла, встроенного в AVZ.
Возможные риски: средние, следует учесть, что файл Hosts может содержать полезные записи
14. Автоматическое исправление настроек SPl/LSP
Выполняет анализ настроек SPI и в случае обнаружения ошибок производит автоматическое исправление найденных ошибок. Данную микропрограмму можно запускать повторно неограниченное количество раз. После выполнения данной микропрограммы рекомендуется перезагрузить компьютер. Обратите внимание ! Данную микропрограмму нельзя запускать из терминальной сессии
Показания к применению: После удаления вредоносной программы пропал доступ в Интернет.
Возможные риски: средние, перед запуском рекомендуется создать резервную копию
15. Сброс настроек SPI/LSP и TCP/IP (XP+)
Данная микропрограмма работает только в XP, Windows 2003 и Vista. Ее принцип работы основан на сбросе и пересоздании настроек SPI/LSP и TCP/IP при помощи штатной утилиты netsh, входящей в состав Windows. Подробно про сброс настроек можно прочитать в базе знаний Microsoft - http://support.microsoft.com/kb/299357
Обратите внимание ! Применять сброс настроек нужно только в случае необходимости при наличие неустранимых проблем с доступом в Интернет после удаления вредоносных программ !
Показания к применению: После удаления вредоносной программы пропал доступ в Интернет и выполнение микропрограммы "14. Автоматическое исправление настроек SPl/LSP" не дает результата.
Возможные риски: высокие, перед запуском рекомендуется создать резервную копию
16. Восстановление ключа запуска Explorer
Восстанавливает системные ключи реестра, отвечающие за запуск проводника.
Показания к применению: В ходе загрузки системы не запускается проводник, но запуск explorer.exe вручную возможен.
Возможные риски: минимальные
17. Разблокировка редактора реестра
Разблокирует редактор реестра путем удаления политики, запрещающей его запуск.
Показания к применению: Невозможно запустить редактор реестра, при попытке выводится сообщение о том, что его запуск заблокирован администратором.
Возможные риски: минимальные, аналогичную проверку делает мастер поиска и устранения проблем
18. Полное пересоздание настроек SPI
Выполняет резервное копирование настроек SPI/LSP, после чего уничтожает их и создает по эталону, который хранится в базе.
Показания к применению: Тяжелые повреждения настроек SPI, неустранимые скриптами 14 и 15.
Обратите внимание ! Применять сброс настроек нужно только в случае необходимости при наличие неустранимых проблем с доступом в Интернет после удаления вредоносных программ ! Применять данную операцию только в случае необходимости, в случае, когда другие методы восстановления SPI не помогли !
Возможные риски: очень высокие, перед запуском рекомендуется создать резервную копию !
19. Очистить базу MountPoints
Выполняет очистку базы MountPoints и MountPoints2 в реестре.
Показания к применению: Данная операция нередко помогает в случае, когда после заражения Flash-вирусом в проводнике не открываются диски
Возможные риски: минимальные
20.Удалить статические маршруты
Выполняет удаление всех статических маршрутов.
Показания к применению: Данная операция помогает в случае, если некоторые сайты заблокированы при помощи некорректных статических маршрутов.
Возможные риски: средние. Важно отметить, что для работы некоторых сервисов у ряда Интернет-провайдеров статические маршруты могут быть необходимы и после выполнения подобного удаления их придется восстанавливать согласно инструкции на сайте Интернет-провайдера.
21.Заменить DNS всех соединений на Google Public DNS
Заменяет в настройке всех сетевых адаптеров DNS сервера на публичные DNS от Google. Помогает в случае, если троянская программа подменила DNS на свои.
Показания к применению: подмена DNS вредоносной программой.
Возможные риски: средние. Следует учесть, что не все провайдеры позволяют использовать DNS, отличный от их собственного.
Для выполнения восстановления необходимо отметить один или несколько пунктов и нажать кнопку "Выполнить отмеченные операции". Нажатие кнопки "ОК" закрывает окно.
На заметку:
Восстановление бесполезно, если в системе работает троянская программа, выполняющая подобные перенастройки - необходимо сначала удалить вредоносную программу, а затем восстанавливать настройки системы
На заметку:
Для устранения следов большинства Hijacker необходимо выполнить три микропрограммы - "Сброс настроек поиска Internet Explorer на стандартные", "Восстановление стартовой страницы Internet Explorer", "Сброс настроек префиксов протоколов Internet Explorer на стандартные"
На заметку:
Любую из микропрограмм можно выполнять несколько раз подряд без значимого ущерба для системы. Исключения - "5.Восстановление настроек рабочего стола" (работа этой микропрограммы сбросит все настройки рабочего стола и придется заново выбирать раскраску рабочего стола и обои) и "10. Восстановление настроек загрузки в SafeMode" (данная микропрограмма пересоздает ключи реестра, отвечающие за загрузку в безопасном режиме), а также 15 и 18 (сброс и пересоздание настроек SPI).


7.3. Стандартные скрипты

Стандартные скрипты предназначены для автоматизации основных операций, выполняемых при помощи AVZ. Они хранятся в базе AVZ и обновляются при помощи автоматического обновления. Вызов окна "Стандартные скрипты" производится из меню "Файл/Стандартные скрипты".
Для выполнения одного или нескольких стандартных скриптов необходимо отметить их в списке и затем нажать кнопку "Выполнить отмеченные скрипты". Если отмечено несколько скриптов, то они выполняются последовательно.
Окно можно закрыть только после завершения последнего из выбранных скриптов - это сделано специально для блокировки органов управления AVZ на время выполнения стандартных скриптов.
Для аварийной остановки процесса выполнения скриптов необходимо нажать кнопку "Остановить выполнение". Следует учитывать, что остановка происходит не мгновенно - с момента нажатия кнопки до остановки может пройти несколько секунд. Это нормальное явление, т.к. остановка некоторых операций в ходе их выполнения невозможна.
В настоящий момент поддерживаются следующие операции:
1. Поиск и нейтрализации RootKit UserMode и KernelMode. Выполняет поиск руткитов с нейтрализацией всех обнаруженных перехватов.
Важно: после нейтрализации перехватов и выполнения неких действий по исследованию и лечению ПК в обязательно порядке необходимо перезагрузить компьютер.
2. Скрипт сбора информации для раздела "Помогите" virusinfo.info. Выполняет операции по проверке компьютера (без лечения) и исследования системы, после чего создает папку LOG в рабочем каталоге AVZ и помещает туда протокол и архив с заподозренными файлами
3. Скрипт лечения/карантина и сбора информации для раздела "Помогите" virusinfo.info. Выполняет операции по проверке компьютера с лечением и выполняет исследование системы, после чего создает папку LOG в рабочем каталоге AVZ и помещает туда протокол и архив с заподозренными файлами
4. Скрипт сбора неопознанных и подозрительных файлов. Выполняет две операции - сканирование системы с карантином всех заподозренных файлов + автоматический карантин с максимальными настройками. В результате в карантин попадают файлы, которые заподозрены AVZ или не опознаны по базе безопасных объектов.
5. Обновление баз с автоматической настройкой. Производит обновление баз, используя различные варианты настройки. Данная операция полезна в случае, если обновление стандартным способом не проходит и выводится сообщение об ошибке.
6. Удаление всех драйверов и ключей реестра AVZ. Производит автоматическое удаление всех драйверов и ключей реестра, которые могли быть созданы в процессе работы AVZ. В обычной ситуации это не требуется, так как AVZ автоматически удаляет ключи реестра и файлы, временно установленные в систему. Является аналогом деинсталляции и рекомендуется к применению на ПК после завершения использования AVZ.
7. Скрипт обновления, лечения и сбора информации. Kaspersky Lab. Выполняет попытку обновления баз, после чего производит быструю проверку/лечение ПК и формирует протокол исследования системы в папке AVZ под именем "KL_syscure". Применяется на форуме Лаборатории Касперского и специалистами технической поддержки. Важной особенностью скрипта является то, что после завершения его работы компьютер автоматически перезагружается, поэтому перед запуском скрипта выводится диалоговое окно с предупреждением о перезагрузке.
8.VirusInfo.Info: Скрипт сбора файлов для экспресс-анализа ПК. Пытается обновить базы AVZ, очищает карантин AVZ, после чего проводит экспресс-обследование ПК и собирает в карантин копии всех исполняемых файлов, не опознанных по базе чистых AVZ. Применяется для сервиса VirusDetector
9. Скрипт обновления, лечения и сбора информации. Kaspersky Lab (без фильтра чистых). Аналогичен скрипту 7 за тем исключением, что при формировании протокола исследования системы выключается фильтрация протокола по базе чистых, размер протокола при этом возрастает на порядки. Применяется в случае, если есть подозрение на то, что вредоносные действия на обследуемом ПК достигаются путем использования легитимных программ (например, запуск браузера с определенными параметрами через планировщик заданий). В версии 5.xx добавлен ряд эвристических проверок, распознающих типовые варианты вредоносного использования легитимных программ и имеющих приоритет над фильтром по базе чистых, поэтому в большинстве случаев подозрительные элементы будут отображаться в протоколах, формируемых скриптами 2,3 и 7.
Номера скриптов уникальны и не меняются при дополнении и обновлении базы.
Стандартные скрипты могут вызываться из скриптов пользователя по уникальному номеру при помощи функции ExecuteStdScr


7.4. Резервное копирование

Начиная с версии 4.16 в AVZ поддерживается три вида три вида резервного копирования:
· Автоматического резервное копирование. Выполняется AVZ автоматически по мере необходимости при выполнении некоторых операций, в частности модификации настроек LSP, настроек запуска файлов, политик безопасности, настроек IE и проводника. Эти копии помещаются в папку Backup\DD-MM-YYYY
· Ручное резервное копирование. Вызывается из меню "Файл\Резервное копирование", результаты так-же сохраняются в папке Backup\DD-MM-YYYY
· Резервное копирование под управлением скрипта. В этом случае результаты резервного копирования могут сохраняться в папке Backup\DD-MM-YYYY или в любой другой папке по усмотрению разработчика скрипта.
Мастер резервного копирования вызывается из меню "Файл\Резервное копирование".
Для выполнения резервного копирования следует отметить одну или несколько позиций списка и нажать кнопку "Выполнить резервное копирование". Нажатие кнопки "Остановить выполнение" позволяет аварийно прервать выполнение резервного копирования. Процедуры резервного копирования хранятся в обновляемой базе, поэтому список резервируемых настроек может расширяться. После выполнения резервного копирования рекомендуется сохраниться созданные AVZ файлы в надежном месте.
Восстановление резервной копии выполняется запуском соответствующего REG файла - после этого система предложить импортировать содержимое REG файла в реестр.


7.5. Мастер поиска и устранения проблем

Мастер поиска и устранения проблем предназначен для автоматического анализа системы, обнаружения устранимых ошибок и аномалий и их устранения. Мастер во многом аналогичен восстановлению системы AVZ, его главное отличие от восстановления состоит в том, что он автоматически ищет проблемы (в восстановлении системы пользователь должен сам принять решение о том, какие функции восстановления задействовать) и производит более точное и гибкое устранение проблем.
Вызов мастера осуществляется из меню "Файл\Мастер поиска и устранения проблем".
Для начала работы с мастером требуется выбрать категорию проблемы. Поддерживаются следующие категории:
·Системные проблемы. Это всевозможные ошибки в реестре или ключи, созданные/измененные вредоносными программами для нарушения или ограничения функциональности системы
·Настройки и твики браузера. Выполняет анализ настроек браузера, ищет опасные настройки (например, разрешение загружать AсtiveX без запроса) или предлагает модифицировать настройки для повышения защищенности браузера
·Приватность. Позволяет осуществить чистку системы с целью удаления следов работы пользователя (временные файлы, cookies, кеши и журналы браузеров, всевозможные протоколы)
·Чистка мусора. Данная категория появилась в AVZ начиная с версии 4.32. Назначение - поиск и удаление всевозможного мусора - временных файлов, протоколов, дампов памяти, кешей. Визард поддерживает все современные браузеры - IE, FireFox, Google Chrome, Safari.
После выбора категории следует задать степень опасности проблемы. Анализатор поддерживает три степени опасности - он незначительных проблем до опасных. Степень опасности по сути является порогом срабатывания анализатора
После настройки степени опасности следует нажать кнопку "Пуск" и дождаться завершения процесса анализа (прогресс-индикатор в нижней части окна показывает ход процесса). Найденные проблемы или рекомендуемые операции отображаются в виде списка с возможностью отметки одной или нескольких позиций. Для выполнения процедуры исправления следует отметить один или несколько пунктов в списке и нажать кнопку "Исправить отмеченные проблемы".
Исправление некоторых настроек может негативно сказаться на функционировании системы. На этот случай в мастере поиска и исправления проблем предусмотрена функция записи данных для отката изменений. Для выполнения отката следует выбрать категорию проблемы, после чего перейти на закладку "Отмена изменений". На данной закладке отобразится список отмены - для отмены следует пометить один или несколько пунктов и затем нажать кнопку "Отменить отмеченные изменения".
На заметку:
Система отмены изменений действует только на реестр - удаление файлов (например кукизов или кешей браузера) является необратимой операцией
На заметку:
Базы данных системы отмены изменений хранятся в папке BackUp. Если данная папка недоступна для записи, то мастер поиска будет успешно работать, но данные для отмены изменений записываться не будут. Кроме того, следует учесть, что в случае применения мастера для удаления приватных данных следует также удалить базы системы отмены изменений.


8. Подсистема AVZGuard

AVZ 5. Руководство пользователя
×

  • 8. Подсистема AVZGuard
  • Предыдущая
  • Следующая

Содержание 8. Подсистема AVZGuard

8.1. О технологии AVZGuard
8.2. Управление системой
8.3. AVZGuard и антируткит


8.1. О технологии AVZGuard

Технология AVZGuard основана на KernelMode драйвере, который разграничивает доступ запущенных приложений к системе. Драйвер может функционировать в x32 системах, основанных на платформе NT (начиная с NT 4.0 и заканчивая Vista Beta 1). Основное назначение - борьба с трудноудаляемыми вредоносными программами, которые активно противодействуют процессу лечения компьютера.
В момент активации все приложения делятся на две категории - доверенные и не доверенные. На доверенные приложения драйвер не оказывает никакого влияния, в то время как не доверенным запрещаются следующие операции:
· Создание, модификация и удаление параметров реестра
· Создание файлов с расширениями *.exe, *.dll, *.sys, *.ocx, *.scr, *.cpl, *.pif, *.bat, *.cmd на любом диске
· Обращение к устройствам \device\rawip, \device\udp, \device\tcp, \device\ip
· Доступ к device\physicalmemory (что блокирует операции с физической памятью из UserMode)
· Установка драйверов (является следствием блокировки работы с реестром)
· Запуск процессов
· Открытие запущенных процессов с уровнем доступа, допускающим его остановку или запись в его адресное пространство
· Открытие потоков других процессов (при этом не доверенному процессу не запрещается открывать и останавливать свои потоки)
Исходно доверенным является только AVZ, но из меню "AVZGuard\Запустить приложение как доверенное" можно запустить любое приложение. Запускаемое таким образом приложение получает статус доверенного. По умолчанию для доверенных приложений действует принцип наследования доверительных отношений - все запускаемые доверенным приложением процессы так-же считаются доверенными.
Назначение:
Основным назначением системы является:
·Борьба с трудноудаляемыми троянским программами, которые восстанавливают ключи реестра и удаленные файлы, запускают остановленные процессы или иными способами препятствуют своему удалению. Это основное назначение системы;
·Защита доверенных приложений от недоверенных. Позволяет защитить AVZ и запущенные им доверенные приложения от воздействия работающих вредоносных программ;
·Распространение действия антируткита UserMode AVZ на другие процессы. Пример - утилиты типа VBA Console scanner, DrWeb Cure IT, HijackThis и т.п. не обладают функциями детектирования и нейтрализации руткитов. В этом случае можно запустить AVZ, провести нейтрализацию руткитов для его процесса, а затем включить AVZGuard и запустить тот-же DrWeb Cure IT как доверенное приложение. В этом случае драйвер AVZGuard возьмет на себя функцию защиты запущенного процесса, и в том числе не позволит руткиту модифицировать его. Естественно, данная технология не является панацеей от всех видов UserMode руткитов, но основные их типы (в частности Hacker Defender) могут быть нейтрализованы подобным образом.
Рекомендации:
·Перед включением системы необходимо закрыть все приложения кроме AVZ. Это важный момент, поскольку все запущенные приложения в момент запуска начнут считаться недоверенными и это может заблокировать их работу. На самом деле экспериментально установлено, что большинство приложений сохраняют свою функциональность, так как не совершают блокируемых системой действий. В частности, Internet Explorer, Outlook Express, TheBat продолжают нормально работать в качестве недоверенных приложений;
·Особенностью блокировки операций с реестром является то, что операция блокируется, но приложение получает статус успешного выполнения и считает, что реестр был изменен. Это сделано специально для совместимости с рядом программ, которые в случае ошибки записи в реестр начинают работать неадекватно. Логику этой блокировки легко изучить при помощи Regedit - его необходимо запустить до включения AVZGuard, далее включить AVZGuard, и c помощью RegEdit изменить значение какого-либо ключа реестра. С точки зрения regedit операция пройдет успешно, но если обновить отображаемые Regedit данные при помощи F5 или меню "Вид\Обновить", то можно убедиться, что реестр не изменился.
·В случае, если проводилось лечение системы, необходимо перезагрузить компьютер не выключая AVZGuard. Это важный момент, связанный с тем, что в системе после лечения могут быть загружены вредоносные DLL, будут продолжать работу троянские потоки и т.п.
·Управление AVZGuard идет из контекста утилиты AVZ, в случае завершения работы AVZ контроль над AVZGuard будет потерян и он будет функционировать автономно до перезагрузки.
·Система AVZGuard может многократно включаться/отключаться в процессе работы с AVZ по мере необходимости в ограничении работы запущенных процессов
Особенности выключения ПК при включенном AVZGuard
·Процесс выключения и перезагрузки при активной системе AVZGuard может занять до 2-3 минут. Это связано с тем, что система не может принудительно закрыть процессы.
·Некоторые приложения в момент завершения могут выдавать сообщение о ошибках, связанные с ограничением их деятельности
·Сам AVZ невозможно закрыть по Alt-F4 или при помощи кнопки в заголовке окна. Для завершения работы AVZ при активном AVZGuard необходимо применить пункт меню "Файл/Выход"
Поведение различных программ при включенном AVZGuard непредсказуемо, поэтому настоятельно рекомендуется закрыть все приложения перед включением AVZGuard и незамедлительно перезагрузить компьютер после лечения с его использованием. Важно отметить, что AVZGuard не является системой проактивной защиты или антивирусным монитором - активировать его необходимо только на время борьбы с трудноудаляемыми malware.


8.2. Управление системой

Управление системой AVZ Guard производится из главного меню.
Включение AVZGuard
Пункт меню "AVZGuard\Включить AVZGuard" включает систему. По результатам активации выводится диалоговое окно с сообщением о успешном включении или о ошибке. После включения системы пункт меню "Включить AVZGuard" становится неактивным.
Запуск доверенных приложений
Пункт меню "AVZGuard\Запустить приложение как доверенное" производит запуск указанного приложения в качестве доверенного. На доверенное приложение не распространяется действие AVZGuard и драйвер защищает доверенное приложение от удаления или модификации. Запуск приложения производится из специализированного окна.
Если запускаемое приложение находится в системной папке или путь к нему задано в строке PATH, то допускается указывать только имя исполняемого файла. Поле "командная строка" позволяет указать командную строку запускаемого приложения (необязательно к заполнению). Кнопка в правой части поля "Приложение" позволяет вызвать стандартный диалог выбора файла.
Отключение AVZGuard
Пункт меню "AVZGuard\Отключить AVZGuard" производит отключение системы AVZGuard. Перед отключением выводится запрос подтверждения операции отключения. После выключения AVZGuard все работающие приложения вновь получают полный контроль над системой, драйвер выгружается.
Добавление работающего процесса в список доверенных
В AVZGuard предусмотрена возможность добавления работающего процесса в список доверенных. Выполнять данную операцию не рекомендуется, т.к. запущенный до включения AVZ Guard процесс может содержать троянские потоки или руткит-перехватчики. Тем не менее в случае необходимости данная операция выполняется из диспетчера процессов AVZ - при включенном AVZ Guard всплывающее меню таблицы процессов содержит подпункт "AVZGuard - считать процесс доверенным".
Включение AVZ Guard при запуске AVZ
Если в проверяемой системе работает противодействующее работе AVZ вредоносное приложение, то включение AVZGuard рекомендуется осуществить при помощи ключа командной строки "AG=Y". Данный ключ анализируется непосредственно в момент запуска AVZ, до инициализации его рабочих окон.
Управление из скриптов
Для управления подсистемой AVZGuard из скриптов предусмотрены функции SetAVZGuardStatus и GetAVZGuardStatus


8.3. AVZGuard и антируткит

После включения AVZGuard антируткит режима ядра блокируется, а антируткит режима UserMode продолжает нормальную работу. Особенностью AVZGuard является возможность распространения действия UserMode антируткита AVZ на другие процессы. Для этого необходимо действовать по следующей схеме:
1.
Закрыть все приложения
2.
Запустить AVZ, включить противодействие руткитам UserMode и KernelMode и пролечить систему
3.
Включить AVZGuard (это приведет к автоматическому отключению антируткита KernelMode)
4.
Для надежности повторно пролечить систему (при этом в сущности производится проверка, удалены ли перехваты UserMode из процесса AVZ)
5.
При помощи меню "AVZGuard\Запустить приложение как доверенное" запустить любое приложение, которое мы хотим запустить в защищенном от руткита режиме. С высокой степенью вероятности запущенное таким образом приложение не будет поражено руткитом.
Эту особенность очень удобно применять для запуска по описанному выше алгоритму антивирусных приложений, которые не оснащены функцией защиты от руткитов. Экспериментально установлено, что по описанному алгоритму можно нейтрализовать HackerDefender и аналогичные ему руткиты UserMode.


9. Подсистема AVZPM

AVZ 5. Руководство пользователя
×

  • 9. Подсистема AVZPM
  • Предыдущая
  • Следующая

Содержание 9. Подсистема AVZPM

9.1. О технологии AVZ PM
9.2. Управление системой


9.1. О технологии AVZ PM

Технология AVZPM основана на KernelMode Boot драйвере, который осуществляет слежение за запуском процессов и загрузкой драйверов. Драйвер написан в строгом соответствии с MSDN и рекомендациями Microsoft для минимизации его воздействия на систему и снижения вероятности конфликта с другим антивирусным программным обеспечением.
Назначение:
·Мониторинг запуска/остановки процессов
·Мониторинг загрузки/выгрузки драйверов
·Ведение списков процессов и загруженных модулей пространства ядра, независимых от системных.
Собираемая драйвером информация используется различными системами AVZ:
·Антируткитом в ходе проверки системы. Если в системе доступен драйвер мониторинга, то собранные драйвером данные применяются для поиска маскирующихся процессов и драйверов, а так-же искажений в системных структурах (подмена PID, модификация имени модуля и т.п.)
·Диспетчером процессов AVZ - получаемые от драйвера сведения применяются для отображения маскирующихся процессов
·Диспетчером "Модули пространства ядра" - получаемые от драйвера сведения применяются для отображения маскирующихся драйверов
·Исследованием системы - получаемые от драйвера сведения применяются в ходе построения отчета по драйверам и модулям пространства ядра
Применение подобного драйвера является эффективным и документированным путем борьбы с многими DKOM руткитами. Как известно, основная проблема борьбы с DKOM руткитом состоит в том, что он модифицирует системные структуры в памяти и вносит в них заведомо ложную и некорректную информацию. Классический пример - модификация имени процесса и его PID в структуре EPROCESS, практикуемая многими DKOM руткитами. В результате при желании можно обнаружить маскирующийся процесс, но невозможно определить, откуда он запустился, каково имя исполняемого файла и реальный PID его процесса. Аналогично дело обстоит с драйверами - несложно обнаружить маскируемый драйвер в памяти, но практически невозможно вычислить его имя, поскольку грамотно построенный руткит просто уничтожит эту информацию в процессе маскировки. Мониторинг системных событий решает эту проблему - анализатор получает возможность опираться на собственные данные, а не на искаженные руткитом структуры ядра.
Совместимость
Драйвер мониторинга может применяться совместно с антируткитом и системой AVZ Guard AVZ, а так-же с антивирусными мониторами и HIPS системами других производителей.


9.2. Управление системой

Инсталляция и включение AVZPM
Для включения AVZPM необходимо выполнить пункт меню "AVZPM/Установить драйвер расширенного мониторинга процессов". Выполнение этого пункта приводит к установке в систему драйвера мониторинга, его регистрации в реестре и загрузке. Драйвер начинает функционировать с момента загрузки, но для получения полной картины о всех запущенных процессах необходима перезагрузка.
После установки драйвера (или в случае обнаружения драйвера при последующих запусках AVZ) пункт меню "Установить драйвер расширенного мониторинга процессов" автоматически блокируется и разблокируется пункт меню "Удалить драйвер расширенного мониторинга процессов".
Деинсталляция и отключение AVZPM
Для выключения AVZPM необходимо выполнить пункт меню "AVZPM/Удалить драйвер расширенного мониторинга процессов". Выполнение этого пункта приводит к выгрузке драйвера, удалению его регистрационных ключей из реестра и файла с диска. Операция остановки мониторинга и выгрузки драйвера может занять несколько секунд. Перезагрузка после удаления драйвера не требуется.
После удаления драйвера пункт меню "Удалить драйвер расширенного мониторинга процессов" автоматически блокируется.
Управление из скриптов
Для управления подсистемой AVZ PM из скриптов предусмотрены функции SetAVZPMStatus и GetAVZPMStatus


10. Подсистема Boot Cleaner

AVZ 5. Руководство пользователя
×

  • 10. Подсистема Boot Cleaner
  • Предыдущая
  • Следующая

Содержание 10. Подсистема Boot Cleaner

10.1. О технологии Boot Cleaner


10.1. О технологии Boot Cleaner

Технология Boot Cleaner основана на KernelMode Boot драйвере, который выполняет заданную последовательность операций в момент загрузки системы. После выполнения заданных операций драйвер автоматически самоуничтожается. Основное назначение - борьба с трудноудаляемыми вредоносными программами, пересоздающими свои ключи реестра и файлы, или блокирующие доступ к ним. Драйвер системы Boot Cleaner размещен в AV базе и обновляется в ходе автоматического обновления.
Назначение:
·Удаление файлов
·Удаление ключей реестра
·Удаление драйверов и служб
Перечисленные операции выполняются в ходе загрузки системы.
Boot Cleaner является альтернативой отложенному удалению по ряду причин:
1. В Boot Cleaner предусмотрена возможность ведения протоколов. В протоколе отмечаются все выполняемые операции и фиксируется код статуса (0 - успешно, >0 - код ошибки)
2. Выполнение сценария Boot Cleaner происходит на раннем этапе загрузки системы, что повышает его эффективность
3. Boot Cleaner может удалять ключи реестра (и в частности драйверы и службы), в то время как отложенное удаление позволяет оперировать только с файлами.
Совместимость
Драйвер Boot Cleaner может применяться совместно с антируткитом, системами AVZ Guard и AVZ PM, а так-же с антивирусными мониторами и HIPS системами других производителей.
Управление системой
Управление системой производится средствами скриптового языка AVZ.
Набор команд и примеры подробно описаны в разделе Управление Boot Cleaner
Протоколы
В процессе работы BootCleaner может формировать текстовые протоколы. Имя и местоположение протокола задается пользователем при помощи команды. Рассмотрим пример скрипта (на момент выполнения скрипта в системе установлен драйвер PE386 и в папке Windows существует файл trojan1.exe):
begin
// Постановка задания
BC_DeleteSvc('PE386');
BC_DeleteFile('%Windir%\trojan1.exe');
BC_DeleteFile('%Windir%\trojan2.exe');
BC_LogFile(GetAVZDirectory + 'boot_clr.log');
// Активация
BC_Activate;
// Перезагрузка
RebootWindows(true);
end.
После перезагрузки будет сформирован протокол:
-- AVZ Boot cleaner log --
DeleteFile \??\C:\WINDOWS\trojan1.exe - succeeded
DeleteFile \??\C:\WINDOWS\trojan2.exe - failed (0xC0000034)
Delete File \??\C:\WINDOWS\system32:lzx32.sys - succeeded
Delete Service & File PE386 - succeeded
-- End --
Структура протокола достаточно проста - в каждой строке указывается операция, имя обрабатываемого в ходе операции объекта и статус. Возможно два статуса:
  • •
    succeeded - операция выполнена успешно
  • •
    failed (0xNNNNNNN)- в ходе выполнения операции возникли ошибки, в скобках указывается код ошибки.

Boot Cleaner позволяет удалять службы и драйверы, содержащие в имени символы с кодом 0 и любые Unicode символы. При формировании протокола символ с кодом 0 заменяется на "*", а не имеющие аналогов в ANSI Unicode символы заменяются на знаки "?"
Удаление файлов, ключей реестра, драйверов и служб при помощи Boot Cleaner может нанести существенный вред системе, поэтому применяйте Boot Cleaner только если Вы уверены в правильности своих действий !


11. Ревизор

AVZ 5. Руководство пользователя
×

  • 11. Ревизор
  • Предыдущая
  • Следующая

Содержание 11. Ревизор

11.1. О технологии ревизора
11.2. Создание базы ревизора
11.3. Сравнение


11.1. О технологии ревизора

Встроенный в AVZ ревизор диска работает по классической схеме и предполагает выполнение двух операций
·Изучение имеющихся на диске файлов и построение базы данных, содержащих информацию о этих файлах.
·Сравнение текущего состояния диска с базой данных. Подобное сравнение позволяет обнаружить, какие файлы/папки были созданы, изменены или удалены с момента создания базы
·Сравнение может вестись в стандартном режиме (сравниваются размер файла и его контрольная сумма) и скоростном режиме (сравнивается только размер). Скоростной режим удобен для оперативной проверки диска.
Особенности:
Ревизор AVZ обладает несколькими особенностями, отличающими его от аналогов:
1. База может размещаться на любом носителе и может храниться где угодно (например, на Flash диске или в сетевой папке). Для достижения такой мобильности в базе хранятся все настройки, необходимые для проведения сравнения.
2. Для одного компьютера можно создать неограниченное количество баз, сформировав несколько "снимков" в разные моменты времени или с разными настройками
3. После формирования база сжимается для экономии места. База с результатами анализа папки Windows системы Windows XP занимает на диске около 60 кб, в реальной системе - 50-150 кб (в среднем получается 10 кб базы на 1000 файлов). Небольшой объем базы позволяет хранить ее на Flash диске
4. Встроенный ревизор AVZ связан с базой безопасных файлов, что позволяет исключать из протокола сравнения файлы, опознанные по базе безопасных AVZ или по каталогу безопасности Microsoft
5. Ревизор защищен встроенным антируткитом AVZ
Назначение:
Основным назначением ревизора является:
1. Поиск модификаций на диске защищаемого компьютера. Позволяет установить, какие файлы были созданы, изменены или удалены с момент построения базы. Кроме того, регистрируется создание и удаление каталогов.
2. Поиск файлов, маскируемых руткитом. Для выполнения данной операции необходимо
2.1 создать базу ревизора, включив в нее системную папку и папки, в которых предполагается наличие руткитов. Построение базы можно вести в быстром режиме для экономии времени)
2.2 выполнить сканирование компьютера с включенным противодействием руткитам
2.3 не выходя из AVZ произвести сравнение текущего состояния с базой, построенной на шаге 2.1.
3. Сравнение содержимого некоторой папки на двух идентичных компьютерах
Области применения:
1. Периодический контроль состояния ПК. Для этого необходимо создать базу для системного диска и хранить ее в надежном месте. Далее с некоторой периодичностью можно сравнивать текущее состояние диска с базой
2. Поиск руткитов
3. Отслеживание изменений на ПК пользователей в корпоративной сети. В этом случае базы ревизора можно хранить централизованно на сервере или ПК администратора


11.2. Создание базы ревизора

Для создания базы необходимо вызвать окно ревизора (меню Файл/Ревизор) и перейти на закладку "Создание базы".
Древовидный список папок "Область поиска" позволяет указать, какие папки должны быть исследованы в ходе создания базы. По умолчанию отмечена системная папка. Можно отметить несколько папок или весь диск (или соответственно несколько дисков) целиком. При этом следует учитывать, что размер файла и время анализа напрямую зависят от количества анализируемых файлов.
В поле "Файл" необходимо задать имя файла базы данных. По умолчанию этот путь указывает на папку Revizor в рабочем каталоге AVZ и имя формируется из текущей даты, однако его можно изменить.
Переключатель "Режим создания базы".
Очень важный переключатель, влияющий на формирования базы. Поддерживается два режима:
·Стандартный. Этот режим включен по умолчанию, в нем для каждого анализируемого файла производится расчет контрольной суммы. Эта достаточно длительная операция, однако наличие контрольной суммы позволяет регистрировать изменение содержимого файла. Кроме контрольной суммы в базе сохраняется размер файла, его атрибуты и дата/время
·Быстрый. В быстром режиме фиксируется только размер файла, его атрибуты и дата/время, а контрольная сумма не вычисляется. Это на 2-3 порядка ускоряет процесс создания базы, но теряется возможность отслеживания изменений файла, не приводящих к изменению его размера. Рекомендуется только для экспресс диагностики
Переключатель "Типы файлов".
По умолчанию выбран пункт "Потенциально опасные файлы" - в этом случае ревизор анализирует только файлы с определенными расширениями (EXE, DLL, OCX, SYS, CAB, INF …) - т.е. исполняемые файлы или файлы, которые могут содержать данные для установки вредоносных программ или опасные скрипты.
Выбор пункта "Все файлы" приводит к анализу абсолютно всех файлов, независимо от их расширения. В этом режиме блокируется переключатель "Включая файлы с расширением", т.к. в данном случае он теряет смысл. Включать данный режим без необходимости не рекомендуется, так как это замедлит создание базы и приведет к увеличению ее размера.
Выбор пункта "Файлы по маскам пользователя" приводит к тому, что поиск ведется только по маскам, заданным пользователем в полях "Включая файлы по маске" и "Исключая файлы по маске".
Переключатель "Включая файлы с расширениями"
Переключатель "Включая файлы по маске:" позволяет включить в поиск файлы, соответствующие заданной пользователем маске. Этот переключатель теряет смысл в режиме "Все файлы" и при выборе этого режима автоматически выключается и становится недоступным.
Переключатель "Исключая файлы с расширениями"
Переключатель "Исключая файлы по маске:" позволяет исключить из проверки файлы, соответствующие заданной пользователем маске. Исключение файлов по маске может использоваться совместно с включением по маске или режимов "Все файлы". Указание одинаковых элементов в списке включения и исключения не является ошибкой, исключение имеет приоритет над включением - например, при указании включения в сканирование файлов *.vir и исключения *.vir приоритетно исключение. Более того, исключение по более общей маске доминирует над включением, например при включении trojan*.exe и исключении *.exe файл с именем trojan.exe будет исключен из проверки
На заметку: Поля с маской могут включать несколько масок, разделенных запятой, пробелом или символом ";". В маске могут присутствовать символы "?" (любой символ в позиции знака ?) и * (любые символы).
*.* - поиск всех файлов
*.exe - поиск файлов с расширением exe
dialer.exe - поиск файла с конкретным именем "dialer.exe"
dialer.exe, *.dll, trojan*.sys - поиск файлов с именем dialer.exe или файлов с любым именем и расширением DLL или файлов с именем Trojan<любые символы>.sys
*.exe, *.dll, *.sys, *.ocx - поиск файлов с указанными расширениями
Для создания базы необходимо нажать кнопку "Пуск", для досрочной аварийной остановки - кнопку "Стоп" (в случае досрочной остановки файл не создается).
Как уже отмечалось в описании технологии, для одного компьютера можно создать неограниченное количество база (для различных папок и дисков, а разных режимах и т.п.). Естественно, что при создании нескольких баз придется дать им различные имена.


11.3. Сравнение

Для сравнения текущего состояния диска с базой необходимо вызвать окно ревизора (меню Файл/Ревизор) и перейти на закладку "Сравнение диск <> база".
В поле "Файл" необходимо задать имя существующей базы данных ревизора. Нажатие кнопки "Пуск" запускает сравнение, нажатие кнопки "Стоп" - прерывает его (при этом протокол не очищается).
Закладка "Настройки"
Содержит настройки сравнения. В настройках нет возможности задать маски или выбрать каталоги, так как эти настройки уже были заданы в момент создания базы ревизора и сохраняются в базе данных.
Переключатель "Режим сравнения".
Очень важный переключатель, влияющий на процесс сравнения состояния диска с базой. Поддерживается два режима:
·Стандартный. Этот режим включен по умолчанию, в нем для каждого анализируемого файла производится расчет контрольной суммы и сравнение файла ведется по его размеру и содержимому. Эта достаточно длительная операция, однако наличие контрольной суммы позволяет регистрировать изменение содержимого файла. Кроме контрольной суммы в базе сохраняется размер файла, его атрибуты и дата/время
·Быстрый. В быстром режиме фиксируется сравниваются только размеры файла. Рекомендуется только для экспресс диагностики
На заметку
Важно отметить, что если база создавалась в стандартном режиме, то сравнение возможно в стандартном и быстром режимах. Если база создавалась в быстром режиме, то сравнение возможно только в быстром режиме. если в момент загрузки базы после нажатия кнопки "Пуск" обнаружится, что она создана в быстром режиме, то режим сравнения автоматически переключится в положение "Быстрый" независимо от выбор пользователя.
Переключатели "Исключить файлы, известные AVZ как системные и безопасные" и "Исключить файлы, прошедшие проверку подлинности Microsoft" позволяют уменьшить размер протокола с результатами сравнения путем выполнения соответствующей проверки для созданных и измененных файлов. В некоторых случаях (например, после установки обновлений и сервиспаков) включение данных переключателей существенно уменьшает размер протокола.


12. Категории вредоносных программ

AVZ 5. Руководство пользователя
×

  • 12. Категории вредоносных программ
  • Предыдущая
  • Следующая

Содержание 12. Категории вредоносных программ

12.1. Вирусы
12.2. AdWare
12.3. Spy или SpyWare
12.4. PornWare и Dialer
12.5. Hijacker
12.6. RiskWare


12.1. Вирусы

AVZ 5. Руководство пользователя
×

  • 12. Категории вредоносных программ
  • 12.1. Вирусы
  • Предыдущая
  • Следующая

Вирусы

В эту категорию попадают все вредоносные программы, не относящиеся к остальным категориям, в частности:
  • •
    Собственно вирусы, т.е. вредоносные программы, обладающие способностью заражать файлы, т.е. приписывать к ним свой исполняемый код и модифицировать зараженную программу таким образом, чтобы при запуске зараженной программы машинный код вируса получал управление;
  • •
    сетевые и почтовые черви (I-Worm, Net-Worm, Worm, Email-Worm),
  • •
    троянские программы (Trojan, Trojan-Spy, Trojan-Downloader, Trojan-Dropper),
  • •
    утилиты скрытного удаленного управления (Backdoor).


12.2. AdWare

AVZ 5. Руководство пользователя
×

  • 12. Категории вредоносных программ
  • 12.2. AdWare
  • Предыдущая
  • Следующая

AdWare

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


12.3. Spy или SpyWare

AVZ 5. Руководство пользователя
×

  • 12. Категории вредоносных программ
  • 12.3. Spy или SpyWare
  • Предыдущая
  • Следующая

Spy или SpyWare

Как следует из названия, SpyWare - это программа-шпион. Как правило, эта категория очень тесно переплетается с AdWare (по многим классификациям AdWare считается подклассом SpyWare). Чисто формально это так и есть - AdWare в процессе своей работы "посещают" сайты, с которых они закачивают рекламную информацию. В протоколах этих сайтов отмечается периодичность обмена, фиксируется IP адрес компьютера пользователя. При использовании в AdWare стандартных API функций для загрузки файлов из Интернет в заголовке запроса будет фигурировать версия браузера пользователя и прочие параметры.
Задачей SpyWare является сбор информации о пользователе и скрытная передача этой информации на сайт разработчиков. Стоит сразу отметить, что в отличие от троянских программ SpyWare не передает пароли, номера кредитных карт и иную информацию, на основании которой можно в последствии нанести серьезный вред пользователю. Как правило, SpyWare передает данные о конфигурации компьютера, установленном программном обеспечении, посещаемых пользователем URL и вводимых поисковых запросах и т.п. Эта информация в большинстве случаев используется для маркетинговых исследований и передаче пользователю целевой рекламной информации (т.е. рекламы, которая по тематике связана с его кругом интересов).
Многие SpyWare представляют собой панели, расширяющие возможности браузера. Подобное решение очень удобно для шпионажа за работой пользователя в Интернет - SpyWare может отслеживать посещаемые URL и вмешиваться в работу браузера. При этом он сам не является отдельной задачей Windows, что затрудняет его обнаружение. Кроме того, обмен подобного SpyWare информацией с Интернет ведется из контекста браузера, и большинство Firewall не блокируют его.
Еще одной неприятной особенностью многих SpyWare и AdWare является способность периодической проверки своих обновлений на сайте разработчика. При обнаружении обновления производится его скрытная закачка (на что затрачивается трафик) и установка.


12.4. PornWare и Dialer

AVZ 5. Руководство пользователя
×

  • 12. Категории вредоносных программ
  • 12.4. PornWare и Dialer
  • Предыдущая
  • Следующая

PornWare и Dialer

В категорию PornWare включено все, имеющее отношение к порносайтам. В первую очередь это Dialer (или в просторечие порнозвонилка) - особая программа для автоматического дозвона на порносайты и (или) перенастройки имеющихся соединений удаленного доступа для набора номера модемного пула владельцев порносайта вместо номера телефона местного провайдера.
Известно множество случаев, когда в результате работы Dialer пользователям приходили внушительные счета за пользование платными услугами или междугородные (международные) звонки.
Кроме того, в эту категорию включаются разнообразные панели для браузера и прочие программы, устанавливающиеся при посещении порносайтов.


12.5. Hijacker

AVZ 5. Руководство пользователя
×

  • 12. Категории вредоносных программ
  • 12.5. Hijacker
  • Предыдущая
  • Следующая

Hijacker

Hijacker - это программа, которая выполняет несанкционированную пользователем перенастройку системы, чаще всего браузера. Задачей такой перенастройки является принудительная смена стартовой страницы, страницы поиска, соответствия префиксов протоколов и т.п. Наиболее знаменитым Hijacker вероятнее всего является Sexque. Кроме того, в категорию Hijacker принято включать ключи реестра, переадресующие браузер на посторонние WEB страницы.


12.6. RiskWare

AVZ 5. Руководство пользователя
×

  • 12. Категории вредоносных программ
  • 12.6. RiskWare
  • Предыдущая
  • Следующая

RiskWare

RiskWare - это программное обеспечение, которое не является вирусом или вредоносной программой, но применение которого может нанести вред пользователю (его частной информации, документам и т.п.) или операционной системе.
Типичным примером являются многие клавиатурные шпионы (Keylogger) - это зачастую коммерческие продукты, снабженные инсталлятором, деинсталлятором, документацией и справочной системой. Более того, многие из них устанавливаются и конфигурируются исключительно вручную. Однако работа таких программ может принести существенный вред пользователю - он может быть куплен у производителя злоумышленником, установлен на Ваш компьютер и настроен на работу в скрытном режиме. Опираясь на полученную с помощью клавиатурного шпиона информацию, злоумышленник может нанести очень существенный вред.
Второй типичный пример - утилита Remote Admin, позволяющая удаленно управлять компьютером. С одной стороны это полезная программа, с другой - установка этой программы на Ваш компьютер, произведенная злоумышленником, может привести к утечке информации - полезная программа превращается в backdoor.
Вывод - уничтожать такие программы в большинстве случаев не следует. Необходимо разобраться, откуда программы категории RiskWare появились на RiskWare компьютере и нужны ли они для работы.
При формировании названия известных вирусов и вредоносных программ для вирусов за основу берется система имен лаборатории Касперского (причина кроется в толковой классификации и наличии энциклопедии компьютерных вирусов).


13. Дополнительная информация

AVZ 5. Руководство пользователя
×

  • 13. Дополнительная информация
  • Предыдущая
  • Следующая

Содержание 13. Дополнительная информация

13.1. Что такое RootKit
13.2. Эвристический анализатор AVZ
13.3. Local Service Provider (LSP/SPI)


13.1. Что такое RootKit

AVZ 5. Руководство пользователя
×

  • 13. Дополнительная информация
  • 13.1. Что такое RootKit
  • Предыдущая
  • Следующая

Что такое RootKit

Термин RootKit исторически пришел из мира Unix, и под этим термином понимается набор утилит, которые хакер устанавливает на взломанном им компьютере после получения первоначального доступа. Этот набор, как правило, включает в себя разнообразные утилиты для заметания следов вторжения в систему, хакерский инструментарий (снифферы, сканеры) и троянские программы, замещающие основные утилиты Unix. RootKit позволяет хакеру закрепиться во взломанной системе и скрыть следы своей деятельности.
В системе NT/W2K/XP RootKit принято считать программу, которая внедряется в систему и перехватывает системные функции (API). Перехват и модификация низкоуровневых API функций в первую очередь позволяет такой программе достаточно качественно маскировать свое присутствие в системе. Кроме того, как правило, RootKit может маскировать присутствие в системе любых описанных в его конфигурации процессов, папок и файлов на диске, ключей в реестре. Многие RootKit устанавливают в систему свои драйверы и сервисы (они естественно также являются "невидимыми").
Самостоятельно обнаружить запущенный RootKit крайне сложно - он не виден в стандартном диспетчере процессов, его ключи реестра не отображаются в редакторе реестра Regedit, файлы невидны в Explorer и других программах просмотра диска.
Для обнаружения RootKit применяются специальные методики, причем наибольшую сложность обычно составляет не обнаружение RootKit, а корректное восстановление пораженных им функций в памяти без перезагрузки компьютера для проведения поиска и уничтожения RootKit.
Если Вы не уверены в том, что перехват функций произведен полезной программой, то можно попробовать включить противодействие RootKit. В результате AVZ попробует восстановить исходную работу перехваченных функций, противодействие распространяется только на процесс AVZ и не должен сказываться на работе системы в целом.
Антивирус AVZ может противодействовать распространенным типам RootKit. Однако стоит отметить, что процесс борьбы с запущенным RootKit в памяти может привести к зависанию программы AVZ, других программ и системы в целом. Поэтому противодействие RootKit нужно включать, закрыв другие приложения и завершив работу антивирусного монитора и Firewall (последнее обязательно, т.к. мониторы антивирусов и Firewall часто перехватывают API функции).
Подробнее про RootKit и методики перехвата API функций можно прочитать в моей статье "RootKit - принципы и механизмы работы", опубликованной в журнале Компьютер Пресс № 5.2005 или в разделе " Сетевая и информационная безопасность " моего сайта.


13.2. Эвристический анализатор AVZ

AVZ 5. Руководство пользователя
×

  • 13. Дополнительная информация
  • 13.2. Эвристический анализатор AVZ
  • Предыдущая
  • Следующая

Эвристический анализатор AVZ

Антивирусная программа производит поиск вирусов и вредоносных объектов на основании сравнения исследуемой программы со своей базой данных с описаниями вирусов. При обнаружении соответствия антивирус может производить лечение найденного вируса, причем правила и методики лечения обычно хранятся в той же базе данных.
Однако эта база данных становится уязвимым местом антивируса - он может обнаруживать только вирусы, описанные в его базе данных. Частично устранить эту проблему позволяет эвристический анализатор - специальная подсистема антивируса, которая пытается обнаружить новые разновидности вирусов, не описанные в базе данных. Кроме вирусов эвристический анализатор AVZ пытается обнаружить шпионское ПО, Hijacker и троянские программы.
Работа эвристического анализатора основана на поиске характерных для вирусов и шпионских программ особенностей (фрагментов программного кода, определенных ключей реестра, файлов и процессов). Кроме того, эвристический анализатор пытается оценить степень похожести исследуемого объекта на известные вирусы.
Для поиска шпионского ПО, RootKit и Hijacker наиболее эффективен эвристический анализ не отдельно взятых файлов на диске, а всей системы в целом. При этом анализируется совокупность данных в реестре, файлов на диске, процессов и библиотек в памяти, прослушиваемых TCP и UDP портов, активных сервисов и загруженных драйверов.
Особенностью эвристического анализа является достаточно высокий процент ошибок - эвристик может сообщить об обнаружении подозрительных объектов, но эта информация нуждается в проверке специалистами-вирусологами. В результате проверки объект признается вредоносным и включается в базы или фиксируется ложное срабатывание и в алгоритмы эвристического анализатора вводится поправка.
В большинстве антивирусов (в том числе и в AVZ) имеется возможность регулировки чувствительности эвристического анализатора. При этом всегда возникает противоречие - чем выше чувствительность, тем выше вероятность обнаружения эвристикой неизвестного вредоносного объекта. Но при увеличении чувствительности возрастает вероятность ложных срабатываний, поэтому нужно искать некую "золотую середину".
Эвристический анализатор имеет несколько ступеней чувствительности и два особых режима:
·блокировка работы эвристического анализатора. При этом анализатор полностью выключается из работы. В AVZ кроме регулировки уровня чувствительности эвристического анализатора есть возможность включать и выключать эвристический анализ системы;
·"параноидальный" режим - в этом режиме включается максимально возможная чувствительность и предупреждения выводятся при малейшем подозрении. Этот режим естественно неприемлем из-за очень высокого количества ложных срабатываний, но он иногда полезен.
Основные сообщения эвристического анализатора AVZ приведены в следующем списке:
·"Имя файла >>> подозрение на имя_вируса (краткие данные об объекте)" Подобное сообщение выдается при обнаружении объекта, который по мнению AVZ похож на известный вредоносный объект. Данные в скобках позволяют разработчику найти в базе антивируса запись, которая привела к выдаче данного сообщения;
·"Имя файла >>> PE файл с нестандартным расширением" - это означает, что обнаружен программный файл, но вместо типичного расширения EXE, DLL, SYS он имеет другое, нестандартное расширение. Это не опасно, но многие вирусы маскируют свои PE файлы, давая им расширения PIF, COM. Данное сообщение выводится в любом уровне эвристики для PE файлов с расширением PIF, COM , для остальных - только при максимальном уровне эвристики;
·"Имя файла >>> В имени файла больше 5 пробелов" - множество пробелов в имени файла - это редкость, однако многие вирусы применяют пробелы для маскировки реального расширения, создавая файлы с именами типа "photo.jpeg .exe";
·"Имя файла >>> Обнаружена маскировка расширения" - аналогично предыдущему сообщению, но выдается при обнаружении более 15 пробелов в имени;
·"Имя файла >>> файл не имеет видимого имени" - выдается для файлов, не имеющих имени (т.е. имя файла имеет вид ".exe" или ".pif");
·"Процесс Имя файла может работать с сетью" - выводится для процессов, которые используют библиотеки типа wininet.dll, rasapi32.dll, ws2_32.dll - т.е. системные библиотеки, содержащие функции для работы с сетью или управления процессом набора номера и установления соединения. Данная проверка производится только при максимальном уровне эвристики. Факт использования сетевых библиотек естественно не является признаком вредоносности программы, но обратить внимание на непонятные процессы в этом списке стоит;
После сообщения может выводиться цифра, которая представляет собой степень опасности в процентах. На файлы, для которых выдана степень опасности более 30, следует обратить особое внимание.


13.3. Local Service Provider (LSP/SPI)

AVZ 5. Руководство пользователя
×

  • 13. Дополнительная информация
  • 13.3. Local Service Provider (LSP/SPI)
  • Предыдущая
  • Следующая

Local Service Provider (LSP/SPI)

Мне часто задавали вопросы, связанные с функционированием сети, понятиями SPI, LSP, NSP … поэтому я решил создать этот раздел справочной системы и подробно расписать базовую теорию и то, как вредоносные программы могут повредить работу Winsock.
Условно схема работы Winsock отображена на рисунке:
Winsock 2 имеет как бы две "зеркальные стороны" - Winsock API и Winsock SPI. Winsock API предназначен для реализации архитектуры открытых систем Windows (WOSA), обладающей стандартными API интерфейсами между Winsock и использующими его приложениями. SPI - это интерфейс между Winsock и поставщиками служб Winsock.
Поставщики услуг SPI бывают двух типов:
·Поставщик пространства имен (Namespace Provider, NSP). Задача поставщика пространства имен - независимое от протокола разрешение имен, т.е. преобразование дружественного имени в зависимый от протокола адрес. Классическим примером может являться DNS, который преобразует дружественное для пользователя имя www.z-oleg.com в IP адрес сервера, на котором размещен данный сайт;
·Поставщик транспорта (Transport Service Provider, TSP). TSP - это службы, предоставляющие функции установления связи, передачи данных, управления потоком, обработки ошибок и т.п. Поставщики транспортной службы бывают двух видов - базовые и многоуровневые. Базовые (Base) поставщики реализуют конкретные детали сетевого транспортного протокола (типа TCP/IP), включая базовые сетевые функции протокола, такие как отправка и получение данных по сети. Многоуровневые (Layered) поставщики реализуют только высокоуровневые функции связи нуждаются в базовом поставщике для фактического обмена по сети;
Как видно из рисунка, поставщиков NSP и TSP может быть несколько (если точнее - то практически неограниченно много). Еще более интересно то, что список используемых LSP и TSP хранится в специальной базе данных (которая размещена в реестре). Более того, в Winsock API есть функции, которые позволяют программе не только получать списки LSP и TSP, но и регистрировать своих поставщиков.
С точки зрения физической реализации провайдер SPI является обычной DLL, разработанной по определенному стандарту - в частности, эта DLL обязана экспортировать ряд функций для взаимодействия с Winsock.
С одной стороны, хранение списка поставщиков и их параметров в базе данных и наличие функции для управления этой базой является очень грамотным шагом - любое приложение может инсталлировать свои провайдеры SPI, расширяя возможности Winsock. При этом прикладной программе совершенно не обязательно знать с том, какие конкретно провайдеры SPI и как именно обеспечивают разрешение имен и обмен по сети. Получается универсальная система, и многие программы используют эти возможности - при помощи AVZ нетрудно исследовать настройки SPI и посмотреть, какие провайдеры там зарегистрированы - в списке провайдеров можно обнаружить Firewall, антивирусы, разнообразные антишпионские программы, утилиты для борьбы с рекламой, учета трафика и т.п.
Однако теперь давайте посмотрим на SPI глазами разработчика вирусов и SpyWare/AdWare программ. Получается, что установив 2-3 провайдера можно взять под контроль весть обмен компьютера с сетью. При помощи своего поставщика пространства имен вредоносная программа может отслеживать запросы на разрешение имени (собственно для шпионажа) и вмешиваться в этот процесс. Упрощенно говоря, к примеру вы запрашиваете адрес сайта www.yandex.ru, а "вражеский" NSP выдаст вместо этого IP адрес скажем адрес www.никому не известный поисковик.com Аналогичные "безобразия" можно устраивать на уровне поставщика транспорта - SpyWare чаще всего устанавливают свои Layered Service Providers - LSP. Получается, что открытость и универсальность SPI Winsock становится его уязвимым местом - создатели вредоносного ПО знают это и активно используют. Примеров очень много - Spy.NewDotNet (not-a-virus:AdWare.NewDotNet), Spy.SAHAgent, Spy.WebHancer, Trojan.Riler, Adware.SpywareNuker, Backdoor.Kika … - список можно продолжать достаточно долго. Кроме вмешательства в работу Winsock выполнение backdoor-компоненты в виде SPI имеет множество преимуществ - скрытный запуск, отсутствие видимого процесса.
Возможность установки вредоносной в качестве SPI провайдера - это еще только половина проблемы. Оказывается, что у Winsock есть очень неприятная особенность - любое повреждение базы данных в реестре с описанием поставщиков SPI приводит к сбоям в работе Winsock (конкретный вид сбоев зависит от характера повреждения, однако все ошибки для пользователя обычно сводятся к двум - компьютер перестает "видеть Интернет" и возникают проблемы при работе с локальной сетью - если проанализировать приведенную в начале данного раздела схему, то такие ошибки понятны и закономерны). Причин повреждения настроек SPI может быть очень много, наиболее характерные:
·Удаление DLL, являющейся провайдером SPI без отмены ее регистрации в базе провайдеров SPI (DLL может быть удалена вручную, антивирусным сканером, анти-шпионской программой, штатным деинсталлятором - способ удаления не важен);
·Повреждение базы в реестре в ходе инсталляции/деинсталляции SPI провайдеров, либо в результате ручной "чистки" реестра.
При обнаружении ошибки Winsock в частности в вся система Windows в целом не принимают никаких мер по ее ликвидации и не выдают никаких диагностических сообщений. Важно отметить, что переустановка системы "поверх" имеющейся не приводит к исправлению настройки SPI.
Как видно из приведенного мной описания, термин LSP встретился пару раз - я вообще заострил на нем внимание из-за утилиты LSP Fix и кочующего по описаниям троянских и SpyWare программ термина "LSP" - его применение во многих случая не совсем корректно. Причем тенденции "исправления" терминологии постепенно появляются - в последних описаниях вирусов они начинают давать более корректные и конкретные термины типа "…Registers a Windows sockets SPI hook in the LSP chain named…". Поэтому "лечить" и восстанавливать необходимо именно настройки SPI, а не LSP …


14. Параметры командной строки

AVZ 5. Руководство пользователя
×

  • 14. Параметры командной строки
  • Предыдущая
  • Следующая

Параметры командной строки

AVZ поддерживает параметры командной строки и профили (текстовые файлы, содержащие набор параметров). Профили могут применяться для хранения настроек и для обхода ограничений командной строки (в частности, могут возникнуть проблемы при использовании в командной строке большого количества параметров или применения имени папок с пробелами). Профили загружаются при помощи параметра командной строки Profile={имя профиля}
В описание параметров приняты следующие правила:
{}-обязательный строковый параметр.
[опция | опция] - одна из перечисленных опций. Если одна из опций является значением по умолчанию, она помечается путем подчеркивания: [опция | опция].
Пример:
HiddenMode=[0 | 1 | 2 | 3] - в данном случае указано, что параметр HiddenMode может принимать одно из четырех значений (0,1,2 или 3), причем значение 0 является значением по умолчанию и используется в случае, если параметр не задан.
Все настройки, полученные через параметры командной строки, дублируются элементами интерфейса. Это позволяет производить настройки AVZ через командную строку без запуска сканирования. Наиболее удобно в данном плане применение профилей.
Любой параметр может быть настроен скриптом управления, причем в ходе работы скрипта допускается многократная перенастройка - подробности см. в описании команды SetupAVZ .

Содержание 14. Параметры командной строки

14.1. Основные параметры
14.2. Специализированные ключи
14.3. Коды возврата
14.4. Примеры


14.1. Основные параметры

AVZ 5. Руководство пользователя
×

  • 14. Параметры командной строки
  • 14.1. Основные параметры
  • Предыдущая
  • Следующая

Основные параметры

SCAN={каталог}
Добавляет каталог или диск в список сканируемых. Путь должен начитаться с буквы диска, например c:\windows. В командной строке можно указать неограниченное количество параметров SCAN - обрабатываются все параметры, что позволяет задать сканирование нескольких каталогов. Указание несуществующего каталога не является ошибкой - он просто игнорируется. Повторное указание одного и того-же каталога или указание родительского каталога и его вложенных каталогов также не является ошибочным AVZ <суммирует> все указанные каталоги с учетом их вложенности. Пример: SCAN=c:\windows
SCANDRIVE= [HDD | FDD | CDROM]
Добавляет все диски заданного типа в список сканируемых. Поддерживается три типа дисков: HDD - отмечаются все жесткие диски, FDD-отмечаются все дисководы и Flash диски, CDROM- отмечаются все CD/DVD диски и диски, созданные эмуляторами CD дисков. Допустимо указание нескольких вариантов через запятую или знак + (без пробелов до и после запятой или знака +), например, SCANDRIVE=HDD+CDROM
SCANFILE={имя файла}
Сканирование отдельного файла. Подобных параметров может быть несколько, сканирование файлов производится в порядке следования ключей. Указание несуществующего файла или повтор не является ошибкой. Пример: SCANFILE=c:\windows\trojan.exe
NOSCAN={каталог}
Исключение заданного каталога из списка проверяемых. Путь должен начитаться с буквы диска, например c:\windows. В командной строке можно указать неограниченное количество параметров NOSCAN - обрабатываются все параметры, что позволяет задать сканирование нескольких каталогов. Все параметры NOSCAN анализируются после построения списка сканируемых каталогов, основанного на параметрах SCAN. Указание несуществующего каталога не является ошибкой - он просто игнорируется. Повторное указание одного и того-же каталога или указание родительского каталога и его вложенных каталогов также не является ошибочным AVZ "суммирует" все указанные каталоги с учетом их вложенности.
Пример: SCAN=c:\ NOSCAN=c:\aids - будет проведено сканирование всего диска C:\ за исключение папки c:\aids
ScanAllFiles=[Y | N]
Сканировать все файлы, независимо от расширения. Аналогично установке переключателя <Типы файлов> в положение <Все файлы>.
ScanFilesMode=[0 | 1 | 2]
Задает режим сканирования. 0 - сканирование потенциально-опасных файлов, 1 - сканирование всех файлов, 2 - сканирование файлов по маске. В режиме 2 необходимо задать маски ключами IncludeFiles и ExcludeFiles.
IncludeFiles={маска}
Задает маску (или набор масок) файлов, которые необходимо проверять. Аналогично заполнению поля <Включая файлы по маске:> и включению одноименного переключателя
ExcludeFiles={маска}
Исключить файлы с именами/расширениями по маске. Аналогично заполнению поля <Исключая файлы по маске: :> и включению одноименного переключателя
WinTrustLevel=[0 | 1 | 2]
Режим проверки файла по каталогу безопасности Microsoft (0-отключена, 1-проверка по каталогу, 2-проверка по каталогу плюс комплексная проверка ЭЦП самого файла). По умолчанию установлен режим 1, включение режима 2 повышает надежность проверки, но увеличивает время проверки файла примерно в 2-3 раза.
ScanProcess=[Y | N]
Проверять процессы и DLL, загруженные в память, по умолчанию включена
ScanSystem=[Y | N]
Эвристическая проверка системы при помощи микропрограмм эвристики, по умолчанию включена
ScanSystemIPU=[Y | N]
Эвристическая проверка системы при помощи микропрограмм ИПУ - искателя потенциальных уязвимостей, по умолчанию включена
RepGoodFiles = [Y | N]
Включать в отчет информацию о файлах, которые по мнению AVZ являются "чистыми"
RepGoodCheck = [Y | N]
Проверка "чистых" файлов по базе безопасных и базе ЭЦП Microsoft с выводом результатов проверки в протокол. Имеет смысл только при RepGoodFiles = Y
CheckArchives=[Y | N]
Проверять архивы и составные файлы
MaxArcSize=x
Имеет смысл только при CheckArchives=Y, задает максимальный размер архива, распаковка и проверка которого разрешена. Архивы большего размера игнорируются.
ArcDefPWD={пароль}
Пароль по умолчанию, применяемый при проверке архивов. Если данный параметр не задан, защищенные паролем архивы не проверяются. Если задан - делается попытка применить указанный пароль.
UseInfected=[Y | N]
Копировать удаляемые файлы в Infected
UseQuarantine=[Y | N]
Копировать подозрительные файлы в карантин
EvLevel=[0 | 1 | 2 | 3]
Уровень чувствительности эвристического анализатора (0-выключен, 3-максимальный уровень)
ExtEvCheck=[Y | N]
Расширенная эвристическая проверка. Имеет смысл только при уровне эвристики 3.
Антируткит
RootKitDetect=[Y | N]
Включение детектора RootKit и перехватчиков API
AntiRootKitSystem=[Y | N]
Включение системы противодействия RootKit (на всех доступных уровнях). Включение противодействия RootKit автоматически включает их детектирование.
AntiRootKitSystemUser=[Y | N]
Включение системы противодействия RootKit только UserMode.
AntiRootKitSystemKernel=[Y | N]
Включение системы противодействия RootKit только KernelMode.
На заметку: Параметры AntiRootKitSystemUser и AntiRootKitSystemKernel имеют приоритет над AntiRootKitSystem. Например, указание AntiRootKitSystem=Y AntiRootKitSystemKernel=N приведет к тому, что будет включена блокировка только руткитов UserMode (первый параметр включит все, а второй - отключит проверку KernelMode)
CheckLSP=[Y | N]
Проверять настройки SPI/LSP . По умолчанию включено
AutoRepairLSP=[Y | N]
Автоматически исправлять ошибки в настройке SPI/LSP. Работает только при условии, что CheckLSP=Y. По умолчанию отключено
KeyloggerSearch=[Y | N]
Поиск клавиатурных шпионов и троянских DLL. По умолчанию включено
SearchTrojanPorts=[Y | N]
Поиск портов, применяемых троянскими программами. По умолчанию включено
AutoFixSysProblems=[Y | N]
Автоматическое исправление системных проблем, найденных на шаге 9 сканирования системы (поддерживается начиная с версии 4.30, по умолчанию выключено)
Profile={имя профиля}
Загрузить профиль, хранящийся в указанном имени файла. Если не указан полный путь, то профиль ищется в текущей папке. Можно указать несколько параметров Profile (в этом случае загружаются все профили в порядке их упоминания в командной строке). Профиль в свою очередь также может содержать параметры Profile, что позволяет профилям ссылаться друг на друга. При загрузке проводится контроль - каждый профиль загружается только один раз, что позволяет корректно отрабатывать ситуации с перекрестными ссылками профилей
DelVir=[Y | N]
Удаление/лечение найденных malware.
ModeVirus=[0 | 1 | 2]
Режим для вирусов (0-только отчет, 1- удалять или лечить, 2-спросить пользователя)
ModeAdvWare=[0 | 1 | 2]
Режим для AdvWare (0-только отчет, 1- удалять, 2-спросить пользователя)
ModeSpy=[0 | 1 | 2]
Режим для Spy и SpyWare (0-только отчет, 1- удалять, 2-спросить пользователя)
ModePornWare=[0 | 1 | 2]
Режим для PornWare и Dialer (0-только отчет, 1- удалять, 2-спросить пользователя)
ModeRiskWare=[0 | 1 | 2]
Режим для RiskWare (0-только отчет, 1- удалять, 2-спросить пользователя)
ModeHackTools=[0 | 1 | 2]
Режим для HackTools (0-только отчет, 1- удалять, 2-спросить пользователя)
ExtFileDelete=[Y | N]
Эвристическое удаление файлов. Подразумевает анализ системы, поиск и удаление ссылок на каждый стертый файл
Run=[Y | N]
Автоматический запуск сканирования. Выполняется после выполнения всех остальных параметров
Обработка параметров без знака "="
Все параметры AVZ имею вид Имя=Значение. Параметры, не содержащие знак равенства рассматриваются как имена файлов и папок, которые требуется просканировать. Для них выполняется две проверки:
1.
Параметр рассматривается как имя каталога. Если каталог с таким именем существует, то он отмечается на проверку (в данном случае это эквивалентно ключу SCAN=<каталог>)
2.
Если на шаге 1 каталог с указанным именем не найден, то значение параметра рассматривается как имя файла. Если файл с таким именем существует, то он отмечается на проверку (в данном случае это эквивалентно ключу SCANFILE={имя файла})


14.2. Специализированные ключи

AVZ 5. Руководство пользователя
×

  • 14. Параметры командной строки
  • 14.2. Специализированные ключи
  • Предыдущая
  • Следующая

Специализированные ключи

Специализированные ключи не дублируются визуальными элементами настройки и предназначены в основном для системных администраторов. Помимо командной строки данные параметры могут изменяться из скрипта при помощи функции SetupAVZ .
Script=<имя скрипта>
Загрузка и выполнение указанного скрипта.
Важно: Данный ключ обрабатывается последним, независимо от его положения в командной строке.
Debug=[Y | N]
Включение режима отладки. В этом режиме в протокол записываются различные технические данные, не представляющие ценности для анализа ПК, но позволяющие уточнить место и причины сбоев в работе AVZ.
HiddenMode=[0 | 1 | 2 | 3]
Режим запуска графической оболочки AVZ:
0 - Стандартный режим, окно видимо и доступно пользователю
1 - Окно AVZ невидимо, в трее отображается иконка. Пользователь может развернуть окно нажатием мышью на иконку. Пользователю доступно связанное с иконкой меню, позволяющее остановить и запустить сканирование.
2 - Окно AVZ невидимо, в трее отображается иконка, однако меню иконки заблокировано и пользователь не может развернуть окно AVZ
3 - Окно AVZ невидимо, иконка в трее не отображается.
Настройка режима работы полезна в случае запуска AVZ для проверки рабочих мест пользователей из logon-скрипта или при помощи автозапуска.
Lang=xx
Принудительное переключение локализации на xx. В настоящее время поддерживаются значения RU для русского языка и EN для английского (соответственно параметр имеет вид lang=ru или lang=en).
NewDsk=[Y | N]
Режим запуска в отдельном рабочем столе. Если указан параметр NewDsk=Y, то AVZ создает отдельный рабочий стол с уникальным случайным именем, и запускает свою копию, работающую на этом рабочем столе. Данный режим полезен для борьбы с вымогателями и блокираторами, перекрывающими рабочий стол компьютера своими окнами.
DetectMailBomb=[Y | N]
Детектор "почтовых бомб" в системе распаковки архивов. Почтовой бомбой считается файл, размером более 10 Мб со степенью сжатия более 100.
Unpack_Archives=[Y | N]
Распаковка проверяемых архивов и составных файлов типа MHT и почты в папку Unpacked в рабочей папке AVZ. Файлы группируются по типу архива и его имени. У данного параметр есть эквивалентный синоним Extract_Archives.
Priority=[-1 | 0 | 1]
Настройка приоритета процесса AVZ. -1 - пониженный приоритет, 0 - стандартный, 1 - повышенный. Пониженный приоритет полезно задавать в случае применения AVZ в качестве средства фонового сканирования.
GoodCheckMode=x
Тонкая настройка режима проверки по базе чистых. Параметр x - число, содержащее битовую маску. Значение по умолчанию - 10. Используемые биты (бит (вес)):
0 (1) - не используется
1 (2) - проверять по базе чистых AVZ
2 (4) - не используется
3 (8) - проверять по базе ЭЦП Microsoft
SleepScanTime=x
Задержка на x миллисекунд выдается после сканирования каждого файла, применяется для замедления процесса сканирования с целью минимизации нагрузки на диски и процессор, полезно для фоновой проверки папок на сервере. Например, если задать значение 100, то в результате в 1 секунду будет проверяться 10 файлов.
ScanAVZFolders=[Y | N]
Разрешает/запрещает сканировать папку AVZ и все уровнями глубже. По умолчанию параметр равен N, т.е. все файлы внутри рабочей папки AVZ не сканируются, что в частности защищает папку Infected от повторной проверки и лечения. Однако это не всегда удобно.
NQ=[Y | N]
Сетевой режим карантина. В сетевом режиме карантина в имя папки карантина файла кроме даты включается сетевое имя ПК, это сделано для запуска AVZ из сетевой папки на сервере - в такой ситуации у каждого пользователя получается индивидуальный карантин и папка Infected, а администратор может легко ассоциировать попавшие в карантин файлы с компьютером.
EncryptedQR=[Y | N]
Включает режим шифрования копий файлов в архиве. Применяется для минимизации вероятности удаления таких файлов антивиурсом. Важно: созданный в таком режиме карантин может быть проанализирован автором AVZ в случае отправки файлов на анализ, в самом AVZ механизмов расшифровки файлов нет. По этой причине ключ не рекомендован к использованию.
QrPWD={пароль}
Задает пароль, используемый при создании архива с карантином. Пароль может быть любым, по умолчанию используется пароль virus.
QrOnlyEXE=[Y | N]
Управление фильтром карантина. Если QrOnlyEXE=Y, то в карантин и папку Infected помещаются только исполняемые файлы, контроль ведется по сигнатуре "MZ" в заголовке, в случае отсутствия сигнатуры карантин блокируется.
По умолчанию режим отключен, его включение может быть полезно в случае централизованного запуска AVZ в сети. Фильтр не распространяется на случай использования прямого чтения файла (т.е. когда доступ к файлу заблокирован чем-либо). Действие фильтра распространяется на все системы AVZ (кнопки в диспетчерах, добавление в карантин по списке, автокарантин любого типа, карантин из скриптов)
WebServerMode=[Y | N]
Режим запуска на WEB сервере для on-line проверки. Приводит к отключению сканирования памяти, расширенной проверки системы, поиска LSP ошибок, руткитов ... Назначение ключа - запуск AVZ в максимально облегченном режиме, что полезно при использовании AVZ в качества средства on-line проверки файлов. Особенность в том, что по мере появления новых видов анализа памяти и системы они будут блокироваться данным ключом. Ввиду того, что начиная с версии 4 сигнатурный сканер выполняет второстепенную функцию, данный ключ не имеет особого смысла.
AG=[Y | N]
Включение AVZGuard в момент запуска AVZ. Этот ключ допустим только в командной строке, в скриптах он не поддерживается. Обработка ключа AG производится в момент запуска AVZ, до его инициализации и создания рабочих окон.
AM=[Y | N]
Включает базовую защиту от троянских программ, посылающих сообщения окнам с характерными заголовками. Задание AM=Y приводит к удалению текста из заголовка главного окна AVZ, удаляет смысловое имя приложения. В данном режиме окно AVZ не подчиняется команде закрытия, выйти из AVZ можно только через меню "Файл\Выход" или по команде скрипта. Поддерживается в AVZ начиная с версии 4.32
MiniLog=[Y | N]
Включение режима сокращенного протоколирования. В этом режиме в протокол выводится только значимая информация (предупреждения, подозрения, данные о ошибках, текстовый вывод скриптов), вывод остальной информации подавляется (в частности, не выводится информация о загруженных базах, шапки с копирайтами, технические данные антируткита и т.п.). Режим полезен для сисадминов, применяющих AVZ для проверки ПК в автоматическом режиме - сокращенный протокол гораздо меньше по размеру и его проще анализировать вручную или автоматически.
ExtUpdates=[Y | N]
Включение режима расширенного обновления, для создания "зеркала" обновления баз AVZ на WEB серверах.
В обычном случае AVZ загружает только обновленные файлы базы, обновленную базу можно вручную скопировать в любой другой каталог. Но если открыть доступ к папке BASE по FTP или HTTP, то AVZ не сможет обновляться из нее, так как в папке BASE отсутствует описание состава баз avzupd.zip, применяемое для инкрементного обновления.
Задание ключа ExtUpdates=Y приводит к тому, что в процессе обновления данный файл будет скопирован в папку BASE, и ее можно использовать в качестве источника обновления, открыв доступ к папке через HTTP или FTP.
SpoolLog=<имя файла>
Дублирование протокола в указанный текстовый файл. Текстовый файл создается при его отсутствии и дополняется в случае наличия. Запись ведется без кеширования, открытие/закрытие файла производится в ходе записи каждой строки - это позволяет применять подобный протокол для диагностики ошибок в случае аварийного завершения AVZ. Если полный путь к файлу не указан, то он создается относительно каталога AVZ
QuarantineBaseFolder=<имя папки>
Задает базовый каталог для папок Quarantine и Infected. По умолчанию данные папки расположены в рабочем каталоге AVZ.
Данная опция полезна в случае запуска AVZ с BootCD или иного ReadOnly носителя, например из сетевой папки.
TempFolder=<имя папки>
Задает каталог для временных файлов. Если каталог с указанным именем не существует, то он автоматически создается. Данная опция позволяет переместить каталог с временными файлами AVZ в папку, проверка которой запрещена в настройках используемого антивирусного монитора. Кроме того, при помощи данного ключа можно переместить папку для временных файлов на виртуальный диск, что приведет к повышению скорости проверки архивов. Параметр влияет на функцию скриптов GetTempDirectoryPath
Параметры, поддерживаемые начиная с версии 4.37
AutoFixSysProblems=[Y | N]
Включает автоматическое исправление системных проблем, найденных в ходе проверки (по умолчанию выключено, сведения о найденных проблемах вносятся в протокол).
XMLBase64Mode=[Y | N]
Управляет представление текстовых данных в XML. Если XMLBase64Mode=Y, то все текстовые значения кодируются в BASE64, что полностью исключает проблемы с символами, недопустимыми в XML. Параметр Base64Mode в корневом теге XML отчета показывает, в каком режиме он сформирован.
SHA1=[Y | N]
В ходе исследования системы производится вычисление SHA1 сумм всех файлов. По умолчанию отключено и считается только MD5, включение замедляет процесс исследования примерно в 1.5-2 раза. Вычисленные SHA1 записываются в XML протокол.
SignCheck=[Y | N]
В ходе исследования системы производится проверка цифровой подписи всех файлов. В случае обнаружения подписи результат проверки выводится в протокол. По умолчанию отключено, так как проверка подписей замедляет процесс исследования примерно в 2-3 раза.
Параметры, поддерживаемые начиная с версии 4.41
SaveIPToLog=[Y | N]
Управляет записью IP адреса ПК в XML протокол.
По умолчанию выключено, полезно для использования AVZ в корпоративной сети.
X64R=XX - управляет редиректорами 64-разрядной операционной системы, предназначен в основном для использования в скриптах.
Первый символ в значении параметра управляет выключением редиректора реестра: Y-редиректор реестра включен (AVZ "видит" ключи x32 приложений), N - выключен (видны ключи x64 приложений). Второй символ по аналогии управляет файловым редиректором. X64R=NN - редиректоры выключены, X64R=YY - редиректоры включены (состояние по умолчанию).
Начиная с версии 4.45 кроме значений N и Y поддерживается значение X, которое рассматривается как "не изменять текущее состояние настройки редиректора". Например:
X64R=XN - состояние редиректора реестра не меняется, а редиректор файловой системы отключается
X64R=NX - состояние редиректора реестра меняется на "выключен", а состояние редиректора файловой системы не изменяется
Параметры, поддерживаемые начиная с версии 5.00
LogEncoding=[ANSI | UTF8 | UNICODE|UTF16] - управляет кодировкой, в котором сохраняется текстовый протокол AVZ. Влияет как на команды SaveLog , SaveCSVLog и AddLineToTxtFile скрипта, так и на сохранение протокола вручную, через меню или при помощи кнопки на панели управления справа от протокола. Протоколы в любом случае пишутся в формате Unicode, поэтому настройка параметра может выполняться непосредственно перед вызовом необходимой функции.
В случае необходимости поддерживать совместимость с версией 4.xx следует задать LogEncoding=ANSI.
UnicodeDef=[Y | N]
Более глобальный параметр, чем LogEncoding. Указание UnicodeDef=Y приведет к следующему результату:
  • •
    Будет выполнена настройка, эквивалентная LogEncoding=UTF8. Важно, что на этапе анализа параметров командной строки UnicodeDef имеет приоритет над LogEncoding. Однако впоследствии можно изменять LogEncoding через SetupAVZ непосредственно перед сохранением протокола.
  • •
    Протоколы исследования системы в формате XML и HTML будут сохраняться в UTF8.
  • •
    HTML протоколы различных менеджеров исследования системы будут сохраняться в UTF8.
  • •
    Скрипт в окне "Файл\Выполнить скрипт" при нажатии кнопки "Сохранить" будет сохранен в UTF8.
  • •
    Результаты поиска в реестре при нажатии кнопки "Сохранить" сохраняются в UTF8.
  • •
    Функция скрипта BackupRegKey и операции резервного копирования ключей реестра будут сохранять файлы в кодировке UTF8.
TxtLogFormat=[0 | 1 | 2]
Режим вставки текстового протокола в общий HTML отчет с результатами исследования системы. Возможны варианты
0 - классический режим вставки, текстовый протокол вставляется в теге PRE, т.е. рассматривается текстовая вставка моноширинным шрифтом.
1 - аналог режима 0, но к тегу применяется настройка, предписывающая выполнять переносы длинных строк.
2 - протоков вставляется в поле ограниченной высоты с прокруткой по горизонтали и вертикали. Режим удобен для работы с большими протоколами
AutoResetACL=[Y | N]
Управляет режимом сброса прав доступа при удалении объектов под управлением скрипта. По умолчанию включен, и перед удалением объекта делает попытка автоматически сбросить права доступа на него, выставив права "все можно всем", что повышает вероятность успешно удаления. Применяется в частности:
  • •
    при удалении файлов при помощи функции DeleteFile (к удаляемому файлу) и DeleteFileMask (к файлам и папкам).
  • •
    при удалении служб через DeleteService на ключ реестра, описывающий службу, и исполняемый файл службы.
  • •
    при удалении ключа реестра при помощи RegKeyDel .


14.3. Коды возврата

AVZ 5. Руководство пользователя
×

  • 14. Параметры командной строки
  • 14.3. Коды возврата
  • Предыдущая
  • Следующая

Коды возврата

Для взаимодействия с другими приложениями AVZ устанавливает коды возврата:
0 - в процессе сканирования не обнаружены подозрительные или вредоносные объекты.
1 - обнаружены вредоносные объекты.
2 - вредоносные объекты не обнаружены, но есть подозрения файлового сканера или эвристических анализаторов.


14.4. Примеры

AVZ 5. Руководство пользователя
×

  • 14. Параметры командной строки
  • 14.4. Примеры
  • Предыдущая
  • Следующая

Примеры

Пример конфигурации
Командная строка: avz.exe ScanDrive=HDD profile=exclude.txt DelVir=Y Run=Y
Файл exclude.txt:
NoScan=c:\VirusTest
NoScan=c:\Virus
NoScan=d:\aids
В данном примере при запуске AVZ автоматически отмечаются все HDD, производится исключение определенных папок (для параметров исключения применен профиль) включается режим лечения и после всех настроек производится запуска сканирования.


15. Часто задаваемые вопросы (FAQ)

AVZ 5. Руководство пользователя
×

  • 15. Часто задаваемые вопросы (FAQ)
  • Предыдущая
  • Следующая

Часто задаваемые вопросы (FAQ)

В данном разделе документации собраны ответы на наиболее типовые и часто возникающие вопросы.
Рекомендуется изучить FAQ перед обращением с вопросами по программе.
15.1. Что делать, если AVZ обнаружил подозрение на вирус или вредоносную программу ?
15.2. Что делать, если AVZ выдал подозрение на keylogger ?
15.3. Что делать, если AVZ выдал подозрение на RootKit ?
15.4. Что такое 'Порт TCP 5000' и как с ним бороться ?
15.5. Что делать, если после распаковки AVZ не может найти файл *.avz ?
15.6. AVZ удалил вредоносные программы, но стартовая страница и прочие настройки браузера по прежнему повреждены
15.7. Во время сканирования диска мой антивирусный монитор сообщил, что файл avz*.tmp заражен вирусом или является вредоносной программой
15.8. Что делать, если выдается сообщение "Ошибка загрузки драйвера - проверка прервана"
15.9. Что делать, если в ходе обновления баз возникает ошибка
15.10. Что делать, если в ходе загрузки архива с AVZ возникают ошибки
15.11. В ходе проверки AVZ в активное окно вводится текстовая строка с текстом "test"
15.12. Под Windows Vista, 8, 10 не работают некоторые функции AVZ
15.13. Особенности применения AVZ на Windows Server
15.14. Что делать, если вредоносная программа блокирует запуск AVZ ?
15.15. При запуске AVZ вместо надписей [?xxx?]

Содержание 15. Часто задаваемые вопросы (FAQ)

15.1. Что делать, если AVZ обнаружил подозрение на вирус или вредоносную программу ?
15.2. Что делать, если AVZ выдал подозрение на keylogger ?
15.3. Что делать, если AVZ выдал подозрение на RootKit ?
15.4. Что такое 'Порт TCP 5000' и как с ним бороться ?
15.5. Что делать, если после распаковки AVZ не может найти файл *.avz ?
15.6. AVZ удалил вредоносные программы, но стартовая страница и прочие настройки браузера по прежнему повреждены
15.7. Во время сканирования диска мой антивирусный монитор сообщил, что файл avz*.tmp заражен вирусом или является вредоносной программой
15.8. Что делать, если выдается сообщение "Ошибка загрузки драйвера - проверка прервана"
15.9. Что делать, если в ходе обновления баз возникает ошибка
15.10. Что делать, если в ходе загрузки архива с AVZ возникают ошибки
15.11. В ходе проверки AVZ в активное окно вводится текстовая строка с текстом "test"
15.12. Под Windows Vista, 8, 10 не работают некоторые функции AVZ
15.13. Особенности применения AVZ на Windows Server
15.14. Что делать, если вредоносная программа блокирует запуск AVZ ?
15.15. При запуске AVZ вместо надписей [?xxx?]


15.1. Что делать, если AVZ обнаружил подозрение на вирус или вредоносную программу ?

Утилита AVZ задумана как утилита, оснащенная массой различных проверок и анализаторов, порой достаточно "параноидальных". Это сделано специально, т.к. AVZ нередко применяется для анализа ПК, проверка которых другими средствами ничего не дала, и необходимо по возможности выявить любую аномалию.
Поэтому ложные срабатывания возможны, и в этом случае в протоколе для объекта дается формулировка "Подозрение на ..." (на месте троеточия может выводиться категория вредоносной программы и уточняющие данные).
В случае обнаружения подозрительных объектов следует придерживаться следующей методики:
1. Ни в коем случае не следует уничтожать подозрительные файлы. То, что файл заподозрен анализатором, еще не означает, что он опасен. Например, файл может иметь подозрительно имя и местоположение, прослушивать нестандартные порты или проявлять иную нетипичную активность. Необходимо поместить подозрительные файлы в карантин AVZ и выслать мне на адрес newvirus@z-oleg.com . При создании архива вручную очень желательно задать пароль, иначе письмо может быть блокировано Вашим почтовым сервером. Для отправки файлов на автоматический анализ следует выполнить инструкцию http://z-oleg.com/secur/avz/upload_qr.php - все загруженные через данную форму карантины изучаются автоматически и применяются для корректировки алгоритмов работы AVZ.
2. В письме необходимо кратко изложить суть проблемы, какие есть подозрение. Очень желательно приложить протокол AVZ.
3. Дождаться ответа с результатами анализа.
Подробнее о обращении в техническую поддержку можно почитать в разделе " Техническая поддержка ".


15.2. Что делать, если AVZ выдал подозрение на keylogger ?

При обнаружении подозрений на Keylogger или троянскую DLL следует действовать по схеме, описанной в совете "Что делать, если AVZ обнаружил подозрение на вирус ?" .
Кроме того, стоит заметить, что подозрение на клавиатурный перехватчик совершенно не означает, что обнаружен клавиатурный шпион. Известны сотни программ, которые устанавливают свои перехватчики клавиатуры и мыши для решения вполне мирных задач. Наиболее типичным примером является словарь Lingvo, который устанавливает свой перехватчик LvHook.dll для отслеживания нажатий на "горячие клавиши" - с одной стороны это перехватчик и анализатор AVZ на него реагирует, с другой - он совершенно безопасен. После анализа я вношу безопасные перехватчики в базу безопасных объектов и срабатывания на них прекращаются. По текущей статистике соотношение "опасный"/"безопасный" находится примерно на уровне 1/10, т.е. примерно на 10 безопасных модулей обнаруживается один вредоносный.


15.3. Что делать, если AVZ выдал подозрение на RootKit ?

AVZ 5. Руководство пользователя
×

  • 15. Часто задаваемые вопросы (FAQ)
  • 15.3. Что делать, если AVZ выдал подозрение на RootKit ?
  • Предыдущая
  • Следующая

Что делать, если AVZ выдал подозрение на RootKit?

В случае, если выдано подозрение на некоторый процесс или файл, то следует действовать по общей схеме ( "Что делать, если AVZ обнаружил подозрение на вирус ?" ), но перед отправкой файлов желательно прислать протокол работы AVZ - часто по протоколу можно многое объяснить.
Следует понимать, что обнаружение перехвата тех или иных функций еще не означает, что в систему внедрился RootKit - возможно, перехват функций применяется антивирусным монитором, Firewall или иными утилитами. Например, весьма полезная и удобная утилита RegMon устанавливает свой драйвер для перехвата 13-ти функций KiST для слежения за операциями с реестром. По моей статистике примерно в одном случае из 50-80 перехват произведен вредоносной программой, в остальных случаях как правило это антивирусы и Firewall.
В случае обнаружения подозрения на маскировку процесса однозначно следует разобраться, что это за процесс (программа). Обычные программы (не говоря уже о компонентах системы) не прибегают к маскировке своих процессов и файлов, поэтому маскирующийся процесс однозначно подозрителен. Однако однозначно судить о вредоносность нельзя - например, известен ряд безопасных программ, применяющих маскировку процесса и файлов для их защиты от обнаружения и удаления троянскими программами.


15.4. Что такое 'Порт TCP 5000' и как с ним бороться ?

AVZ 5. Руководство пользователя
×

  • 15. Часто задаваемые вопросы (FAQ)
  • 15.4. Что такое 'Порт TCP 5000' и как с ним бороться ?
  • Предыдущая
  • Следующая

Что такое 'Порт TCP 5000' и как с ним бороться?

AVZ часто находит порт открытый порт TCP 5000 и сообщает об этом. Этот порт принадлежит системной службе, называемой "Служба обнаружения SSDP". Если данная служба не применяется, то рекомендуется ее отключить (в данной службе в свое время был обнаружен ряд уязвимостей).
Для отключения необходимо:
1. Нажать правую клавишу на ярлыком "Мой компьютер", в появившемся меню вызвать пункт "Управление".
2. В открывшейся консоли "Управление компьютером" раскрыть "Службы и приложения", там - "Службы".
3. В списке, который появится в правой стороне окна, следует найти службу с именем "Служба обнаружения SSDP".
4. Двойной клик левой клавишей по строке данной службы откроет окно свойств, там необходимо выбрать тип запуска "Отключено", затем нажать кнопку "Стоп", затем - "ОК".
После отключения службы обнаружения SSDP порт 5000 не должен прослушиваться - если прослушивание продолжается, то есть подозрение, что это Backdoor.


15.5. Что делать, если после распаковки AVZ не может найти файл *.avz ?

AVZ 5. Руководство пользователя
×

  • 15. Часто задаваемые вопросы (FAQ)
  • 15.5. Что делать, если после распаковки AVZ не может найти файл *.avz ?
  • Предыдущая
  • Следующая

Что делать, если после распаковки AVZ не может найти файл *.avz ?

Если после распаковки AVZ сообщает о том, что не найден некий файл с расширение AVZ (чаще всего это файл main.avz), то необходимо проверить правильность распаковки. Дело в том, что базы утилиты AVZ хранятся в папке Base. Некоторые архиваторы некорректно распаковывают размещенный на сайте архив, в результате папка Base не извлекается из архива.
Рекомендации - распаковать архив другим архиватором и убедиться, что в результате распаковки извлечена папка Base.
Подробнее по структуре папок можно почитать в разделе Структура папок программы


15.6. AVZ удалил вредоносные программы, но стартовая страница и прочие настройки браузера по прежнему повреждены

AVZ 5. Руководство пользователя
×

  • 15. Часто задаваемые вопросы (FAQ)
  • 15.6. AVZ удалил вредоносные программы, но стартовая страница и прочие настройки браузера по прежнему повреждены
  • Предыдущая
  • Следующая

AVZ удалил вредоносные программы, но стартовая страница и прочие настройки браузера по прежнему повреждены

Это типовая ситуация - AVZ не может точно знать, какие именно настройки повредила вредоносная программа. Рекомендованный алгоритм действий:
1. Запустить " Мастер поиска и устранения проблем " и попробовать устранить проблемы в автоматическом режиме, после чего перезагрузить ПК.
2. Если автоматическое устранение не помогло, можно воспользоваться опцией " Восстановлением системы ". Если после восстановления настройки браузера по прежнему самопроизвольно меняются, то это первый признак того, что на компьютере остались некие вредоносные программы.
3. В таком случае стоит провести Исследование системы и проанализировать полученный протокол.


15.7. Во время сканирования диска мой антивирусный монитор сообщил, что файл avz*.tmp заражен вирусом или является вредоносной программой

AVZ 5. Руководство пользователя
×

  • 15. Часто задаваемые вопросы (FAQ)
  • 15.7. Во время сканирования диска мой антивирусный монитор сообщил, что файл avz*.tmp заражен вирусом или является вредоносной программой
  • Предыдущая
  • Следующая

Во время сканирования диска мой антивирусный монитор сообщил, что файл avz*.tmp заражен вирусом или является вредоносной программой

Подобные сообщения могут выдаваться антивирусными мониторами, при этом зараженный файл обнаруживается в папке TEMP и имеет имя вида avz_XXXX_Y.tmp. Это временные файлы, которые создаются AVZ в ходе проверки архивов, писем электронной почты, MHT файлов и т.п., причем XXXX - это PID процесса AVZ, а Y - уровень вложенности архива. Есть другой вариант имени файла - avz_XXXX_raw.tmp - подобные файлы создаются в ходе анализа объектов, доступ к которым блокирован путем их монопольного открытия.
Причина срабатывания заключается в том, что применяемый антивирусный сканер и монитор почему-то не находит вирусы/трояны в каком-либо архиве. Можно выделить несколько типовых причин:
1. В настройках антивируса и антивирусного монитора отключена проверка архивов.
2. Антивирус не умеет проверять данный тип архива.
3. Архив находится в папке, проверка которой запрещена в настройке антивируса и его монитора.
4. Когда архив попал на компьютер, в базе антивируса не было сигнатур содержащихся там вредоносных программ - поэтому монитор пропустил данный архив и позволил его сохранение.
Соответственно в момент извлечения AVZ-ом файла из архива антивирусный монитор проверяет его и может обнаружить вредоносную программу. В этом случае срабатывание вполне объяснимо и дальнейшая реакция может быть любой, в частности.
1. Можно разрешить антивирусному монитору "вылечить" файл. В этом случает AVZ не сможет его изучить.
2. Можно дать монитору команду исключить проверку файла.
В любом случае AVZ рассчитан на возможность неожиданного удаления временного файла или блокировки доступа к нему со стороны антивирусного монитора, поэтому сбоя в его работе не последует.


15.8. Что делать, если выдается сообщение "Ошибка загрузки драйвера - проверка прервана"

AVZ 5. Руководство пользователя
×

  • 15. Часто задаваемые вопросы (FAQ)
  • 15.8. Что делать, если выдается сообщение "Ошибка загрузки драйвера - проверка прервана"
  • Предыдущая
  • Следующая

Что делать, если выдается сообщение "Ошибка загрузки драйвера - проверка прервана"

Сообщение "Ошибка загрузки драйвера - проверка прервана" может выводиться в протокол в случае ошибки загрузки драйвера avz. Причин возникновения ошибки несколько, наиболее распространенные:
1. Нехватка прав. Для загрузки драйвера необходимо запускать AVZ из под учетной записи администратора или пользователя, имеющего право устанавливать и загружать драйвера.
2. Наличие запущенных систем проактивной защиты, для которых AVZ не является доверенным процессом. Эти системы могут блокировать загрузки и (или) установку драйвера.
3. Блокировка загрузки драйвера со стороны вредоносных программ.


15.9. Что делать, если в ходе обновления баз возникает ошибка

AVZ 5. Руководство пользователя
×

  • 15. Часто задаваемые вопросы (FAQ)
  • 15.9. Что делать, если в ходе обновления баз возникает ошибка
  • Предыдущая
  • Следующая

Что делать, если в ходе обновления баз возникает ошибка

Возможно несколько вариантов решения проблемы:
1. Если в настройках обновлении используется режим "Использовать настройки Internet Explorer", то следует убедиться, что параметры доступа в Интернет заданы в настройках Internet Explorer, и у Internet Explorer не установлен режим "Работать автономно" (меню "Файл", пункт "Работать автономно". Если режим автономной работы включен, то перед данным пунктом в меню отображается "птичка").
2. Меню "Файл/Стандартные скрипты" - выполнить скрипт "Обновление баз с автоматической настройкой". Данный скрипт пробует различные типовые комбинации настроек - в случае обнаружения подходящей конфигурации скрипт обновляет базу.
3. Можно попробовать вручную выбрать другой источник обновления и (или) изменить настройки, например попробовать прямое соединение или соединение через прокси-сервер (в случае, если применяется прокси-сервер и известен его адрес и порт).
Кроме того, необходимо убедиться, что:
1. Настройки Firewall позволяют AVZ обращаться в Интернет. Загрузка баз ведется с указанных сайтов в настройке сайтов, порт 80, протокол - HTTP.
2. Имеется устойчивое соединение с Интернет.
Если обновить базы в автоматическом режиме не удается, то можно загрузить архив с базам вручную на странице загрузки AVZ. При этом объем загружаемой информации будет больше ввиду того, что автоматическое обновление загружает только обновленные или поврежденные файлы.


15.10. Что делать, если в ходе загрузки архива с AVZ возникают ошибки

AVZ 5. Руководство пользователя
×

  • 15. Часто задаваемые вопросы (FAQ)
  • 15.10. Что делать, если в ходе загрузки архива с AVZ возникают ошибки
  • Предыдущая
  • Следующая

Что делать, если в ходе загрузки архива с AVZ возникают ошибки

В данном случае можно выделить две типовых ситуации:
1. Архив с AVZ не загружается. В данном случае точно проблему установить сложно, загрузка архива ведется по прямой ссылке, по протоколу HTTP, редиректы или системы типа "анти-ссылка" у меня на сайте не применяются. Возможно, проблемы с загрузкой связаны с высокой нагрузкой на сервер - после выхода новых версий AVZ в течении как минимум недели возникает ситуация DDoS из-за большого количества параллельных загрузок. В этом случае рекомендуется использовать указанные на странице загрузки AVZ зеркала.
2. Архив загружается, но его распаковка показывает, что там старая версия. В данном случае проблема связана с некорректной работой применяемого для доступа в Интернет прокси сервера, который кеширует старую версию архива. В теории прокси-сервер должен проверить, обновился ли файла - и в случае обновления загрузить актуальную версию файла.


15.11. В ходе проверки AVZ в активное окно вводится текстовая строка с текстом "test"

AVZ 5. Руководство пользователя
×

  • 15. Часто задаваемые вопросы (FAQ)
  • 15.11. В ходе проверки AVZ в активное окно вводится текстовая строка с текстом "test"
  • Предыдущая
  • Следующая

В ходе проверки AVZ в активное окно вводится текстовая строка с текстом "test"

В ходе проверки компьютера AVZ в активное окно может быть введена длинная строчка (типовое содержимое - повторяющееся слово test). Причина - работа антикейлоггера AVZ, который использует в своей работе поведенческий анализатор.
Для работы поведенческий анализатор эмулирует события типа "клавиатура" и "мышь", и изучает реакцию на них со стороны подозреваемых библиотек.
Если активным является окно AVZ, то все происходит корректно, в противном случае возникает описанная выше ситуация.


15.12. Под Windows Vista, 8, 10 не работают некоторые функции AVZ

AVZ 5. Руководство пользователя
×

  • 15. Часто задаваемые вопросы (FAQ)
  • 15.12. Под Windows Vista, 8, 10 не работают некоторые функции AVZ
  • Предыдущая
  • Следующая

Под Windows Vista, 8, 10 не работают некоторые функции AVZ

Под Windows Vista 64-bit не функционируют KernelMode компоненты AVZ - это связано с тем, что эти компоненты AVZ не поддерживает 64-bit платформы. Под Vista/8/10 32-bit все должно функционировать, но следует учесть, что начиная с Windows Vista приложения по умолчанию запускаются с ограниченными привилегиями. Для запуска приложения с правами администратора необходимо выделить avz.exe в проводнике, вызвать контекстное меню (правая кнопка мыши) и выбрать пункт "Запустить приложение с правами администратора". После этого будет выдан запрос системы UAC с просьбой подтвердить операцию.


15.13. Особенности применения AVZ на Windows Server

AVZ 5. Руководство пользователя
×

  • 15. Часто задаваемые вопросы (FAQ)
  • 15.13. Особенности применения AVZ на Windows Server
  • Предыдущая
  • Следующая

Особенности применения AVZ на Windows Server

В случае запуска AVZ на сервере следует соблюдать особую осторожность и включать лечение / автоисправление только тогда, когда есть полная уверенность в надобности подобного исправления! Перед подобными операциями крайне рекомендуется выполнить резервное копирование средствами сервера и в дополнение сделать резервную копию важных ключей реестра средствами AVZ .
Типовые проблемы могут быть связаны с рядом моментов:
1. В случае запуска AVZ из терминальной сессии система передает ему некорректный путь к системной папке - возвращаемый системой путь указывает в профиль пользователя. Это может привести к сбоям в ряде менеджеров, в частности в анализаторе ошибок SPI.
2. На сервере могут периодически запускаться и завершаться фоновые процессы. Это может приводить к сбоям в работе антируткита, в частности он может подозревать маскировку некоторых процессов.
3. Нейтрализация перехватов в Kernel Mode, модификация настроек SPI, работа с автозапуском и т.п. оказывает глобальное воздействие на систему, поэтому необходимо выполнять данные операции с особой осторожностью.


15.14. Что делать, если вредоносная программа блокирует запуск AVZ ?

AVZ 5. Руководство пользователя
×

  • 15. Часто задаваемые вопросы (FAQ)
  • 15.14. Что делать, если вредоносная программа блокирует запуск AVZ ?
  • Предыдущая
  • Следующая

Что делать, если вредоносная программа блокирует запуск AVZ ?

В этой ситуации следует:
1. Переименовать папку AVZ, задать ей несмысловое имя типа X54S или распространенное типа Soft, Game и т.п.
2. Переименовать avz.exe в что-то нейтральное (например, test.exe, game.pif, program.com и т.п.).
3. Запускать AVZ с ключом: avz.exe ag=y (в этом случае при запуске AVZ включается AVZGuard, подробности о ключе см. в разделе Специализированные ключи ).
4. Использовать параметр NewDsk=Y для запуска AVZ на отдельном рабочем столе (помогает от некоторых блокировщиков).


15.15. При запуске AVZ вместо надписей [?xxx?]

AVZ 5. Руководство пользователя
×

  • 15. Часто задаваемые вопросы (FAQ)
  • 15.15. При запуске AVZ вместо надписей [?xxx?]
  • Предыдущая
  • Следующая

При запуске AVZ вместо надписей [?xxx?]

Если в окне AVZ и в протоколах вместо смысловых надписей отображается информация вида [?xxx?] (где xxx - некое число), что это означает, что у AVZ возникли проблемы с отображением локализованных надписей. Возможно две причины:
1. AVZ запускается из архива, или из архива извлечен только avz.exe. В такой ситуации папка BASE с базами для AVZ недоступна, как следствие не удалось загрузить базу с локализованными сообщениями. Решение проблемы - завершить работу с AVZ, корректно распаковать архив с AVZ и запустить его снова.
2. Заданы некорректные настройки локализации или указано некорректное значение параметра командной строки lang= . Решение проблемы - задать корректный параметр.
3. Базы локализации удалены, повреждены или недоступны. Решение - убедиться, что в каталоге BASE есть файлы lang_en.avz и lang_ru.avz. В случае необходимости распаковать AVZ заново.


16. Скрипты управления

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • Предыдущая
  • Следующая

Содержание 16. Скрипты управления

16.1. Введение
16.2. Структура скрипта
16.3. Типы переменных
16.4. procedure Sleep
16.5. procedure SleepMS
16.6. procedure ActivateWatchDog
16.7. procedure SetupAVZ
16.8. procedure RunScan
16.9. procedure ExitAVZ
16.10. Информация о компьютере
16.11. Взаимодействие с пользователем
16.12. Автоматическое обновление
16.13. Работа с протоколом
16.14. Карантин и папка Infected
16.15. Функции запроса информации о AVZ
16.16. Интерфейс AVZ
16.17. Управление AVZPM
16.18. Управление AVZGuard
16.19. Управление Boot Cleaner
16.20. Эвристическая проверка системы
16.21. Эвристическая чистка системы
16.22. Восстановление системы и стандартные скрипты
16.23. Завершение работы и перезагрузка
16.24. Использование AV анализатора в скрипте
16.25. Работа с CLSID и BHO
16.26. Работа со службами и драйверами
16.27. Работа с SPI/LSP
16.28. Работа с автозапуском и Winlogon
16.29. Работа с планировщиком заданий
16.30. Работа с реестром
16.31. Работа с INI файлами
16.32. Работа с файлом Hosts
16.33. Работа с файлами и папками
16.34. Работа с текстовыми файлами и списками строк
16.35. Поиск файлов и папок
16.36. Работа с процессами
16.37. Сигнатурный анализатор файла
16.38. Работа с результатами исследования системы
16.39. Функции запроса статистики
16.40. Обработка параметров командной строки
16.41. Работа со строками
16.42. Работа с числами
16.43. Работа с датами и временем
16.44. Передача оповещения администратору
16.45. Работа с Интернет
16.46. Работа с WMI
16.47. Работа с архивами
16.48. Типовые примеры


16.1. Введение

Как известно, утилита AVZ исходно задумывалась как утилита для системного администратора. При этом проверка конкретного компьютера удобна в случае запуска AVZ вручную и работы в диалоговом режиме. Однако для оперативной проверки большого количества ПК или для выполнения их периодической проверки в ходе загрузки необходима возможность автоматизации.
Первым шагом в этом направлении была поддержка ключей командной строки. Однако ключи позволяют настроить AVZ, но не дают особой гибкости в работе с ним. Поэтому начиная с версии 3.80 введена поддержка внешних скриптов управления, которые могут создаваться администратором.
Скрипт позволяет:
  • •
    Модифицировать все настройки AVZ
  • •
    Запускать проверку и лечение заданных папок и дисков
  • •
    Сохранять протоколы (причем в протокол могут вноситься поясняющие данные)
  • •
    Выполнять исследование системы
  • •
    Помещать в карантин файлы (указанных файлов или автокарантин)
  • •
    Производить поиск классов с возможностью карантина связанных с ними файлов
  • •
    Выполнять блокирование перехватчиков UserMode и KernelMode
Главной особенностью скрипта является возможность использования в ней условных операторов и циклов, объявлять переменные различных типов, проводить операции с числами и строками. Все это позволяет решать ряд сложных задач, реализация которых невозможна с помощью ключей командной строки - например, проводить избирательную настройку AVZ для каждого проверяемого ПК, проводить лечение определенных папок и т.п.


16.2. Структура скрипта

В простейшем виде скрипт управления имеет вид:
begin
... команды скрипта ...
end.
При необходимости объявления переменных добавляется секция объявления переменных:
var
S : string; // Объявление переменной типа "строка"
begin
... команды скрипта ...
end.
Как видно из примеров, синтаксис идентичен языку Pascal. Скрипт может содержать комментарии, которые не влияют на его выполнение и предназначены для временного отключения фрагментов скрипта или для комментирования описанных в нем операций.
begin
// Это первый вид комментария
{ А это - второй вид комментария }
end.


16.3. Типы переменных

В скрипте поддерживается несколько типов переменных, в частности:
  • •
    string - строка. Строки заключаются в одинарные кавычки.
  • •
    integer - целое число со знаком.
  • •
    dword - целое число без знака.
  • •
    double - число с плавающей точкой.
  • •
    boolean - логический тип данных, допускает значения true или false.
  • •
    TDate, TTime, TDateTime - переменная для хранения даты и времени.
Целочисленные значения могут записываться в следующих форматах:
12345 - число в десятеричной системе исчисления.
$0A25 -число в шестнадцатеричной системе исчисления (обратите внимания, данная форма записи отличается от принятой в C 0x0A25).
Кроме вышеуказанных переменных, поддерживается класс TStringList , позволяющий работать с массивами строк и текстовыми файлами (загружать данные из текстового файла и сохранять в виде текстового файла), что позволяет реализовывать альтернативные методики протоколирования, а также использовать "базы" с настройками скрипта или массивами неких данных для их использования в ходе лечения или исследования, например: имена подозрительных файлов, списки каталогов для чистки или MD5 сумм для поиска объектов, что продемонстрировано в примере .


16.4. procedure Sleep

procedure Sleep(AInterval : integer);
Выполняет приостановку скрипта (и всего AVZ в целом) на указанный интервал времени. Интервал задается в секундах.
Данная команда полезна в начале скрипта в случае запуска AVZ из автозапуска - задержка на 60-80 секунд полезна, чтобы не замедлять процесс загрузки системы.
Пример:
begin
AddToLog('Выполняем задержку на 15 секунд ');
Sleep(15);
AddToLog('15 секунд прошли, продолжаем работу');
end.


16.5. procedure SleepMS

procedure SleepMS(AInterval : integer);
Выполняет приостановку скрипта (и всего AVZ в целом) на указанный интервал времени. Интервал задается в миллисекундах, в остальном функция полностью идентична Sleep.
Функция полезна для создания небольших задержек, например при поиске файлов для минимизации нагрузки на систему.
Совместимость: AVZ 4.41 и выше
Пример:
begin
AddToLog('Выполняем задержку на 300 миллисекунд');
SleepMS(300);
AddToLog('300 миллисекунд прошли, продолжаем работу');
end.


16.6. procedure ActivateWatchDog

procedure ActivateWatchDog(Interval : integer);
Активирует сторожевой таймер. Параметр Interval содержит интервал времени в секундах. Сторожевой таймер позволяет ограничить время работы AVZ и принудительно завершить его работу в случае непредвиденной остановки.
Пример:
var
s : string;
begin
// Принудительное завершение работы AVZ через 5 минут
ActivateWatchDog(60 * 5);
end.


16.7. procedure SetupAVZ

procedure SetupAVZ(S : String);
Производит настройку AVZ. В качестве параметра указываются любой параметр командной строки (только один параметр).
В пределах скрипта допускается многократный вызов SetupAVZ, каждый вызов модифицирует один из параметров. Параметры подробно описаны в разделе " Параметры командной строки "
Пример 1:
begin
SetupAVZ('UseQuarantine=Y'); // Включение карантина
end.
Пример 2:
begin
if GetComputerName = 'PUPKIN' then
SetupAVZ('UseQuarantine=Y'); // Включение карантина
end.
В данном примере настройка производится при выполнении определенных условий (в данном случае на основании имени компьютера, полученного при помощи функции GetComputerName )


16.8. procedure RunScan

procedure RunScan;
Запуск сканирования. Выполнение скрипта продолжится после завершения сканирования. Настройки сканирования должны быть заданы до вызова RunScan.
Пример:
begin
// Настройка AVZ
SetupAVZ('UseQuarantine=Y'); // Включить карантин
SetupAVZ('Priority=-1'); // Пониженный приоритет
// Запуск сканирования
RunScan;
// Завершение работы AVZ
ExitAVZ;
end.
В данном примере производится настройка ряда параметров AVZ при помощи функции SetupAVZ , выполняется запуск сканирования, после чего работа AVZ завершается при помощи ExitAVZ .


16.9. procedure ExitAVZ

procedure ExitAVZ;
Завершение работы AVZ. Применяется в качестве последней команды в скриптах, рассчитанных на автоматическое выполнение
Пример:
begin
// Завершение работы AVZ
ExitAVZ;
end.


16.10. Информация о компьютере

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.10. Информация о компьютере
  • Предыдущая
  • Следующая

Содержание 16.10. Информация о компьютере

16.10.1. function GetSystemBootMode
16.10.2. function GetComputerName
16.10.3. function GetComputerComments
16.10.4. function IsNT
16.10.5. function IsAdmin
16.10.6. function IsElevated
16.10.7. function IsWow64
16.10.8. function IsTermSession
16.10.9. function GetComputerHash
16.10.10. function GetComputerIP
16.10.11. function GetEnvironmentVariable
16.10.12. function GetComputerDomain
16.10.13. function GetOSVersion
16.10.14. function GetUserName
16.10.15. function GetTickCount


16.10.1. function GetSystemBootMode

function GetSystemBootMode : integer;
Возвращает код, соответствующий режиму, в котором загружена Windows.
Поддерживаются следующие коды:
0 - загрузка системы проведена в обычном режиме
1 - загрузка в режиме защиты от сбоев
2 - загрузка в режиме защиты от сбоев с поддержкой сети
Примеры:
begin
AddToLog('Система загружена в режиме ' +
IntToStr(GetSystemBootMode));
end.
begin
if GetSystemBootMode <> 0 then begin
AddToLog('Проверка в режиме защиты от сбоев заблокирована !!')
exit;
end;
end.


16.10.2. function GetComputerName

function GetComputerName : string;
Возвращает сетевое имя компьютера. Сетевое имя всегда возвращается в верхнем регистре для упрощения сравнения и анализа.
Примеры применения:
1.В данном примере в протокол вносится строка, содержащая текущее имя компьютера
begin
AddToLog('Протокол с компьютера '+GetComputerName);
end.
2.В данном примере для компьютера с именем PUPKIN проводятся некоторые индивидуальные операции (в данном случае включается лечение и использование карантина)
begin
if GetComputerName = 'PUPKIN' then begin
SetupAVZ('DelVir=Y'); // Включение лечения
SetupAVZ('UseQuarantine=Y'); // Использование автокарантина
end;
end.
3. В данном примере для компьютеров, имя которых начинается с ASU_ производится немедленный выход из AVZ за счет вызова функции ExitAVZ
begin
if pos('ASU_', GetComputerName) = 1 then
ExitAVZ;
end.


16.10.3. function GetComputerComments

function GetComputerComments : string;
Возвращает текстовое описание компьютера, которое указывается в поле "Описание" в настройках имени компьютера. Данная функция полезна в корпоративной сети при условии заполнения описания компьютеров данными о его местоположении и ответственном за данный компьютер пользователе.
Пример:
begin
AddToLog('Описание компьютера = ' + GetComputerComments);
end.
В данном примере описание ПК выводится в протокол при помощи процедуры AddToLog


16.10.4. function IsNT

function IsNT : boolean;
Возвращает true, если установленная на компьютере версия Windows относится к платформе NT (NT, W2K, XP, W2K3, Vista) и false для платформы W9x.
Совместимость: AVZ 4.26 и выше


16.10.5. function IsAdmin

function IsAdmin : boolean;
Возвращает true, если AVZ запущен от имени пользователя, входящего в группу администраторов ПК.
Совместимость: AVZ 4.45 и выше


16.10.6. function IsElevated

function IsElevated : boolean;
Возвращает true если процесс AVZ запущен в режиме "Запуск от имени администратора" ("Run as administrator"). Имеет смысл только в операционных системах начиная с Windows Vista, на предыдущих версиях ОС всегда возвращает true. Дополняет функцию IsAdmin
Совместимость: AVZ 4.45 и выше. Следует отметить, что манифест версии 4.45 предписывает запускать ее с правами администратора, если это возможно. Как следствие, если IsAdmin возвращает true, то и IsElevated должна возвращать true.


16.10.7. function IsWow64

function IsWow64:boolean;
Возвращает true, если процесс запущен под WOW64, и false во всех остальных случаях.
Пример:
begin
if IsWOW64 then
AddToLog('WOW64 = true')
else
AddToLog('WOW64 = false');
end.
Совместимость: AVZ 4.30 и выше


16.10.8. function IsTermSession

function IsTermSession : boolean;
Возвращает true в случае, если AVZ запущен из терминальной сессии. Функция полезна при разработке скриптов, работа которых зависит от режима запуска.
Пример:
begin
if IsTermSession then
AddToLog('Запуск производится из терминальной сессии');
end.
Совместимость: AVZ 4.47 и выше


16.10.9. function GetComputerHash

function GetComputerHash : string;
Возвращает несмысловую строку, идентифицирующую данный ПК. С технической точки зрения данная строка является MD5 хешем от серийного номера тома системного диска и сетевого имени ПК. Данный хеш записывается в протокол исследования системы и может применяться для решения следующих задач
  • •
    блокировки запуска потенциально опасного скрипта на компьютерах, для которых он не предназначен;
  • •
    опознания протоколов, созданных на одном и том-же ПК.
Подобные проблемы фиксировалась в частности на virusinfo в случаях, когда один пострадавший обращался сразу несколько раз (например, администратор сети обращается за помощью в лечении нескольких ПК). В такой ситуации нередко возникает путаница - пользователь высылает повторные протоколы с другого ПК, или пытается выполнить скрипт не на том ПК, для которого он предназначен.
Пример:
begin
if GetComputerHash <> '7269D5B9E6ED44CE74E24AA2976DB130' then begin
ShowMessage('Извините, данный скрипт предназначен для другого ПК');
ExitAVZ;
end;
// **** Команды скрипта ***
end.
Совместимость: AVZ 4.32 и выше


16.10.10. function GetComputerIP

function GetComputerIP : string;
Возвращает IP адрес ПК. В случае, если на ПК несколько сетевых карт или несколько IP адресов, то возвращается первый из них.
Совместимость: AVZ 4.41 и выше
Пример:
begin
ShowMessage('IP = ' + GetComputerIP);
end.
В данном примере IP адрес компьютера выводится на экран в диалоговом окне при помощи процедуры ShowMessage .


16.10.11. function GetEnvironmentVariable

function GetEnvironmentVariable(AName : string):string;
Запрашивает значение указанной переменной окружения.
Совместимость: AVZ 4.26 и выше
Пример:
begin
AddToLog('SESSIONNAME = ' + GetEnvironmentVariable('SESSIONNAME'));
end.


16.10.12. function GetComputerDomain

function GetComputerDomain : string;
Возвращает домен для ПК, находящихся в домене, или имя рабочей группы для ПК вне домена.
Совместимость: AVZ 4.45 и выше
Пример:
begin
ShowMessage('Domain = ' + GetComputerDomain);
end.


16.10.13. function GetOSVersion

function GetOSVersion(var MajorVersion, MinorVersion, BuildNumber, PlatformId : dword) : boolean;
Функция запрашивает версию операционной системы, при успешном выполнении возвращает true, в этом случае значения переданных в качестве параметров переменных MajorVersion, MinorVersion, BuildNumber, PlatformId типа DWORD заполняются соответствующими значениями.
Совместимость: AVZ 5.41 и выше
Пример:
var
MajorVersion, MinorVersion, BuildNumber, PlatformId : dword;
begin
if GetOSVersion(MajorVersion, MinorVersion,
BuildNumber, PlatformId) then begin
AddToLog('Версия операционной системы определена успешно');
AddToLog('MajorVersion='+IntToStr(MajorVersion));
AddToLog('MinorVersion='+IntToStr(MinorVersion));
AddToLog('BuildNumber='+IntToStr(BuildNumber));
AddToLog('PlatformId='+IntToStr(PlatformId));
end else
AddToLog('Ошибка определения версии операционной системы');
end.


16.10.14. function GetUserName

function GetUserName : string;
Возвращает имя текущего пользователя, или пустую строку в случае ошибки.
Совместимость: AVZ 5.40 и выше
Пример:
begin
AddToLog('UserName='+GetUserName);
end.


16.10.15. function GetTickCount

function GetTickCount:cardinal;
Возвращает количество миллисекунд с момента последнего перезапуска системы. Может применяться для измерения интервалов времени и оценки производительности того или иного скрипта или его части.
Совместимость: AVZ 5.40 и выше
Пример:
var
TickCount : cardinal;
begin
TickCount := GetTickCount;
// Выполнение автокарантина
ExecuteAutoQuarantine;
AddToLog('Время работы скрипта ' +
IntToStr(GetTickCount - TickCount)+' мс');
end.
В примере использовались: AddToLog , ExecuteAutoQuarantine


16.11. Взаимодействие с пользователем

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.11. Взаимодействие с пользователем
  • Предыдущая
  • Следующая

Содержание 16.11. Взаимодействие с пользователем

16.11.1. function TranslateStr
16.11.2. procedure ShowMessage
16.11.3. function InputBox
16.11.4. function MessageDLG


16.11.1. function TranslateStr

function TranslateStr(AMsg : string):string;
Выполняет локализацию строки по текущей базе локализации AVZ. Коды локализованных выражений имеют вид $AVZxxxx - где xxxx - четырехзначный код выражения
Совместимость: AVZ 4.34 и выше
Пример:
begin
if MessageDLG(TranslateStr('$AVZ1751'), mtConfirmation, mbYes+mbNo, 0) <> 6 then
exit;
end.
В данном примере локализованный текст используется в диалоговом окне, отображаемом при помощи функции MessageDLG


16.11.2. procedure ShowMessage

procedure ShowMessage(AMsg : string);
Процедура ShowMessage выводит текстовое сообщение AMsg на экран.
Выполнение скрипта останавливается до тех пор, пока пользователь не нажмет кнопку "ОК" в окне с сообщением.
Пример:
begin
ShowMessage('Сообщение !!');
end.


16.11.3. function InputBox

function InputBox(ACaption, APrompt, ADefault: string): string;
Функция InputBox выводит на экран диалоговое окно с полем ввода. Заголовок окна определяется параметром ACaption, приглашение для ввода данных - APrompt. Значение ADefault вводится в строку в качестве значения по умолчанию. В окне имеется две кнопки - OK и Отмена. Работа скрипта останавливается до нажатия на кнопку "ОК" или "Отмена" в окне ввода. При нажатии ОК функция возвращает значение, введенное пользователем. При нажатии кнопки "Отмена" возвращается значение по умолчанию, заданное параметром ADefault.
Пример:
var
txt : string;
begin
txt := InputBox('Заголовок окна', 'Введите строку:', 'Строка по умолчанию');
ShowMessage('Введен текст ="'+txt+'"');
end.


16.11.4. function MessageDLG

function MessageDlg(Msg: string; DlgType: TMsgDlgType;
Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;
Данная функция отображает на экране стандартное диалоговое окно и возвращает код кнопки, нажатой пользователем в диалоговом окне. Применение данной функции позволяет создавать интерактивные скрипты.
Параметры:
Msg - текст сообщения или вопроса, выводимого в диалоговом окне
DlgType - тип диалогового окна. Для задания типа диалогового окна предусмотрен набор констант:
  • •
    mtWarning - предупреждение
  • •
    mtError - ошибка
  • •
    mtInformation - информация
  • •
    mtConfirmation - запрос подтверждения
С технической точки зрения тип диалогового окна определяет заголовок окна и отображаемую в окне иконку.
Buttons - код, определяющий, какой набор кнопок необходимо отобразить в диалоговом окне. Для задания набора кнопок предусмотрен набор констант:
  • •
    mbOk - "ОК"
  • •
    mbCancel - "Отмена"
  • •
    mbYes - "Да"
  • •
    mbNo - "Нет"
  • •
    mbAbort - "Прервать",
  • •
    mbRetry - "Повторить",
  • •
    mbIgnore - "Игнорировать"
    Если требуется отобразить несколько кнопок, то код набора кнопок получается суммированием констант (например, mbYes+mbNo).
HelpCtx - код раздела справочной системы, в пользовательских скриптах должен быть равен нулю
Функция возвращает код нажатой кнопки:
  • •
    mbOk - код 1
  • •
    mbCancel - код 2
  • •
    mbYes - код 6
  • •
    mbNo - код 7
  • •
    mbAbort - код 3,
  • •
    mbRetry - код 4
  • •
    mbIgnore - код 5
Важные замечания по работе функции:
1. Если в параметр Buttons фигурирует mbCancel, то появляется поддержка закрытия диалогового окна путем нажатия клавиши ESC на клавиатуре
2. Независимо от того, включена ли кнопка типа mbCancel в состав отображаемых через параметр Buttons, при закрытии диалогового окна путем нажатия "крестика" в заголовке окна, или путем закрытия диалогового окна по Alt+F4 формируется код возврата 2 (mbCancel).
Примеры:
var
Res : integer;
begin
Res := MessageDLG('Выполнить операцию ?', mtConfirmation, mbYes+mbNo, 0);
AddToLog('Код результата = ' + Inttostr(Res));
end.
Пример анализа возвращаемого функцией кода:
var
FileName : string;
begin
FileName := 'c:\trojan.exe';
if MessageDLG('Удалить файл "'+FileName+'" ?', mtConfirmation, mbYes+mbNo, 0) = 6 then
DeleteFile(FileName);
end.


16.12. Автоматическое обновление

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.12. Автоматическое обновление
  • Предыдущая
  • Следующая

Содержание 16.12. Автоматическое обновление

16.12.1. function ExecuteAVUpdate
16.12.2. function ExecuteAVUpdateEx


16.12.1. function ExecuteAVUpdate

function ExecuteAVUpdate : boolean;
Выполнение обновления баз утилиты AVZ через Интернет. Параметры для функции не требуются, обновление производится с одного из серверов, содержащих обновление. Сервер выбирается случайным образом
Пример:
begin
if ExecuteAVUpdate then
AddToLog('Обновление AV баз успешно выполнено');
end.


16.12.2. function ExecuteAVUpdateEx

function ExecuteAVUpdateEx(AServerURL : string; AConnectMode : byte;
ProxyServer, ProxyUser, ProxyPass : string) : boolean;
Выполнение обновления баз утилиты AVZ через Интернет. Аналогична ExecuteAVUpdate, но проводит обновление согласно заданным параметрам с указанного URL, что в частности позволяет обновлять базы с сервера в локальной сети.
Параметры:
AServerURL - URL сервера, с которого проводится обновление. Если вместо URL указать пустую строку, то в качестве источника обновления случайным образом берется один из стандартных URL (случайный выбор позволяет распределять нагрузку между источниками обновления).
На режим загрузки обновлений влияет параметр ExtUpdates . По умолчанию идет обычное обновление, однако имеется возможность включения режима расширенного обновления, в котором в папке BASE создается зеркало папки с обновления на сайте, что позволяет в свою очередь открыть к этой папке доступ через WEB сервер и использовать ее как источник обновления, к примеру внутри корпоративной сети.
AConnectMode - код режима соединения:
0 - соединение в соответствии с настройками Internet Explorer. В этом режиме параметры ProxyServer, ProxyUser, ProxyPass игнорируются;
1 - прямое соединение. Оптимально для компьютера, имеющего прямой выход в Интернет. В этом режиме параметры ProxyServer, ProxyUser, ProxyPass игнорируются;
2 - соединение через прокси сервер, не требующий авторизации. В этом режиме в обязательном порядке должен быть указан ProxyServer, через который будет вестись работа, параметры ProxyUser и ProxyPass игнорируются;
3 - соединение через прокси сервер, требующий авторизации. Режим аналогичен режиму 2, но обязательно заполняются параметры ProxyUser, ProxyPass.
4 - соединение через прокси сервер, требующий авторизации по протоколу NTLM. Режим аналогичен режиму 3.
ProxyServer - имя или IP адрес прокси-сервера, имеет смысл только в режимах 2 и 3.
ProxyUser - имя пользователя для авторизации на прокси сервере, имеет смысл только в режиме 3
ProxyPass - пароль пользователя для авторизации на прокси сервере, имеет смысл только в режиме 3
Примеры:
begin
if ExecuteAVUpdateEx('http://my_server.com/avz_av_update/', 0, '','','') then
AddToLog('Обновление AV баз (по настройкам IE) успешно выполнено');
end.
begin
if ExecuteAVUpdateEx('http://my_server.com/avz_av_update/', 1, '','','') then
AddToLog('Обновление AV баз (прямое соединение) успешно выполнено');
end.
begin
if ExecuteAVUpdateEx('http://my_server.com/avz_av_update/', 2, 'myproxy','','') then
AddToLog('Обновление AV баз (Proxy сервер без авторизации) успешно выполнено');
end.
begin
if ExecuteAVUpdateEx('http://my_server.com/avz_av_update/', 3, 'myproxy','Pupkin','TopSecretPasswd') then
AddToLog('Обновление AV баз (Proxy сервер с авторизацией) успешно выполнено');
end.


16.13. Работа с протоколом

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.13. Работа с протоколом
  • Предыдущая
  • Следующая

Содержание 16.13. Работа с протоколом

16.13.1. procedure AddToLog
16.13.2. procedure SaveLog
16.13.3. procedure ClearLog
16.13.4. procedure SaveCSVLog
16.13.5. function AddLineToTxtFile


16.13.1. procedure AddToLog

procedure AddToLog(S : String);
Выполняет добавление в протокол указанной строки. Данная функция полезна для регистрации некоторой информации, которую разработчик
скрипта желает внести в протокол. При этом следует учесть, что если в скрипте используется команда ExitAVZ , то пользователь может не успеть прочитать сообщения в протоколе, как следствие, следует сохранить протокол, к примеру командой SaveLog .
Пример:
begin
AddToLog('Протокол с компьютера '+GetComputerName);
end.
См. также: SaveLog , ClearLog


16.13.2. procedure SaveLog

procedure SaveLog(S : string);
Сохранение протокола в файл. Файл может размещаться в сети. Если указанный в имени файла протокола путь не существует, то перед сохранением файла протокола делается попытка создания этой папки. Если по указанному пути уже существует файл с указанным именем, то он затирается сохраняемым протоколом без вывода запросов или предупреждений.
Пример:
begin
SaveLog('c:\avz_log.txt');
SaveLog('\\my_server\avz_logs\avz_'+GetComputerName+'.txt');
end.
В примере продемонстрирована возможность динамического формирования имени протокола, путем добавление в имя файла сетевого имени ПК, полученного при помощи функции GetComputerName
Важное замечание: Версии 4.xx сохраняли протокол в формате ANSI в кодировке win-1251. Начиная с версии 5 протокол сохраняется в кодировке UTF-8. При необходимости формат можно изменить при помощи параметра командной строки LogEncoding .
Пример:
begin
ClearLog;
AddToLog('en: Test string');
AddToLog('ru: Тестовая строка');
AddToLog('en: Test string');
AddToLog('ru: Тестовая строка');
// Запись в кодировке по умолчанию (должен сохранить в UTF8)
SaveLog('_test_log_default.txt');
// Принудительное переключение кодировки
SetupAVZ('LogEncoding﻿=ANSI');
SaveLog('_test_log_ansi.txt');
SetupAVZ('LogEncoding=UTF8');
SaveLog('_test_log_utf8.txt');
SetupAVZ('LogEncoding=UNICODE');
SaveLog('_test_log_unicode.txt');
end.
В примере использовались: ClearLog, AddToLog, SetupAVZ


16.13.3. procedure ClearLog

procedure ClearLog;
Выполняет очистку протокола.
Совместимость: AVZ 4.34 и выше
Пример:
begin
AddToLog('Test 1');
ClearLog;
AddToLog('Test 2');
end.
В результате работы данного скрипта в протоколе будет только строка "Test 2".
См. также: SaveLog , AddToLog


16.13.4. procedure SaveCSVLog

procedure SaveCSVLog(S : string);
Сохраняет протокол сканирования в формате CSV.
Протокол в формате CSV содержит три поля, разделенных символом ";" - имя файла, код события и текстовое примечание.
Поддерживаются следующие коды событий:
1 - вредоносная программа
2 - подозрение файлового сканера на вредоносную программу
3 - подозрение эвристика
4 - подозрение антируткита
5 - подозрение антикейлоггера
Пример:
begin
SaveCSVLog('c:\avz_log.csv');
end.


16.13.5. function AddLineToTxtFile

function AddLineToTxtFile(AFileName, S : string) : boolean;
Добавляет строку S к текстовому файлу с именем AFileName. Файл создается в случае его отсутствия и открывается в случае наличия, закрытие файла производится сразу после добавления строки. Данная функция удобна для формирования сводных протоколов и ведения единого протокола с данными для администратора.
В имени файла допустимо указывать макросы, подробнее см. в разделе " макросы, допустимые в именах файлов "
Функция возвращает true в случае успешного добавления строки к файлу и false в случае ошибки.
Пример:
1. Простейший пример:
begin
AddLineToTxtFile('c:\log.txt', 'Сообщение');
end.
2. Пример генерации протокола, строки которого содержат дату, время и имя компьютера:
begin
AddLineToTxtFile('c:\log.txt',
DateTimeToStr(Now)+' '+GetComputerName+' : '+
'Сообщение');
end.


16.14. Карантин и папка Infected

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.14. Карантин и папка Infected
  • Предыдущая
  • Следующая

Содержание 16.14. Карантин и папка Infected

16.14.1. procedure ExecuteAutoQuarantine
16.14.2. function CreateQurantineArchive
16.14.3. function CreateInfectedArchive
16.14.4. function QuarantineFile
16.14.5. function QuarantineFileF
16.14.6. function ClearQuarantine
16.14.7. function ClearQuarantineEx
16.14.8. function ClearQuarantineFilter
16.14.9. function AddQuarantineFilter


16.14.1. procedure ExecuteAutoQuarantine

procedure ExecuteAutoQuarantine;
Выполнение автоматического карантина файлов, которые не опознаны по базе безопасных. В такой карантин попадают все загруженные процессы/DLL/драйверы, элементы автозапуска. На процесс карантина влияют маски фильтрации, задаваемые при помощи AddQuarantineFilter и параметр командной строки QrOnlyEXE
Пример:
begin
// Очистка карантина
ClearQuarantine;
// Выполнение автокарантина
ExecuteAutoQuarantine;
// Формирование архива с карантином
CreateQurantineArchive('c:\autoqr.zip');
end.
В данном примере осуществляется очистка карантина с помощью ClearQuarantine , далее выполняется автоматический карантин и затем формируется архив с помощью CreateQurantineArchive , содержащий попавшие в карантин файлы.


16.14.2. function CreateQurantineArchive

function CreateQurantineArchive(AFileName : string; AQrInfoFiles : string = '') : boolean;
Функция создает архив с файлами, помещенными в папку карантина. Из имеющихся в папке Quarantine подкаталога выбирается тот, который соответствующего максимальной дате. Если карантин был очищен перед помещением в него файлов, то соответственно в нем будет единственный подкаталог, который и попадет в архив.
Архив имеет ZIP формат, пароль по умолчанию - virus. Если указанная в параметре AFileName папка не существует, то перед сохранением архива делается попытка создать ее. Начиная с версии 4.45 пароль архива может быть изменен при помощи параметра QrPWD , задаваемого через командную строку или функцию скрипта SetupAVZ
Необязательный параметр AQrInfoFiles поддерживается начиная с версии 4.41, и содержит список произвольных файлов, которые добавляются в папку INFO карантина. Разделителем списка файлов является ";". Может применяться для того, чтобы сохранить в карантине некие пояснения, протоколы исследования, сведения о ПК и т.п.
Пример:
begin
// Очистка карантина
ClearQuarantine;
// Автокарантин
ExecuteAutoQuarantine;
// Создание архива с файлами, помещенными в карантин
CreateQurantineArchive(GetAVZDirectory+'quarantine.zip');
end.
Пример для версии 4.41:
begin
// Очистка карантина
ClearQuarantine;
// Автокарантин
ExecuteAutoQuarantine;
// Выполнить исследование системы
ExecuteSysCheckEx(GetAVZDirectory + 'syscheck.htm', $FFFFFFFF, true, 1+4+32+64);
// Создание архива с файлами, помещенными в карантин
CreateQurantineArchive(GetAVZDirectory+'quarantine.zip',
GetAVZDirectory + 'syscheck.htm;'+
GetAVZDirectory + 'syscheck.xml');
// Удаление ненужных файлов
DeleteFile(GetAVZDirectory + 'syscheck.htm');
DeleteFile(GetAVZDirectory + 'syscheck.xml');
end.
В данном примере выполняется очистка карантина при помощи ClearQuarantine , затем выполняется карантин ( ExecuteAutoQuarantine ) и формирование протокола с результатами исследования системы ( ExecuteSysCheckEx ). Затем при формировании архива с карантином в него добавляются HTML и XML протоколы. После формирования архива протоколы удаляются при помощи функции DeleteFile


16.14.3. function CreateInfectedArchive

function CreateInfectedArchive(AFileName : string; AQrInfoFiles : string = '') : boolean;
Функция создает архив с файлами, помещенными сегодня в Infected (т.е. берутся все файлы из папки Infected, соответствующей текущей дате). Архив имеет ZIP формат, пароль - virus. Если указанная в параметре AFileName папка не существует, то перед сохранением архива делается попытка создать ее.
Необязательный параметр AQrInfoFiles поддерживается начиная с версии 4.41, и содержит список произвольных файлов, которые добавляются в папку INFO карантина. Разделителем списка файлов является ";". Может применяться для того, чтобы сохранить в карантине некие пояснения, протоколы исследования, сведения о ПК и т.п.
Пример:
begin
// Создание архива c содержимым папки Infected
CreateInfectedArchive(GetAVZDirectory+'infected.zip');
end.


16.14.4. function QuarantineFile

function QuarantineFile(AFileName, AMsg : string): boolean;
Копирование указанного файла с именем AFileName в карантин. При помещение в карантин в описание файла вносится текст из параметра AMsg. Если файл уже есть в карантине или он опознан по базе безопасных, то копирование в карантин блокируется.
Если файл найден и успешно скопирован в карантин, то функция возвращает true.
Если файл не найден или помещение в карантин блокировано по причине наличия файла в базе безопасных, то возвращается False.
На работу функции влияют маски фильтрации, задаваемые при помощи AddQuarantineFilter
В имени файла допустимы макросы , в частности:
%WinDir% - полный путь в папке Windows
%System32% - полный путь к папке System (в Win9x) или System32 (в NT/W2K/XP ...)
На заметку:
Если функции QuarantineFile не указано полное имя файла, то делается попытка поиска файла, в ходе которого кроме штатного поиска перебираются типовые варианты местоположения файла, в частности проверяются варианты "имя файла + пути к системным папкам". Это делается для того, чтобы повысить вероятность карантина нужных файлов для исследования
Пример:
begin
QuarantineFile('%System32%\vbsys2.dll',
'Подозрительное имя, возможно Trojan.Agent');
QuarantineFile('%WinDir%\vbsys2.dll',
'Подозрительное имя, возможно Trojan.Agent');
end.
В имени файла допускаются маски, содержащие "*" и "?", например:
begin
QuarantineFile('%System32%\vbsys*.dll',
'Подозрительное имя, возможно Trojan.Agent');
end.
При указании маски производится поиск подходящих файлов, и все найденные файлы добавляются в карантин.
В случае необходимости папка Quarantine может быть перемещена в любой каталог с помощью ключа командной строки QuarantineBaseFolder . В этом случае настройка папки карантина должна производиться до операций с карантином.
Пример:
begin
// Настройка местоположения папки карантина
SetupAVZ('QuarantineBaseFolder=c:\avz4\');
// Карантин файла
QuarantineFile('%System32%\vbsys2.dll',
'Подозрительное имя, возможно Trojan.Agent');
end.


16.14.5. function QuarantineFileF

function QuarantineFileF(ASearchPath:string;AMaskList:string;
ARecurse : boolean;
AMsg : string;
ASizeMin, ASizeMax : integer;
ADateMin : string = ''; ADateMax : string = '';
ACopyRigth : string = '';
AMD5 : string = ''):integer
Поиск файлов по заданному набору условий и копирование найденных файлов в карантин.
Является аналогов функции QuarantineFile для случая, когда неизвестно точное имя файла, но есть некоторые данные о нем (например, известен размер файла, его дата создания/модификации, копирайты или MD5).
Если любой из найденных файлов уже есть в карантине, или он опознан по базе безопасных, то копирование в карантин блокируется.
На работу функции влияют маски фильтрации, задаваемые при помощи AddQuarantineFilter
Параметры
ASearchPath - путь к каталогу, в котором осуществляется поиск. В пути допустимы макросы . Параметр обязателен
AMaskList - одна или несколько масок имени файла. В случае указания нескольких масок они разделяются запятой или точкой с запятой (,;). Например: "*.dll" или "*.exe;*.dll;xx0????.tmp". В маске могут использоваться стандартные символы * (любое количество любых символов) и ? - один произвольный символ в заданной позиции. Параметр обязателен, должна быть задана хотя-бы одна маска. Вместо маски (или в качестве одной из масок в списке) можно указывать имя файла, например "*.dll;trojan.exe;virus.exe" - в данном случае условию соответствуют все файлы с расширением DLL и файлы с именами trojan.exe и virus.exe
ARecurse - управление рекурсивным поиском по вложенным папкам. Если равен false, то поиск файла ведется только в указанном каталоге. Если true - то в указанном каталоге и всех его вложенных подкаталогах.
AMsg - произвольный текст, который при помещение в карантин вносится в описание файла. Параметр обязателен, допускается задание пустой строки
ASizeMin - минимальный размер файла в байтах. Параметр обязателен
ASizeMax - максимальный размер файла в байтах. Параметр обязателен, задание максимального размера 0 выключает контроль максимального размера
ADateMin - минимальная дата файла. Дата задается в виде строки формата DD.MM.YYYY. При сравнении проверяется дата создания и дата последней модификации файла, если любая из дат больше заданной, то условие считается выполненным. Параметр необязателен, если контроль минимальной даты не нужен, то задается пустая строка.
ADateMax - максимальная дата файла. Дата задается в виде строки формата DD.MM.YYYY. При сравнении проверяется дата создания и дата последней модификации файла, если любая из дат меньше заданной, то условие считается выполненным. Параметр необязателен, если контроль максимальной даты не нужен, то задается пустая строка.
ACopyRigth - фрагмент копирайтов файла. Если задана пустая строка, то контроль копирайтов не производится. Если задан некий образец, то производится его поиск в тексте копирайтов, в случае нахождения условия считается выполненным. Поиск идет без учета регистра
AMD5 - MD5 сумма файла. Задание пустой строки или отсутствие параметра отключает контроль MD5.
Совместимость: AVZ 4.34 и выше
На заметку
ARecurse = true следует применять с осторожностью, в особенность если сканируемая папка содержит множество подкаталогов - поиск файла в них может занять длительное время и значительно нагружать ресурсы системы.
На заметку
В случае, если задан образец копирайтов или MD5 сумма, требуется выполнение операций с файлом. При это на чтение копирайтов затрачиваются сравнительно небольшие ресурсы, тогда как для вычисления MD5 требуется чтение всего файла с диска, что весьма негативно влияет на быстродействие. Поэтому при проверке установлен приоритет проверок:
- размер
- дата создания и модификации
- копирайты
- MD5
Поэтому к примеру поиск по размеру и MD5 будет идти значительно быстрее, чем просто по MD5 - за счет того, что ресурсоемкая операция вычисления MD5 будет производиться только для файлов с подходящим размером.
Примеры:
1. Пример карантина файла по маскам имени без учета прочих параметров
begin
QuarantineFileF('c:\windows', 'avm*.*', false, '', 0, 0);
end.
2. Пример карантина EXE файлов с заданным размером (очень удобно для поиска семпла с известным размером и неизвестным именем)
begin
QuarantineFileF('c:\windows', '*.exe', false,'', 98154, 98154);
end.
3. Пример карантина EXE и DLL файлов, созданных или модифицированных в пределах заданного интервала времени
begin
QuarantineFileF('c:\windows', '*.exe,*.dll', false,'',
0, 0, '1.06.2010', '3.06.2010');
end.
4. Пример карантина DLL файлов по MD5
begin
QuarantineFileF('c:\windows', '*.dll', false,'',
0, 0, '', '', '',
'91D52886E142ACB998D7539B6EF2040C');
end.
5. Пример карантина DLL файлов по MD5 размеру
begin
QuarantineFileF('c:\windows', '*.dll', false,'',
98154, 98154, '', '', '',
'91D52886E142ACB998D7539B6EF2040C');
end.
6. Пример карантина EXE файлов по размеру и фрагментам копирайтов
begin
QuarantineFileF('c:\windows', '*.exe', false, '',
80000, 12000, '', '',
'cool malware');
end.


16.14.6. function ClearQuarantine

function ClearQuarantine : boolean;
Выполняет очистку карантина. Чистится только папка карантина за текущую дату.
Пример:
begin
// Очистка карантина
ClearQuarantine;
end.
См. также: ClearQuarantineEx


16.14.7. function ClearQuarantineEx

function ClearQuarantineEx(AFullClean : boolean):boolean;
Выполняет очистку карантина.
Режим очистки зависит от параметра AFullClean:
  • •
    AFullClean=true - в карантине удаляются папки за все даты.
  • •
    AFullClean=false - удаляется карантин за текущую дату. В этом режиме функция ClearQuarantineEx работает аналогично функции ClearQuarantine .
Пример:
begin
// Полная очистка карантина
ClearQuarantineEx(true);
end.
См. также: ClearQuarantine


16.14.8. function ClearQuarantineFilter

procedure ClearQuarantineFilter;
Выполняет очистку фильтра, блокирующего помещение в карантин файлов с заданными именами и расширениями. По умолчанию после запуска фильтр пуст и в карантин попадают все файлы, не значащиеся в базе чистых.
Совместимость: AVZ 4.45 и выше
Пример:
begin
ClearQuarantineFilter;
end.
См. также: AddQuarantineFilter


16.14.9. function AddQuarantineFilter

procedure AddQuarantineFilter(AMask : string);
Добавляет к фильтр маску, заданную параметром AMask. Добавление первой маски включает фильтр, его выключение производится путем очистки условий функцией ClearQuarantineFilter
Фильтр полезен при исследовании ПК режимных объектов, где необходимо исключить попадание в карантин файлов с определенными расширениями, например '*.doc*'. Фильтр влияет также на автокарантин, и полезен для исключения из карантина определенных файлов или каталогов.
В маске допустимо указание каталогов, могут использоваться " макросы, допустимые в именах файлов "
Совместимость: AVZ 4.45 и выше
begin
ClearQuarantineFilter;
// Настройка фильтра
AddQuarantineFilter('*.xlsx');
AddQuarantineFilter('C:\Секретные документы\*.*');
// Карантин файлов
QuarantineFile('C:\Секретные документы\Секретный отчет.docx', '');
QuarantineFile('C:\Секретные документы\Совершенно секретно\12345.txt', '');
end.
В данном примере полностью блокируется карантин файлов в папке C:\Секретные документы\ и всех ее вложенных подкаталогах, а также карантин файлов с расширением *.xlsx независимо от их местоположения.
См. также: ClearQuarantineFilter , QuarantineFile


16.15. Функции запроса информации о AVZ

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.15. Функции запроса информации о AVZ
  • Предыдущая
  • Следующая

Содержание 16.15. Функции запроса информации о AVZ

16.15.1. function GetAVZDirectory
16.15.2. function GetScanPath
16.15.3. function GetAVZVersion
16.15.4. function GetAVZVersionTxt
16.15.5. function GetAVZDBDate
16.15.6. function GetAVZSvcName


16.15.1. function GetAVZDirectory

function GetAVZDirectory : string;
Возвращает полный путь (с завершающим '\' на конце) к папке, из которой запущен AVZ.
Пример:
begin
AddToLog(GetAVZDirectory);
end.
В данном примере в протокол выводится полный путь к папке AVZ.


16.15.2. function GetScanPath

function GetScanPath:string
Возвращает список сканируемых папок. Если задано сканирование нескольких папок, то они разделяются точкой с запятой.
Пример:
var
s : string;
begin
SetupAVZ('scan=c:\Program Files');
SetupAVZ('scan=c:\windows');
AddToLog('Сканируются: ' + GetScanPath);
// Выделение первого сканируемого каталога
s := GetScanPath;
if pos(';', s) > 0 then
s := copy(s, 1, pos(';', s) - 1);
AddToLog('Первая сканируемая папка = ' + s);
end.
В примере используется ряд других функций скриптового языка: SetupAVZ , AddToLog .


16.15.3. function GetAVZVersion

function GetAVZVersion : double;
Возвращает версию AVZ в виде числа с плавающей запятой. Следует помнить, что условия "=" к переменным с плавающей запятой применять не рекомендуется.
Пример:
begin
if GetAVZVersion < 4.20 then begin
AddToLog('Для работы скрипта необходима версия AVZ не менее 4.20');
AddToLog('Текущая версия - '+FormatFloat('#0.00', GetAVZVersion));
ExitAVZ;
end;
end.


16.15.4. function GetAVZVersionTxt

function GetAVZVersionTxt : string;
Получение версии AVZ в текстовом виде. Возвращается строка, выводимая в копирайты протоколов (она содержит версию и дату ее выпуска).
Пример:
begin
AddToLog(GetAVZVersionTxt);
end.
Данный пример выведет в протокол строчку вида "(с) Лаборатория Касперского, 2008, версия 4.30 от 6.04.2008". Следует учесть, что данная строка выводится локализованной, и формируется в соответствии с текущим языком интерфейса AVZ.
На заметку:
В критических к версии скриптах контроль версии следует производить с помощью функции GetAVZVersion


16.15.5. function GetAVZDBDate

function GetAVZDBDate(AMask : string) : TDateTime;
Возвращает дату и время сборки базы AVZ. В случае не успешного выполнения дата равна нулю.
Параметр AMask задает маску имени файла, при это функция может работать в двух режимах:
- в параметре AMask задано имя некой базы. В этом случае функция вернет дату и время сборки заданной конкретной базы
- в параметре AMask задана маска. В этом случае производится поиск всех баз, имена которых подходят по заданную маску, и возвращается максимальная дата сборки найденных файлов базы.
Совместимость: AVZ 4.45 и выше
Пример:
begin
AddToLog(DateTimeToStr(GetAVZDBDate('*.avz')));
end.
В данном примере изучаются все базы AVZ и выводится максимальная дата сборки
begin
AddToLog(DateTimeToStr(GetAVZDBDate('signf*.avz')));
end.
В данном примере выводится максимальная дата сборки базы чистых объектов
begin
AddToLog(DateTimeToStr(GetAVZDBDate('scu.avz')));
end.
Выводится дата сборки конкретной заданной базы (в данном случае базы визарда чистки мусора)


16.15.6. function GetAVZSvcName

function GetAVZSvcName(ID : integer) : string;
Возвращает имя службы AVZ с указанным идентификатором.
Совместимость: AVZ 4.26 и выше


16.16. Интерфейс AVZ

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.16. Интерфейс AVZ
  • Предыдущая
  • Следующая

Содержание 16.16. Интерфейс AVZ

16.16.1. procedure UnLockInterface
16.16.2. procedure LockInterface
16.16.3. procedure SetStatusBarText


16.16.1. procedure UnLockInterface

procedure UnLockInterface;
Разблокирует интерфейс программы AVZ для пользователя. Вызов для незаблокированного состояния интерфейса и повторные вызовы не являются ошибкой


16.16.2. procedure LockInterface

procedure LockInterface;
Заблокировать интерфейс программы AVZ для пользователя. Повторные вызовы не являются ошибкой.


16.16.3. procedure SetStatusBarText

procedure SetStatusBarText(AMsg : string);
Выводит заданный текст в строке статуса. Может применяться для вывода информации о ходе работы скрипта, особенно в случае его длительного выполнения.


16.17. Управление AVZPM

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.17. Управление AVZPM
  • Предыдущая
  • Следующая

Содержание 16.17. Управление AVZPM

16.17.1. function SetAVZPMStatus
16.17.2. function GetAVZPMStatus


16.17.1. function SetAVZPMStatus

function SetAVZPMStatus(ANewStatus : boolean) : boolean;
Включает или выключает AVZPM. ANewStatus - новый статус системы AVZPM. Если ANewStatus = true, то система AVZPM активируется, если false - выключается. Попытка повторного включение или повторного выключения не является ошибкой. Активация предполагает установку драйвера на диск, регистрацию драйвера в реестре и загрузку драйвера. Удаление предполагает удаление ключа реестра и файла драйвера с диска.
Возвращаемое значение: возвращается признак успешности выполнения операции, true - операция выполнена успешно, false - ошибка.
Пример:
begin
if SetAVZPMStatus(True) then
AddToLog('AVZ PM успешно установлен и активирован')
else
AddToLog('AVZ PM - ошибка активации');
end.
На заметку:
Помните, что драйвер AVZ PM автоматически загружается при старте системы, поэтому после активации AVZ PM и перезагрузки драйвер загрузится автоматически.


16.17.2. function GetAVZPMStatus

function GetAVZPMStatus : boolean;
Возвращает текущий статус AVZPM - true=включен, false=выключен.
Пример:
begin
if GetAVZPMStatus then
AddToLog('AVZ PM активен')
else
AddToLog('AVZ PM не активен');
end.


16.18. Управление AVZGuard

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.18. Управление AVZGuard
  • Предыдущая
  • Следующая

Содержание 16.18. Управление AVZGuard

16.18.1. function SetAVZGuardStatus
16.18.2. function GetAVZGuardStatus


16.18.1. function SetAVZGuardStatus

function SetAVZGuardStatus(ANewStatus : boolean) : boolean;
Включает или выключает AVZGuard. ANewStatus - новый статус системы AVZGuard. Если ANewStatus = true, то система AVZGuard активируется, если false - выключается. Попытка повторного включение или повторного выключения не является ошибкой.
Возвращаемое значение: возвращается признак успешности выполнения операции, true - операция выполнена успешно, false - ошибка.
Пример:
begin
if SetAVZGuardStatus(True) then
AddToLog('AVZGuard успешно активирован')
else
AddToLog('AVZGuard - ошибка активации');
end.
На заметку:
Помните, что если завершить работу AVZ при включенном AVZGuard, то контроль над ним будет потерян и потребуется перезагрузка компьютера.


16.18.2. function GetAVZGuardStatus

function GetAVZGuardStatus : boolean;
Возвращает текущий статус AVZGuard - true=включен, false=выключен.
Пример:
begin
if GetAVZGuardStatus then
AddToLog('AVZGuard активен')
else
AddToLog('AVZGuard не активен');
end.


16.19. Управление Boot Cleaner

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.19. Управление Boot Cleaner
  • Предыдущая
  • Следующая

Содержание 16.19. Управление Boot Cleaner

16.19.1. function BC_Activate
16.19.2. function BC_DeActivate
16.19.3. function BC_Execute
16.19.4. function BC_Clear
16.19.5. function BC_LogFile
16.19.6. function BC_QrFile
16.19.7. function BC_QrSvc
16.19.8. function BC_DeleteFile
16.19.9. function BC_CopyFile
16.19.10. function BC_DeleteReg
16.19.11. function BC_DeleteSvcReg
16.19.12. function BC_DeleteSvc
16.19.13. function BC_DisableSvc
16.19.14. function BC_ImportDeletedList
16.19.15. function BC_ImportQuarantineList
16.19.16. function BC_ImportALL
16.19.17. Типовые примеры


16.19.1. function BC_Activate

function BC_Activate : boolean;
Производит активацию системы, установку драйвера и его настройку. Перед вызовом BC_Activate необходимо указать удаляемые объекты при помощи команд BC_DeleteFile, BC_DeleteReg, BC_DeleteSvc. Функция возвращает true в случае успешной установки и конфигурирования драйвера и false в случае ошибки.
Пример:
begin
// Добавление в сценарий команды удаления драйвера PE386
BC_DeleteSvc('PE386');
// Активация драйвера
BC_Activate;
// Перезагрузка
RebootWindows(true);
end.


16.19.2. function BC_DeActivate

function BC_DeActivate : boolean;
Производит удаление драйвера с диска и всех принадлежащих драйверу ключей и параметров из реестра. Возвращает true в случае успешного удаление драйвера.
См. также: BC_Activate , BC_Execute
Пример:
begin
BC_DeActivate;
end.


16.19.3. function BC_Execute

function BC_Execute : boolean;
Устанавливает драйвер и настраивает его, после чего производит принудительную загрузку драйвера, что приводит к выполнению поставленного драйверу задания немедленно, без перезагрузки. Может применяться для удаления объектов из режима ядра без перезагрузки, а также для отладочных целей. После успешного выполнения операций драйвер самоуничтожается, поэтому вызов BC_DeActivate необязателен.
Вызов BC_Execute не влияет на подготовленные другими командами настройки, поэтому возможен повторный вызов BC_Execute или BC_Activate без перенастройки.
Примеры:
begin
// Попытка удаления драйвера PE386 из режима ядра без перезагрузки
BC_DeleteSvc('PE386');
BC_Execute;
end.
begin
// Удаления драйвера PE386
BC_DeleteSvc('PE386');
BC_Activate;
end.
См. также: BC_Activate


16.19.4. function BC_Clear

function BC_Clear : boolean;
Выполняет очистку существующих настроек. В момент старта скрипта данная операция выполняется автоматически.


16.19.5. function BC_LogFile

function BC_LogFile(AFileName : string) : boolean;
Данная функция позволяет включить протоколирование и задать имя и местоположение файла протокола. Задание вместо имени протокола пустой строки отключает протоколирование. По умолчание протоколирование отключено. Задание недопустимого имени файла или корректного имени на недоступном в момент загрузки системы диске не является ошибкой - в случае невозможности создания файла протоколирование отключится, но драйвер выполнить все предписанные в настройках операции.
Пример:
begin
// Добавление в сценарий команды удаления драйвера PE386
BC_DeleteSvc('PE386');
// Настройка протокола
BC_LogFile(GetAVZDirectory + 'boot_clr.log');
// Активация драйвера
BC_Activate;
// Перезагрузка
RebootWindows(true);
end.


16.19.6. function BC_QrFile

function BC_QrFile(AFileName : string) : boolean;
Добавляет команду карантина указанного файла в сценарий BootCleaner. В имени файлы допустимы макросы . Карантин файлов посредством BootCleaner полезен в случае, если вредоносная программа блокирует доступ к своим файлам при помощи руткит-механизмов, которые не удается нейтрализовать встроенным антируткитом AVZ. Помещенные в карантин файлы доступны через строенные средства просмотра карантина AVZ, но файлы именуются как bcqrXXXXX.dat и bcqrXXXXX.ini
На заметку:
Команда карантина файла имеет приоритет над прочими командами.
begin
// Добавление в сценарий команды карантина файла
BC_QrFile('%WinDir%\trojan.exe');
// Настройка протокола
BC_LogFile(GetAVZDirectory + 'boot_clr.log');
// Активация
BC_Activate;
end.


16.19.7. function BC_QrSvc

function BC_QrSvc(ASvcName : string) : boolean;
Добавляет команду карантина указанной службы или драйвера. Помещенные в карантин файлы доступны через строенные средства просмотра карантина AVZ, но файлы именуются как bcqrXXXXX.dat и bcqrXXXXX.ini
begin
// Добавление в сценарий команды карантина файла
BC_QrSvc('PE386');
// Настройка протокола
BC_LogFile(GetAVZDirectory + 'boot_clr.log');
// Активация
BC_Activate;
end.


16.19.8. function BC_DeleteFile

function BC_DeleteFile(AFileName : string) : boolean;
Добавляет команду удаления файла с именем AFileName в сценарий BootCleaner. В имени файлы допустимы макросы
begin
// Добавление в сценарий команды удаления файла
BC_DeleteFile('%WinDir%\trojan.exe');
// Настройка протокола
BC_LogFile(GetAVZDirectory + 'boot_clr.log');
// Активация
BC_Activate;
end.


16.19.9. function BC_CopyFile

function BC_CopyFile(AFromName, AToName : string) : boolean;
Добавляет команду копирования файла AFromName -> AToName в сценарий BootCleaner. В именах файлов допустимы макросы
Совместимость: AVZ 4.26 и выше


16.19.10. function BC_DeleteReg

function BC_DeleteReg(AKeyName : string) : boolean;
Добавляет команду удаления ключа реестра с именем AKeyName в сценарий BootCleaner. Имя ключа реестра должно начинаться с имени раздела, допустимы следующие имена разделов: HKLM, HKCU, HKEY_LOCAL_MACHINE, HKEY_CURRENT_USER.


16.19.11. function BC_DeleteSvcReg

function BC_DeleteSvcReg(ASvcName : string) : boolean;
Добавляет команду удаления ключа реестра для драйвера или службы с именем ASvcName в сценарий BootCleaner. Важно отметить, что исполняемый файл на диске при это не удаляется.
И имени службы/драйвера допустимы Unicode символы, в том числе символы с кодом 0. Для указания Unicode символов применяется специальная форма записи "\uXXXX", где XXXX - код символа. Например: 'Super\u0000Puper\u0000Driver'


16.19.12. function BC_DeleteSvc

function BC_DeleteSvc(ASvcName : string) : boolean;
Добавляет команду удаления драйвера или службы с именем ASvcName в сценарий BootCleaner. Удаление предполагает поиск и удаление исполняемого файла указанной службы с последующим удалением соответствующего ей ключа реестра.
И имени службы/драйвера допустимы Unicode символы, в том числе символы с кодом 0. Для указания Unicode символов применяется специальная форма записи "\uXXXX", где XXXX - код символа. Например: 'Super\u0000Puper\u0000Driver'


16.19.13. function BC_DisableSvc

function BC_DisableSvc(ASvcName : string) : boolean;
Добавляет команду отключения драйвера или службы с именем ASvcName в сценарий BootCleaner. Отключение предполагает установку статуса 4 (отключен) в соответствующем ключе реестра. Остальные параметры в реестре и файл на диске при этом не затрагиваются.
И имени службы/драйвера допустимы Unicode символы, в том числе символы с кодом 0. Для указания Unicode символов применяется специальная форма записи "\uXXXX", где XXXX - код символа. Например: 'Super\u0000Puper\u0000Driver'
Пример:
begin
// Добавление в сценарий команды отключения драйвера "PE386"
BC_DisableSvc('PE386');
// Настройка протокола
BC_LogFile(GetAVZDirectory + 'boot_clr.log');
// Активация
BC_Activate;
// Перезагрузка
RebootWindows(true);
end.
В примере использовались: BC_Activat e, BC_DisableSvc , BC_LogFile , GetAVZDirectory , RebootWindows


16.19.14. function BC_ImportDeletedList

function BC_ImportDeletedList : boolean;
Выполняет импорт списка удаленных файлов в настройки Boot Cleaner. Список удаленных файлов ведется автоматически и пополняется при каждом вызове функции DeleteFile . Кроме того, возможно ручное добавление файлов в список удаленных при помощи SysCleanAddFile. Список удаленных файлов применяется для эвристической чистки системы, которая активируется командой ExecuteSysClean.
На заметку:
Вызов ExecuteSysClean очищает список удаленных файлов, поэтому необходимо использовать функцию ImportDeletedList пред вызовом ExecuteSysClean.
Пример:
begin
// Удаление файлов
DeleteFile('%WinDir%\Trojan1.exe');
DeleteFile('%WinDir%\Trojan2.exe');
DeleteFile('%WinDir%\Trojan3.exe');
// Импорт списка удаленных файлов в настройки Boot Cleaner
BC_ImportDeletedList;
// Чистка ссылок на удаленные файлы
ExecuteSysClean;
// Активация драйвера Boot Cleaner
BC_LogFile(GetAVZDirectory + 'boot_clr.log');
BC_Activate;
// Перезагрузка
RebootWindows(true);
end.


16.19.15. function BC_ImportQuarantineList

function BC_ImportQuarantineList : boolean;
Выполняет импорт списка файлов, для которых делались попытки карантина, в настройки Boot Cleaner. Список файлов ведется автоматически и пополняется при каждом вызове функции QuarantineFile . Для каждого файла из данного списка будет выполнена операция BC_QrFile .
На заметку:
Если функции QuarantineFile не указано имя файла, то она добавляет в список карантина всевозможные варианты имени файла - результат его поиска разными методами, имя файла + пути к системным папкам. Это делается для того, чтобы повысить вероятность карантина нужных файлов для исследования
На заметку:
Boot Cleaner не применяет базу безопасных файлов AVZ, поэтому в карантин может быть добавлен абсолютно любой файл - блокировка добавления безопасных файлов на него не действует.
Пример:
begin
// Карантин файлов
QuarantineFile('%WinDir%\Trojan1.exe', '');
QuarantineFile('%WinDir%\Trojan2.exe', '');
QuarantineFile('%WinDir%\Trojan3.exe', '');
// Импорт списка карантина в настройки Boot Cleaner
BC_ImportQuarantineList;
// Активация драйвера Boot Cleaner
BC_LogFile(GetAVZDirectory + 'boot_clr.log');
BC_Activate;
// Перезагрузка
RebootWindows(true);
end.


16.19.16. function BC_ImportALL

function BC_ImportALL : boolean;
Импортирует в настройки Boot Cleaner всю информацию об операциях, выполненных до этого в скрипте при помощи DeleteFile и QuarantineFile . Применяется для упрощения интеграции Boot Cleaner с типовыми скриптами.
Пример:
begin
// Карантин файлов
QuarantineFile('%WinDir%\Trojan1.exe', '');
QuarantineFile('%WinDir%\Trojan2.exe', '');
// Удаление файлов
DeleteFile('%WinDir%\Trojan3.exe', '');
// Импорт списка карантина и удаленных файлов в настройки Boot Cleaner
BC_ImportALL;
// Активация драйвера Boot Cleaner
BC_LogFile(GetAVZDirectory + 'boot_clr.log');
BC_Activate;
// Перезагрузка
RebootWindows(true);
end.
В примере использовались: BC_Activate , BC_ImportALL , BC_LogFile , DeleteFile , GetAVZDirectory , QuarantineFile , RebootWindows


16.19.17. Типовые примеры

Пример 1. Необходимо удалить в ходе перезагрузки файл c:\trojan.exe без протоколирования.
Решение:
begin
// Добавление в сценарий команды удаления драйвера PE386
BC_DeleteFile('c:\trojan.exe');
// Активация драйвера
BC_Activate;
// Перезагрузка
RebootWindows(true);
end.
В примере использовались: BC_Activate , BC_DeleteFile , RebootWindows
Пример 2. Необходимо выполнить попытку удаления файла c:\trojan.exe из ядра без перезагрузки с протоколированием. Протокол работы должен быть размещен в каталоге AVZ, имя файла протокола - boot_clr.log
begin
// Добавление в сценарий команды удаления драйвера PE386
BC_DeleteFile('c:\trojan.exe');
// Настройка протокола
BC_LogFile(GetAVZDirectory + 'boot_clr.log');
// Запуск
BC_Execute;
end.
В примере использовались: BC_DeleteFile , BC_Execute , BC_LogFile , GetAVZDirectory
Пример 3. Необходимо удалить в ходе перезагрузки драйвер PE386. Протокол работы должен быть размещен в каталоге AVZ, имя файла протокола - boot_clr.log
Решение:
begin
// Добавление в сценарий команды удаления драйвера PE386
BC_DeleteSvc('PE386');
// Настройка протокола
BC_LogFile(GetAVZDirectory + 'boot_clr.log');
// Активация драйвера
BC_Activate;
// Перезагрузка
RebootWindows(true);
end.
Пример 4. Необходимо удалить в ходе перезагрузки драйвер PE386, создав предварительно его копию в карантине. Протокол работы должен быть размещен в каталоге AVZ, имя файла протокола - boot_clr.log
Решение:
begin
// Добавление в сценарий команды карантина драйвера PE386
BC_QrSvc('PE386');
// Добавление в сценарий команды удаления драйвера PE386
BC_DeleteSvc('PE386');
// Настройка протокола
BC_LogFile(GetAVZDirectory + 'boot_clr.log');
// Активация драйвера
BC_Activate;
// Перезагрузка
RebootWindows(true);
end.


16.20. Эвристическая проверка системы

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.20. Эвристическая проверка системы
  • Предыдущая
  • Следующая

Содержание 16.20. Эвристическая проверка системы

16.20.1. procedure SearchRootkit
16.20.2. procedure SearchKeylogger
16.20.3. procedure ExecuteSysChkEV
16.20.4. procedure ExecuteSysChkIPU
16.20.5. procedure ExecuteSysCheck
16.20.6. procedure ExecuteSysCheckEx
16.20.7. function ExecuteWizard


16.20.1. procedure SearchRootkit

procedure SearchRootkit(UserModeLock, KernelModeLock : boolean);
UserModeLock - управляет блокировкой руткитов UserMode (false - только анализ, true - противодействие)
KernelModeLock - управляет блокировкой руткитов KernelMode (false - только анализ, true - противодействие)


16.20.2. procedure SearchKeylogger

procedure SearchKeylogger;
Осуществляет поиск кейлоггеров и троянских DLL. Эта операция производится в ходе сканирования, а данная функция позволяет выполнить ее по мере надобности индивидуально, в любом месте скрипта. Результаты анализа помещаются в протокол .
Совместимость:
Версия 4.26 и выше


16.20.3. procedure ExecuteSysChkEV

procedure ExecuteSysChkEV;
Выполняет эвристическую проверку системы (ЭПС). По умолчанию эвристическая проверка производится в ходе сканирования компьютера при условии, что установлен переключатель "Эвристическая проверка системы" на главном окне. Результаты проверки заносятся в протокол.
Совместимость:
Версия 4.26 и выше


16.20.4. procedure ExecuteSysChkIPU

procedure ExecuteSysChkIPU;
Выполняет поиск потенциальных уязвимостей (ИПУ). По умолчанию поиск потенциальных уязвимостей ведется в ходе сканирования компьютера при условии, что установлен переключатель "Поиск потенциальных уязвимостей" на главном окне. Результаты проверки заносятся в протокол.
Совместимость:
Версия 4.26 и выше


16.20.5. procedure ExecuteSysCheck

procedure ExecuteSysCheck(AFileName : string);
Выполнение исследования системы с сохранением HTML протокола в указанный файл (одновременно с созданием HTML протокола создается содержащий его zip одноименный файл).
Пример:
begin
// Выполнить исследование системы
ExecuteSysCheck(GetAVZDirectory + 'virusinfo_syscheck.htm');
end.


16.20.6. procedure ExecuteSysCheckEx

procedure ExecuteSysCheckEx(AFileName : string; ACheckMode : dword;
AScanAllSvc : boolean; ARepParams : dword);
Расширенный аналог ExecuteSysCheck .Содержит ряд параметров, позволяющих выполнить тонкую настройку исследования системы и формирования протокола.
Параметры:
AFileName - имя файла. Имя файла должно быть с расширением HTM, имена файлов XML и ZIP формируются из него путем замены расширения
ACheckMode - битовая маска, задающая режим проверки. Каждый бит соответствует определенной проверке (бит (вес)):
0 (1) - процессы
1 (2) - библиотеки процессов
2 (4) - Службы и драйверы
3 (8) - Модули пространства ядра
4 (16) - Автозапуск
5 (32) - SPI/LSP провайдеры
6 (64) - Открытые порты TCP/UDP
7 (128) - Расширения IE
8 (256) - Расширения Explorer
9 (512) - Расширения системы печати
10 (1024) - Задания планировщика
11 (2048) - Файл Hosts
12 (4096) - Обработчики протоколов
13 (8192) - Downloaded Program Files
14 (16384) - Апплеты панели управления (CPL)
15 (32768) - Active Setup
16 (65536) - Расширенное исследование системы
17 (131072) - Сведения о сетевых шарах и подключениях
18 (262144) - Результаты диагностики сети
AScanAllSvc - режим сканирования служб и драйверов. Если данный параметр равен True, то в протокол помещаются все службы и файлы, если false - только активные
ARepParams - битовая маска с параметрами, управляющими формированием отчета
0 (1) - режим фильтрации чистых файлов. Если данный бит установлен, то чистые объекты не помещаются в протокол
1 (2) - если бит установлен, то в XML отчет помещаются данные о всех файлах. Бит имеет приоритет над битом 0
2 (4) - если бит установлен, то в XML отчет помещаются данные только о файлах, которые не опознаны по базе безопасных. Бит имеет приоритет над битами 0 и 1
3 (8) - после формирования архива удалить HTML файл
4 (16) - после формирования архива удалить XML файл
5 (32) - не создавать ZIP архив (по умолчанию архив создается)
6 (64) - если бит установлен, то в XML файл помещаются данные о всех запущенных процессах вне зависимости от режима фильтрации (поддерживается AVZ 4.40+)
7 (128) - если бит установлен, то HTML протокол сохраняется в формате UTF-8 (по умолчанию - ANSI, Win-1251). Поддерживается начиная с AVZ 5.12
8 (256) - если бит установлен, то XML протокол сохраняется в формате UTF-8 (по умолчанию - ANSI, Win-1251). Поддерживается начиная с AVZ 5.12
Если биты 1 и 2 равны 0, то при формировании XML файл режим фильтрации определяется битом 0 и совпадает с режимом фильтрации, используемом при генерации HTML файла. Если установлен один из битов 1 или 2, то они переопределяют режим фильтрации и XML файл генерируется в режиме фильтрации, отличном от режима фильтрации HTML. Одновременная установка битов 1 и 2 не является ошибкой, так как бит 2 имеет приоритет над битом 1. Бит 6 позволяет отдельно выключить фильтрацию запущенных процессов. Данный режим полезен в случае, когда необходимо получить информацию о том, какие процессы запущены в момент сканирования (типовая задача - поиск конфликтующих антивирусов, процессы которых опознаются как легитимные и не попадают в протокол).
Совместимость:
Версия 4.28 и выше
Пример:
begin
ExecuteSysCheckEX('C:\avz_rep.htm',
$FFFFFFFF,
true,
1+2+16+32);
end.
В данном примере выполняются все проверки ($FFFFFFFF - все биты "1"), изучаются активные и неактивные службы и драйверы, из HTML протокола исключаются данные о чистых файлах, в XML отчет включаются данные о всех файлах, файлы HTML и XML после формирования архива удаляются с диска


16.20.7. function ExecuteWizard

function ExecuteWizard(ADBName : string;
ACheckLevel, AFixLevel : integer;
AUseBackup : boolean) : integer;
Выполняет проверку системы с помощью мастера поиска и устранения проблем. Параметры позволяют задать уровень опасности проблем и уровень опасности для автоматического устранения. Функция ведет базу отката, которая может использоваться для отката сделанных изменений.
Параметры:
ADBName - имя базы. Допустим следующие имена:
TSW - база мастера поиска и устранения проблем
BT - база проверки настроек безопасности браузеров и системы в целом
PRT - база мастера для чистки из системы данных, влияющих на приватность (протоколы, журналы, кукизы и т.п.)
SCU - база мастера для чистки мусора (временные файлы, всевозможные кеши, дампы памяти, протоколы - поддерживается начиная с версии 4.32)
ACheckLevel - порог срабатывания. Степень тяжести проблемы отсчитывается от 1 до 3 (1-незначительные проблемы и ошибки, 2-проблемы средней тяжести, 3-опасные ошибки и проблемы). Указание значения за пределами 1..3 приведет к ошибке и функция не отработает
AFixLevel - порог срабатывания автоматического исправления проблем. Степень тяжести проблем сравнивается с данным порогом и если степень тяжести больше или равна порогу, то производится автоматическое исправление проблемы. Допустимые значения 1..3, указание значения -1 отключает систему автоматического исправления и функция ExecuteWizard работает в режиме сбора информации
AUseBackup - если данные параметр равен true, то произведенные функцией изменения записываются в базу отката
Возвращаемое значение: функция возвращает -1 в случае ошибки. Если функция выполнена успешно, то она возвращает количество найденных проблем, уровень которых больше или равен порогу ACheckLevel
Совместимость:
Версия 4.28 и выше
Примеры:
var
X : integer;
begin
X := ExecuteWizard('TSW', 2, -1, false);
AddToLog('Количество найденных проблем = '+inttostr(X));
end.
Данный скрипт загружает базу TSW (мастер поиска и устранения проблем), порог срабатывания равен 2, автоматическое исправление отключено.
var
X : integer;
begin
X := ExecuteWizard('TSW', 2, 3, true);
AddToLog('Количество найденных проблем = '+inttostr(X));
end.
Данный скрипт загружает базу TSW (мастер поиска и устранения проблем), порог срабатывания равен 2, порог для автоматического исправления равен 3 (исправляются только тяжелые ошибки), вносимые изменения вносятся в базу отката.


16.21. Эвристическая чистка системы

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.21. Эвристическая чистка системы
  • Предыдущая
  • Следующая

Содержание 16.21. Эвристическая чистка системы

16.21.1. function ExecuteSysClean
16.21.2. procedure SysCleanAddFile
16.21.3. procedure SysCleanDelFilesList
16.21.4. procedure SysCleanGetFilesList
16.21.5. procedure SysCleanSetFilesList


16.21.1. function ExecuteSysClean

function ExecuteSysClean : boolean;
Выполняет эвристическую чистку системы. Эвристическая чистка состоит в анализе реестра и поиске ссылок на удаленные файлы. Список файлов по умолчанию формируется автоматически - он пополняется при каждом вызове функции DeleteFile . После выполнения эвристической чистки системы этот список очищается автоматически.
Вызов данной функции приводит к созданию в протоколе отметки "Автоматическая чистка следов удаленных в ходе лечения программ". Если в ходе чистки были обнаружены и удалены какие-либо элементы реестра, то в протоколе делаются соответствующие отметки.
Пример:
begin
// Удаление файлов
DeleteFile('%WinDir%\trojan.exe');
DeleteFile('C:\worm.exe');
// Чистка ссылок на удаленные файлы
ExecuteSysClean;
end.
Начиная с версии 4.34 в ходе эвристической чистки системы применяется дополнительный код, хранящийся в обновляемой базе данных - его использование позволяет вводить поддержку новых чисток системы без обновления версии AVZ.


16.21.2. procedure SysCleanAddFile

procedure SysCleanAddFile(AFileName : string);
Добавляет файл с именем AFileName в список, используемый функцией эвристической чистки системы ExecuteSysClean . Добавление файла в список при помощи SysCleanAddFile позволяет автоматизированно удалить следы файлов, стертые ранее вручную или при помощи другой антивирусной программы.
begin
// Удаление файла
DeleteFile('%WinDir%\trojan.exe');
// Добавление файла в список очистки вручную
SysCleanAddFile('C:\worm.exe');
// Чистка ссылок на удаленные файлы
ExecuteSysClean;
end.


16.21.3. procedure SysCleanDelFilesList

procedure SysCleanDelFilesList;
Очищает список файлов, ссылки на которые будет искать и удалять подсистема эвристической чистки системы. Очистка пустого списка (и, как следствие, повторные вызовы функции) не являются ошибкой.
На заметку:
В момент запуска скрипта список файлов пустой и его дополнительная очистка вызовом SysCleanDelFilesList не требуется.
Пример:
begin
// Удаление файла
DeleteFile('%WinDir%\trojan.exe');
// Чистка списка файлов
SysCleanDelFilesList;
// Удаление файла
DeleteFile('%WinDir%\trojan1.exe');
// Чистка ссылок на удаленные файлы
ExecuteSysClean;
end.
В примере эвристическая чистка удалит следы '%WinDir%\trojan1.exe', но не будет удалять следы '%WinDir%\trojan.exe'.


16.21.4. procedure SysCleanGetFilesList

procedure SysCleanGetFilesList(AFileList : TStringList);
Возвращает список удаленных файлов (а так-же файлов, добавленных в список удаленных принудительно командами SysCleanAddFile ) в массиве строк AFileList. Массив строк должен быть предварительно инициализирован. Данная функция может применяться для реализации собственных процедур эвристической чистки для удаленных скриптом файлов.
Совместимость:
Версия 4.34 и выше
Пример:
var
FileList : TStringList;
i : integer;
begin
// Удаление файлов
DeleteFile('c:\test1.txt');
DeleteFile('c:\test2.txt');
// Запрос списка файлов
FileList := TStringList.Create;
SysCleanGetFilesList(FileList);
for i := 0 to FileList.Count-1 do
AddToLog(FileList[i]);
FileList.Free;
end.


16.21.5. procedure SysCleanSetFilesList

procedure SysCleanSetFilesList(AFileList : TStringList);
Заменяет текущий список удаленных файлов (сформированный в ходе удаления файлов в скрипте и вызовов SysCleanAddFile ) на массив строк AFileList. Массив строк должен быть предварительно инициализирован и заполнен. Данная функция может применяться в случае реализации собственных процедур удаления файлов или совместно с SysCleanGetFilesList .
Совместимость:
Версия 4.34 и выше
Пример:
var
FileList : TStringList;
i : integer;
begin
// Явное добавление файлов в список
SysCleanAddFile('c:\test1.txt');
SysCleanAddFile('c:\trojan.txt');
SysCleanAddFile('c:\test1.txt');
// Неявное добавление файлов в список
DeleteFile('c:\trojan1.txt');
// Запрос списка
FileList := TStringList.Create;
SysCleanGetFilesList(FileList);
i := 0;
while i < FileList.Count do begin
if pos('test', LowerCase(FileList[i])) > 0 then
FileList.Delete(i)
else
inc(i);
end;
for i := 0 to FileList.Count-1 do
AddToLog(FileList[i]);
SysCleanSetFilesList(FileList);
FileList.Free;
// Чистка
ExecuteSysClean;
end.
В примере использовались: AddToLog , DeleteFile , ExecuteSysClean , SysCleanAddFile , SysCleanGetFilesList , SysCleanSetFilesList


16.22. Восстановление системы и стандартные скрипты

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.22. Восстановление системы и стандартные скрипты
  • Предыдущая
  • Следующая

Содержание 16.22. Восстановление системы и стандартные скрипты

16.22.1. function ExecuteRepair
16.22.2. function ExecuteStdScr
16.22.3. function ExecuteScript


16.22.1. function ExecuteRepair

function ExecuteRepair(ID : integer) : boolean;
Выполняет микропрограмму восстановления системы с указанным номером. Номера микропрограмм можно посмотреть в диалоговом окне " Восстановление системы ". Функция возвращает true в случае успешного выполнения указанной микропрограммы и false в случае ошибки.
Пример:
begin
ExecuteRepair(3);
ExecuteRepair(5);
end.


16.22.2. function ExecuteStdScr

function ExecuteStdScr(ID : integer) : boolean;
Выполняет скрипт из раздела "Стандартные скрипты" с указанным номером. Номера скриптов можно посмотреть в диалоговом окне " Стандартные скрипты ". Функция возвращает true в случае успешного выполнения указанной микропрограммы и false в случае ошибки.
Пример:
begin
ExecuteStdScr(3);
end.


16.22.3. function ExecuteScript

function ExecuteScript(AScriptFile : string) : boolean;
Загрузка текста скрипта из текстового файла с именем AScriptFile и его выполнение. На время выполнение скрипта работа вызывающего скрипта приостанавливается. Возвращает true в случае, если вызов был успешен и false в случае ошибки (ошибка возникает в случае, если файл не найден или скрипт содержит синтаксические ошибки, или в ходе выполнения скрипта возникла неустранимая ошибка).
Совместимость:
Версия 4.34 и выше
Пример:
begin
ExecuteScript('DeleteMalware.txt');
end.
На заметку
1. Не следует создавать скрипты, порождающие бесконечную рекурсию (т.е. основной скрипт вызывает "скрипт 1", "скрипт 1" из себя вызывает "скрипт 2", который в свою очередь вызывает "скрипт 1" - что приведет к запуску скрипта 2 и так далее до бесконечности)
2. Вызываемые с помощью ExecuteScript скрипты используют общую папку карантина и могут менять единые настройки AVZ, однако у них ведутся независимые списки удаленных и закарантиненных файлов - это необходимо учитывать при использовании функций типа ExecuteSysClean или BC_Activate
3. Данная функция введена в скрипт-язык в основном для организации "скриптов-диспетчеров" - т.е. идеологии, в которой основной скрипт принимает решение, какие скрипты выполнить на конкретном ПК. Это удобно в случае централизованного запуска AVZ в сети


16.23. Завершение работы и перезагрузка

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.23. Завершение работы и перезагрузка
  • Предыдущая
  • Следующая

Содержание 16.23. Завершение работы и перезагрузка

16.23.1. procedure ShutdownWindows
16.23.2. procedure RebootWindows


16.23.1. procedure ShutdownWindows

procedure ShutdownWindows(AForce : boolean);
Завершение работы системы. Флаг AForce управляет режимом завершения работы - если он равен true, то завершение работы производится в ускоренном (форсированном) режиме, без рассылки приложениям сообщений о том, что система завершает работу. Завершение работы в формированном режиме может привести к потере открытых документов и некорректному завершению работы программ.


16.23.2. procedure RebootWindows

procedure RebootWindows(AForce : boolean);
Перезагрузка системы. Флаг AForce управляет режимом перезагрузки - если он равен true, то завершение работы производится в ускоренном (форсированном) режиме, без рассылки приложениям сообщений о том, что система завершает работу.
Пример:
begin
RebootWindows(false);
end.


16.24. Использование AV анализатора в скрипте

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.24. Использование AV анализатора в скрипте
  • Предыдущая
  • Следующая

Содержание 16.24. Использование AV анализатора в скрипте

16.24.1. function CheckFile
16.24.2. function GetLastCheckTxt


16.24.1. function CheckFile

function CheckFile(AFileName : string) : integer;
Выполняет проверку указанного файла при помощи AV базы и базы безопасных AVZ.
Результат анализа определяется по коду возврата:
-1 - файл не найден или к нему нет доступа
0 - файл не значится в базе безопасных и не опознан как вредоносный
1 - файл опознан как вредоносный объект
2 - файл не значится в базе безопасных и подозревается как вредоносный объект
3 - файл опознан по базе безопасных AVZ или базе Microsoft
Если функция возвращает код 1 или 2, то при помощи GetLastCheckTxt можно получить уточняющую текстовую информацию (имя malware и прочую информацию).


16.24.2. function GetLastCheckTxt

function GetLastCheckTxt : string;
Возвращает текстовое описание объекта, детектированного файловым сканером. Имеет смысл только после вызова CheckFile , возвратившего код 1 или 2. Во всех остальных случаях функция возвращает пустую строку.


16.25. Работа с CLSID и BHO

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.25. Работа с CLSID и BHO
  • Предыдущая
  • Следующая

Содержание 16.25. Работа с CLSID и BHO

16.25.1. function CLSIDExists
16.25.2. function CLSIDFileExists
16.25.3. function CLSIDFileName
16.25.4. procedure DelCLSID
16.25.5. function BHOExists
16.25.6. procedure DelBHO


16.25.1. function CLSIDExists

function CLSIDExists(CLSID : string) : boolean;
Проверяет, существует ли указанный CLSID в реестре. CLSID рекомендуется передавать без фигурных скобок.
Если CLSID обнаружен в реестре, то возвращается true. Иначе - false.
Пример:
begin
if CLSIDExists('B5F3970B-745E-46AC-B890-E08F69777D80') then
AddToLog('CLSID найден !!');
end.


16.25.2. function CLSIDFileExists

function CLSIDFileExists(CLSID : string) : boolean;
Возвращает true, если указанный CLSID есть в реестре, по его анализу удалось найти связанный с CLSID файл и этот файл
существует на диске. Возвращает false в любой другой ситуации (нет CLSID, запись CLSID в реестре.
Пример:
begin
if CLSIDFileExists('B5F3970B-745E-46AC-B890-E08F69777D80') then
AddToLog(CLSIDFileName('B5F3970B-745E-46AC-B890-E08F69777D80')+
' >> '+
'подозрение на AdvWare.ToolBar.SearchIt');
end.


16.25.3. function CLSIDFileName

function CLSIDFileName(CLSID : string) : string;
Возвращает имя файла, соответствующего указанному CLSID или пустую строку, если CLSID не найден в реестре или его анализ не позволил найти имя файла. Функция не проверяет, существует файл на диске или нет.
Пример:
var
S : string;
begin
S := 'B5F3970B-745E-46AC-B890-E08F69777D80';
if CLSIDFileExists(S) then
AddToLog(CLSIDFileName(S)+
' >> '+
'подозрение на AdvWare.ToolBar.SearchIt');
end.


16.25.4. procedure DelCLSID

procedure DelCLSID(CLSID : string);
Удаляет из реестра регистрацию класса с заданным CLSID. Отсутствие класса с указанным CLSID не является ошибкой.
Удаление регистрации предполагает выполнение следующих операций:
·Удаление регистрации класса
·Удаление интерфейса с таким же CLSID (если он существует)
·Удаление BHO и панелей расширения IE c данным CLSID
·Удаление записей ActiveSetup с данным CLSID
·Удаление расширений проводника с данным CLSID
·Удаление элементов SharedTaskScheduler
Обратите внимание, что CLSID должен передаваться без фигурных скобок !!
Пример:
begin
DelCLSID('B5F3970B-745E-46AC-B890-E08F69777D80');
end.


16.25.5. function BHOExists

function BHOExists(BHO : string) : boolean;
Проверяет, существует ли BHO или иное расширение Internet Explorer с указанным CLSID. CLSID рекомендуется передавать без фигурных скобок. Если BHO обнаружен в реестре, то возвращается true. Иначе - false.


16.25.6. procedure DelBHO

procedure DelBHO(BHO : string);
Удаляет BHO с указанным CLSID. CLSID рекомендуется передавать без фигурных скобок.


16.26. Работа со службами и драйверами

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.26. Работа со службами и драйверами
  • Предыдущая
  • Следующая

Содержание 16.26. Работа со службами и драйверами

16.26.1. function ServiceExists
16.26.2. function ServiceAndFileExists
16.26.3. function StartService
16.26.4. function StopService
16.26.5. function DeleteService
16.26.6. function GetServiceFile
16.26.7. function GetServiceStart
16.26.8. function SetServiceStart
16.26.9. function GetServiceName


16.26.1. function ServiceExists

function ServiceExists(AName : string) : boolean;
Выполняет поиск регистрационных данных в реестре. Возвращает true при условии, что в реестре зарегистрирована служба или драйвер с указанным именем AName.
Пример:
begin
if ServiceExists('PE383') then
AddToLog('Обнаружен драйвер руткита PE386');
end.


16.26.2. function ServiceAndFileExists

function ServiceAndFileExists(AName : string) : boolean;
Выполняет поиск регистрационных данных в реестре и соответствующего файла на диске. Возвращает true при условии, что в реестре зарегистрирована служба или драйвер с указанным именем, и соответствующий ей файл найден на диске.


16.26.3. function StartService

function StartService(AName : string) : boolean;
Выполняет запуск службы или загрузку драйвера с указанным именем.


16.26.4. function StopService

function StopService(AName : string) : boolean;
Выполняет остановку службы или выгрузку драйвера с указанным именем.


16.26.5. function DeleteService

function DeleteService(AName : string; ADelFile : boolean = false) : boolean;
Удаляет из реестра службу или драйвер с именем AName. Функция возвращает true в случае успешного удаления службы и false в случае ошибки. Второй параметр ADelFile (параметр необязательный и его можно не указывать) задает режим удаления. По умолчанию он равен false - в результате при удалении регистрационных данных драйвера из реестра файл на диске не удаляется. Если ADelFile=true, то после удаления данных из реестра производится попытка удаления файла драйвера с диска.
Пример:
begin
DeleteService('PE386', true);
end.
На заметку: Начиная с версии 4.32 данная функция автоматически вызывает процедуру сброса привилегий RegKeyResetSecurity перед удалением ключа реестра с описанием службы, а в режиме ADelFile=Y для удаляемого файла вызывается FSResetSecurity . Начиная с версии 5 на данный функционал влияет параметр AutoResetACL , если он равен Y (режим по умолчанию), то указанные операции сброса привилегий выполняются, а если равен N - не выполняются.


16.26.6. function GetServiceFile

function GetServiceFile(AName : string) : string;
Возвращает полное имя исполняемого файла указанной службы или драйвера. Если служба или драйвер с указанным именем не найдена, то возвращается пустая строка.


16.26.7. function GetServiceStart

function GetServiceStart(AServiceName: string): integer;
Возвращает код режима автозапуска службы или драйвера с именем AServiceName.
Коды автозапуска:
-1 - ошибка определения кода автозапуска
1 - загрузка в ходе начальной загрузки системы
2 - режим AUTO - автоматическая загрузка
3 - MANUAL - загрузка вручную (по команде пользователя или по команде прикладной программы)
4 - загрузка запрещена
Совместимость: AVZ 4.26 и выше
Пример:
var
ASvc : string;
begin
ASvc := 'RemoteRegistry';
if GetServiceStart(ASvc) < 4 then
AddToLog('>> разрешена потенциально опасная служба '+
ASvc+' ('+GetServiceName(ASvc)+')');
end.


16.26.8. function SetServiceStart

function SetServiceStart(AServiceName: string; AStart: integer): boolean;
Устанавливает код режима автозапуска равный AStart для службы или драйвера с именем AServiceName. Возвращает True в случае успешной установки кода режима и false в случае ошибки.
Коды автозапуска:
1 - загрузка в ходе начальной загрузки системы
2 - режим AUTO - автоматическая загрузка
3 - MANUAL - загрузка вручную (по команде пользователя или по команде прикладной программы)
4 - загрузка запрещена
Совместимость: AVZ 4.26 и выше
Пример:
begin
if SetServiceStart('RemoteRegistry', 4) then
AddToLog('Служба RemoteRegistry успешно отключена');
end.


16.26.9. function GetServiceName

function GetServiceName(AServiceName: string): string;
Возвращает отображаемое имя службы или драйвера с именем AServiceName. Отображаемое имя является необязательным и хранится в реестре, его удобно применять при формировании протоколов в качестве уточняющей информации. В случае ошибки функция возвращает пустую строку.
Совместимость: AVZ 4.26 и выше
Пример:
var
ASvc : string;
begin
ASvc := 'RemoteRegistry';
if GetServiceStart(ASvc) < 4 then
AddToLog('>> разрешена потенциально опасная служба '+
ASvc+' ('+GetServiceName(ASvc)+')');
end.


16.27. Работа с SPI/LSP

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.27. Работа с SPI/LSP
  • Предыдущая
  • Следующая

Содержание 16.27. Работа с SPI/LSP

16.27.1. procedure DelSPIByFileName
16.27.2. procedure CheckSPI
16.27.3. procedure AutoFixSPI


16.27.1. procedure DelSPIByFileName

procedure DelSPIByFileName(ALibrary : string; NameCompare : boolean);
Удаляет SPI/LSP провайдер по имени библиотеки-поставщика ALibrary. Параметр NameCompare управляет алгоритмом сравнения имен - если он равен false, то производится сравнение полного имени файлов. Если NameCompare=true, то сравниваются только имена файлов, без пути. Сравнение имен файлов идет без учета регистра, имена файлов перед сравнением подвергаются нормализации.
В имени файла допустимо указывать макросы, подробнее см. в разделе " макросы, допустимые в именах файлов "


16.27.2. procedure CheckSPI

procedure CheckSPI;
Выполняет проверку настроек SPI/LSP. В случае обнаружения ошибок информация вносится в протокол.
Совместимость: AVZ 4.26 и выше


16.27.3. procedure AutoFixSPI

procedure AutoFixSPI;
Выполняет анализ настроек SPI/LSP и автоматически исправляет все обнаруженные ошибки. Начиная с версии 4.26 перед исправлением ошибок при вызове данной функции AVZ автоматически создает резервную копию настроек в папке BackUp. Резервная копия является стандартным REG файлом.
На заметку
Принцип поиска ошибок в частности содержит удаление ссылок на несуществующие провайдеры. Поэтому при использовании AutoFixSPI в конце скрипта, удаляющего файлы, может возникнуть ситуация, когда AVZ в ходе выполнения DeleteFile не смог удалить файл и записал его на отложенное удаление. Следовательно, в ходе выполнения команды AutoFixSPI анализатор обнаружит файл и не посчитает ссылку на него ошибкой. Эту ситуацию нужно учитывать при удалении файлов, являющихся SPI провайдерами. Выходом из положения является явное удаление SPI провайдера по имени файла.
На заметку
Анализатор считает отсутствующими библиотеки провайдеров в случае, если ему не удается найти файл на диске. Однако в некоторых случаях возможные различные сбои в работе анализатора - например в случае, если AVZ запущен из под учетной записи не имеющего прав администратора пользователя или из терминального сеанса на сервере.


16.28. Работа с автозапуском и Winlogon

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.28. Работа с автозапуском и Winlogon
  • Предыдущая
  • Следующая

Содержание 16.28. Работа с автозапуском и Winlogon

16.28.1. procedure DelWinlogonNotifyByFileName
16.28.2. procedure DelWinlogonNotifyByKeyName
16.28.3. function DelAutorunByFileName


16.28.1. procedure DelWinlogonNotifyByFileName

procedure DelWinlogonNotifyByFileName(AFileName : string);
Производит удаление из реестра регистрации элемента Winlogon, соответствующего заданному имени файла. В качестве AFileName можно передать только имя файла или полное имя файла, включая путь.
Пример:
begin
DelWinlogonNotifyByFileName('1_32bean32_1.dll');
end.


16.28.2. procedure DelWinlogonNotifyByKeyName

procedure DelWinlogonNotifyByKeyName(AKeyName : string);
Удаляет элемент Winlogon по известному имени ключа в реестре.
Пример:
begin
DelWinlogonNotifyByKeyName('1_32bean32_1reg');
end.


16.28.3. function DelAutorunByFileName

function DelAutorunByFileName(AKeyName : string) : boolean;
Удаляет элемент автозапуска по имени файла. В качестве AFileName можно передать только имя файла или полное имя файла, включая путь.
Совместимость: AVZ 4.26 и выше
Пример:
begin
DelAutorunByFileName('trojan.dll');
end.


16.29. Работа с планировщиком заданий

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.29. Работа с планировщиком заданий
  • Предыдущая
  • Следующая

Содержание 16.29. Работа с планировщиком заданий

16.29.1. procedure DeleteSchedulerTask


16.29.1. procedure DeleteSchedulerTask

procedure DeleteSchedulerTask(ATaskName : string; AForceRegMode : integer = 0);
Осуществляет удаление задания планировщика с именем ATaskName, с последующей чисткой соответствующих ключей реестра, хранящих настройки планировщика задания. Удаляется только задание, вызываемые им исполняемые файлы не удаляются.
Параметры:
ATaskName - имя удаляемого задания. Обязательный параметр. Важно отметить, что функция никак не проверяет легитимность задания, и может удалить любое задание планировщика по заданному имени при условии, что оно существует в системе.
AForceRegMode - необязательный параметр, управляющий режимом чистки реестра.
Если параметр AForceRegMode равен нулю (значение по умолчанию), то чистка реестра производится автоматически только в том случае, если задание с именем ATaskName существует и было успешно удалено. При этом, в зависимости от типа задания, выполняется чистка соответствующих заданию x32 или x64 веток реестра.
Однако возможны ситуации, в которых задание уже было ранее удалено (например: вручную, антивирусом в ходе лечения), но связанные с заданием настройки планировщика в реестре не почищены. В такой ситуации планировщик заданий может выдавать ошибки при работе с заданиями, а само удаленное задание может продолжать выполняться на основании сведений, сохраненных в реестре. Для решения проблемы в этом случае следует задать отличный от нуля AForceRegMode.
Поддерживаемые значения AForceRegMode:
0 - автоматическая чистка, выполняется только для найденных по имени и успешно удаленных заданий. Режим по умолчанию.
1 - в дополнение к автоматической чистке выполнить принудительную чистку x32 ветки реестра с настройками планировщика заданий.
2 - в дополнение к автоматической чистке выполнить принудительную чистку x64 ветки реестра с настройками планировщика заданий.
3 - в дополнение к автоматической чистке выполнить принудительную чистку и x32, и x64 ветки реестра с настройками планировщика заданий (по сути, аналог последовательного выполнения двух предыдущих режимов)
В режимах 1-3 поиск и принудительная чистка ведется по названию задания из ATaskName, независимо от того, было такое задание найдено и удалено, или нет. Использовать отличный от 0 режим AForceRegMode режим следует только по необходимости, убедившись, что удаляется явно вредоносное задание с уникальным, отличным от легитимных заданий именем.
На заметку: в ходе эвристической чистки системы при помощи ExecuteSysClean для всех удаляемых заданий выполняется чистка реестра, эквивалентная вызову DeleteSchedulerTask с параметром AForceRegMode=0.
Пример:
begin
DeleteSchedulerTask('Некое зловредное задание 1');
DeleteSchedulerTask('Некое зловредное задание 2', 3);
end.
Совместимость: AVZ 5.07 и выше


16.30. Работа с реестром

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.30. Работа с реестром
  • Предыдущая
  • Следующая

Содержание 16.30. Работа с реестром

16.30.1. function RegKeyExists
16.30.2. function RegKeyExistsEx
16.30.3. procedure RegKeyDel
16.30.4. procedure RegKeyCreate
16.30.5. function RegKeyParamExists
16.30.6. procedure RegKeyParamDel
16.30.7. function RegKeyStrParamRead
16.30.8. function RegKeyIntParamRead
16.30.9. procedure RegKeyStrParamWrite
16.30.10. procedure RegKeyIntParamWrite
16.30.11. procedure RegKeyBinParamWrite
16.30.12. function RegKeyParamWrite
16.30.13. function RegSearch
16.30.14. function ExpRegKey
16.30.15. function ExpRegKeyEx
16.30.16. function BackupRegKey
16.30.17. function RegKeyEnumVal
16.30.18. function RegKeyEnumKey
16.30.19. function RegKeyResetSecurity
16.30.20. Имена разделов
16.30.21. Редиректор реестра


16.30.1. function RegKeyExists

function RegKeyExists(ARoot, AName : string; ARedirMode : string = '') : boolean;
Возвращает true, если в реестре существует и доступен ключ AName в разделе ARoot, и false в случае отсутствия ключа или указания недопустимых параметров. false так-же возвращается, если ключ существует, но нет даже минимальных привилегий для доступа к нему.
Параметр ARedirMode является необязательным и поддерживается начиная с версии 5.xx. Он управляет работой редиректора реестра конкретно в обход глобального режима редиректора, см. подробнее в разделе " Редиректор реестра ". При отсутствии параметра работа функции не отличается от работы в версии AVZ 4.xx.
Пример:
begin
if RegKeyExists('HKLM', 'Software\Gator') then
AddToLog('Найден ключ реестра, принадлежащий Gator');
if RegKeyExists('HKLM', 'Software\Windows', 'x64') then
AddToLog('Найден ключ реестра Software\Windows в режиме редиректора x64');
end.
begin
if RegKeyExists('HKLM', 'SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run', 'x64') then
AddToLog('Найден ключ Run для x32 приложений');
end.


16.30.2. function RegKeyExistsEx

function RegKeyExistsEx(ARoot, AName : string; ARedirMode : string = '') : boolean;
Возвращает true, если в реестре существует ключ AName в разделе ARoot, и false в случае отсутствия ключа или указания недопустимых параметров. Данная функция аналогична RegKeyExists , но:
1. не чувствительна к привилегиям на искомый ключ при условии, что есть хоть минимальные привилегии на родительский ключ.
2. Работает медленнее RegKeyExists ввиду того, что производит поиск ключа вместо попытки его открытия
Данную функцию рекомендуется применять в случае, если есть подозрения на маскировку и защиту искомого ключа путем путем удаления привилегий на него. По всех остальных случаях рекомендуется применять RegKeyExists .
Совместимость: AVZ 4.32 и выше
Параметр ARedirMode является необязательным и поддерживается начиная с версии 5.xx. Он управляет работой редиректора реестра конкретно в обход глобального режима редиректора, см. подробнее в разделе " Редиректор реестра ". При отсутствии параметра работа функции не отличается от работы в версии AVZ 4.xx.
Пример:
begin
if RegKeyExistsEx('HKLM', 'Software\Gator') then
AddToLog('Найден ключ реестра, принадлежащий Gator');
end.


16.30.3. procedure RegKeyDel

procedure RegKeyDel(ARoot, AName : string; ARedirMode : string = '');
Удаляет указанный ключ реестра. AName - имя ключа, ARoot - имя раздела
Попытка удаления несуществующего ключа не является ошибкой.
Параметр ARedirMode является необязательным и поддерживается начиная с версии 5.xx. Он управляет работой редиректора реестра конкретно в обход глобального режима
редиректора, см. подробнее в разделе " Редиректор реестра ". При отсутствии параметра работа функции не отличается от работы в версии AVZ 4.xx.
Начиная с версии 5 на данный функционал влияет параметр AutoResetACL , если он равен Y (режим по умолчанию), то перед удалением ключа производится сброс привилегий доступа на "все разрешено всем", что увеличивает шансы на успешное удаление ключа.


16.30.4. procedure RegKeyCreate

procedure RegKeyCreate(ARoot, AName : string; ARedirMode : string = '');
Создает ключ реестра с указанным именем. AName - имя ключа, ARoot - имя раздела
Параметр ARedirMode является необязательным и поддерживается начиная с версии 5.xx. Он управляет работой редиректора реестра конкретно в обход глобального режима редиректора, см. подробнее в разделе " Редиректор реестра ". При отсутствии параметра работа функции не отличается от работы в версии AVZ 4.xx.


16.30.5. function RegKeyParamExists

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.30. Работа с реестром
  • 16.30.5. function RegKeyParamExists
  • Предыдущая
  • Следующая

function RegKeyParamExists

function RegKeyParamExists(ARoot, AName, AParam : string; ARedirMode : string = '') : boolean;
Возвращает TRUE, если в ключе с именем AName существует параметр AParam.
Параметр ARedirMode является необязательным и поддерживается начиная с версии 5.xx. Он управляет работой редиректора реестра конкретно в обход глобального режима редиректора, см. подробнее в разделе " Редиректор реестра ". При отсутствии параметра работа функции не отличается от работы в версии AVZ 4.xx.


16.30.6. procedure RegKeyParamDel

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.30. Работа с реестром
  • 16.30.6. procedure RegKeyParamDel
  • Предыдущая
  • Следующая

procedure RegKeyParamDel

procedure RegKeyParamDel(ARoot, AName, AParam : string; ARedirMode : string = '');
Производит удаление параметра с именем AParam ключа AName в разделе ARoot. Указание несуществующего параметра, ключа или раздела не является ошибкой.
Параметр ARedirMode является необязательным и поддерживается начиная с версии 5.xx. Он управляет работой редиректора реестра конкретно в обход глобального режима редиректора, см. подробнее в разделе " Редиректор реестра ". При отсутствии параметра работа функции не отличается от работы в версии AVZ 4.xx.


16.30.7. function RegKeyStrParamRead

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.30. Работа с реестром
  • 16.30.7. function RegKeyStrParamRead
  • Предыдущая
  • Следующая

function RegKeyStrParamRead

function RegKeyStrParamRead(ARoot, AName, AParam : string; ARedirMode : string = '') : string;
Производит чтение текстового параметра с именем AParam ключа AName раздела ARoot. Указание несуществующего параметра, ключа или раздела не является ошибкой - в этом случае функция возвращает пустую строку.
Параметр ARedirMode является необязательным и поддерживается начиная с версии 5.xx. Он управляет работой редиректора реестра конкретно в обход глобального режима редиректора, см. подробнее в разделе " Редиректор реестра ". При отсутствии параметра работа функции не отличается от работы в версии AVZ 4.xx.


16.30.8. function RegKeyIntParamRead

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.30. Работа с реестром
  • 16.30.8. function RegKeyIntParamRead
  • Предыдущая
  • Следующая

function RegKeyIntParamRead

function RegKeyIntParamRead(ARoot, AName, AParam : string; ARedirMode : string = '') : dword;
Производит чтение параметра типа REG_DWORD с именем AParam ключа AName раздела ARoot. Указание несуществующего параметра, ключа или раздела не является ошибкой - в этом случае функция возвращает 0.
Параметр ARedirMode является необязательным и поддерживается начиная с версии 5.xx. Он управляет работой редиректора реестра конкретно в обход глобального режима редиректора, см. подробнее в разделе " Редиректор реестра ". При отсутствии параметра работа функции не отличается от работы в версии AVZ 4.xx.


16.30.9. procedure RegKeyStrParamWrite

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.30. Работа с реестром
  • 16.30.9. procedure RegKeyStrParamWrite
  • Предыдущая
  • Следующая

procedure RegKeyStrParamWrite

procedure RegKeyStrParamWrite(ARoot, AName, AParam, AValue : string; ARedirMode : string = '');
Записывает значение AValue в параметр AParam типа REG_SZ (строка) ключа реестра AName в разделе ARoot. В случае отсутствия ключа или параметра они автоматически создаются.
Параметр ARedirMode является необязательным и поддерживается начиная с версии 5.xx. Он управляет работой редиректора реестра конкретно в обход глобального режима редиректора, см. подробнее в разделе " Редиректор реестра ". При отсутствии параметра работа функции не отличается от работы в версии AVZ 4.xx.


16.30.10. procedure RegKeyIntParamWrite

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.30. Работа с реестром
  • 16.30.10. procedure RegKeyIntParamWrite
  • Предыдущая
  • Следующая

procedure RegKeyIntParamWrite

procedure RegKeyIntParamWrite(ARoot, AName, AParam : string; AValue : dword; ARedirMode : string = '');
Записывает значение AValue в параметр AParam типа REG_DWORD (числовое значение) ключа реестра AName в разделе ARoot.
В случае отсутствия ключа или параметра они автоматически создаются.
Параметр ARedirMode является необязательным и поддерживается начиная с версии 5.xx. Он управляет работой редиректора реестра конкретно в обход глобального режима редиректора, см. подробнее в разделе " Редиректор реестра ". При отсутствии параметра работа функции не отличается от работы в версии AVZ 4.xx.


16.30.11. procedure RegKeyBinParamWrite

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.30. Работа с реестром
  • 16.30.11. procedure RegKeyBinParamWrite
  • Предыдущая
  • Следующая

procedure RegKeyBinParamWrite

procedure RegKeyBinParamWrite(ARoot, AName, AParam : string; AValue : dword; ARedirMode : string = '');
Записывает значение AValue в параметр AParam типа REG_BINARY (бинарное значение произвольной длинны) ключа реестра AName в разделе ARoot. В случае отсутствия ключа или параметра они автоматически создаются.
Значение бинарного параметра передается в текстовом виде, побайтно. Каждый байт кодируется в шестнадцатеричном формате, разделителями является запятая. Предшествующие нули в числах и пробелы игнорируются.
Параметр ARedirMode является необязательным и поддерживается начиная с версии 5.xx. Он управляет работой редиректора реестра конкретно в обход глобального режима редиректора, см. подробнее в разделе " Редиректор реестра ". При отсутствии параметра работа функции не отличается от работы в версии AVZ 4.xx.
Пример:
begin
RegKeyBinParamWrite('HKEY_LOCAL_MACHINE',
'SOFTWARE\Microsoft\Windows\CurrentVersion',
'Test',
'011,23,5, F2,0E4,1B');
end.


16.30.12. function RegKeyParamWrite

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.30. Работа с реестром
  • 16.30.12. function RegKeyParamWrite
  • Предыдущая
  • Следующая

function RegKeyParamWrite

function RegKeyParamWrite(ARoot, AName, AParam : string; AType, AValue : string; ARedirMode : string = '') : boolean;
Записывает значение AValue в параметр AParam типа AType ключа реестра AName в разделе ARoot. В случае отсутствия ключа или параметра они автоматически создаются. Функция возвращает true, если запись в реестр выполнена успешно и false в случае, если возникла ошибка записи параметров.
Тип передается в виде строки, поддерживаются следующие типы:
·REG_DWORD
·REG_SZ
·REG_EXPAND_SZ
·REG_BINARY
·REG_MULTI_SZ (поддерживается начиная с AVZ 4.35)
В случае использования типа REG_BINARY значение задается аналогично значению в функции RegKeyBinParamWrite . Если указать тип, отличный от перечисленных выше, то запись в реестр не производится и функция возвращает false. Для типа REG_DWORD значение передается в виде строки и задается в десятичном виде (например, '1234') или шестнадцатеричном виде (поддерживается два формата записи: '$0F' и '0x0F', принципиальной разницы между 0x и $ нет).
Параметр ARedirMode является необязательным и поддерживается начиная с версии 5.xx. Он управляет работой редиректора реестра конкретно в обход глобального режима редиректора, см. подробнее в разделе " Редиректор реестра ". При отсутствии параметра работа функции не отличается от работы в версии AVZ 4.xx.
Пример:
begin
RegKeyParamWrite('HKEY_LOCAL_MACHINE',
'SOFTWARE\Microsoft\Windows\CurrentVersion',
'Test0',
'REG_BINARY',
'011,23,5, F2,0E4,1B');
RegKeyParamWrite('HKEY_LOCAL_MACHINE',
'SOFTWARE\Microsoft\Windows\CurrentVersion',
'Test1',
'REG_SZ',
'Test string value');
RegKeyParamWrite('HKEY_LOCAL_MACHINE',
'SOFTWARE\Microsoft\Windows\CurrentVersion',
'Test2',
'REG_EXPAND_SZ',
'Test string value, type REG_EXPAND_SZ');
end.
Пример работы с типом REG_MULTI_SZ - обратите внимание на то, что разделителем строк в списке является символ с кодом #0
begin
RegKeyParamWrite('HKLM',
'SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost',
'test',
'REG_MULTI_SZ',
'st1'#0'st2');
end.


16.30.13. function RegSearch

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.30. Работа с реестром
  • 16.30.13. function RegSearch
  • Предыдущая
  • Следующая

function RegSearch

function RegSearch(ARoot, AName, AValue : string) : boolean;
Производит сканирование ключа AName раздела реестра ARoot и осуществляет поиск образца AValue. Информация о всех найденных ключах выводится в протокол. Если AName равен пустой строке, то сканируются все ключи раздела ARoot. Сравнение с образцом идет без учета регистра, допускаются частичные совпадения. Функция полезна для поиска в реестре определенных данных, например ссылок на файл с известным именем. Поиск может занять длительное время (до нескольких минут).
Пример:
begin
RegSearch('HKLM', '', 'svchost.exe');
end.
Данный пример производит поиск в реестре и выводит в протокол информацию о всех вхождениях 'svchost.exe' в реестре.


16.30.14. function ExpRegKey

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.30. Работа с реестром
  • 16.30.14. function ExpRegKey
  • Предыдущая
  • Следующая

function ExpRegKey

function ExpRegKey(ARoot, AName, AFileName : string) : boolean;
Выполняет экспорт ключа реестра. Экспортируется ключ AName раздела реестра ARoot в файл с именем AFileName. Формат файла - стандартный REG файл, рекомендуемое расширение - ".reg". Полученный в ходе экспорта ключ можно импортировать в реестра редактором реестра (меню "Файл\Импорт"). По умолчанию стандартная системная реакция на открытие REG файла так-же сводится к попытке его импорта. Функция возвращает true в случае успешного выполнения и false в случае ошибки.
Экспорт рекомендуется в качестве средства резервного копирования в скриптах, выполняющих модификацию ключей реестра.
Совместимость: AVZ 4.26 и выше
Пример:
begin
// Экспорт ключа реестра в файл
ExpRegKey('HKEY_CURRENT_USER','Software\Microsoft\Windows\CurrentVersion\Policies','policies_backup.reg');
// Удаление ключа реестра
RegKeyDel('HKEY_CURRENT_USER', 'Software\Microsoft\Windows\CurrentVersion\Policies');
end.


16.30.15. function ExpRegKeyEx

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.30. Работа с реестром
  • 16.30.15. function ExpRegKeyEx
  • Предыдущая
  • Следующая

function ExpRegKeyEx

function ExpRegKeyEx(ARoot, AName : string; Lines : TStrings) : boolean;
Выполняет экспорт ключа реестра. Экспортируется ключ AName раздела реестра ARoot в массив строк Lines. Функция возвращает true в случае успешного выполнения и false в случае ошибки. Данная функция по принципу работы идентична функции ExpRegKey , но ее удобно применять в случае, если требуется экспортировать несколько различных ключей реестра в один файл.
Экспорт рекомендуется в качестве средства резервного копирования в скриптах, выполняющих модификацию ключей реестра.
Совместимость: AVZ 4.26 и выше


16.30.16. function BackupRegKey

function BackupRegKey(ARoot, AName, ABackupName : string) : boolean;
Выполняет резервное копирование ключа реестра. По принципу работы данная функция аналогична функции ExpRegKey - она выполняет экспорт ключа AName раздела реестра ARoot. Отличие состоит в том, что файл с результатами экспорта создается в папке Backup AVZ, имя файлов состоит из префикса ABackupName и текущей даты-времени. Если данный файл уже существует на диске (т.е. скрипт выполнил два вызова BackupRegKey с одинаковым ABackupName в течение одной секунды, то к имени файла добавляется порядковый номер. Префикс позволяет дать смысловое имя файлу для того, чтобы упростить его поиск на диске. Допускается не указывать ABackupName - в этом случае имя файла будет содержать только дату и время. Если резервируемый ключ отсутствует в реестре, то файл на диске не создается.
Резервное копирование рекомендуется применять в скриптах, выполняющих модификацию ключей реестра.
Совместимость: AVZ 4.26 и выше
Пример:
begin
// Резервная копия ключа реестра
BackupRegKey('HKEY_CURRENT_USER',
'Software\Microsoft\Windows\CurrentVersion\Policies','policies');
// Удаление ключа реестра
RegKeyDel('HKEY_CURRENT_USER',
'Software\Microsoft\Windows\CurrentVersion\Policies');
end.


16.30.17. function RegKeyEnumVal

function RegKeyEnumVal(ARoot, AName : string; AList : TStrings);
Строит список вложенных ключей ключа реестра AName. Список AList должен быть создан и инициализирован перед вызовом данной функции.
Совместимость: AVZ 4.28 и выше
Пример:
var
Lines : TStrings;
i : integer;
begin
Lines := TStringList.Create;
RegKeyEnumVal('HKCU',
'Software\Microsoft\Windows\CurrentVersion\Internet Settings',
Lines);
for i:= 0 to Lines.Count-1 do
AddToLog(Lines[i]);
Lines.Free;
end.


16.30.18. function RegKeyEnumKey

function RegKeyEnumKey(ARoot, AName : string; AList : TStrings);
Строит список вложенных ключей ключа реестра AName. Список AList должен быть создан и инициализирован перед вызовом данной функции.
Совместимость: AVZ 4.28 и выше
Пример:
var
Lines : TStrings;
i : integer;
begin
Lines := TStringList.Create;
RegKeyEnumKey('HKCU',
'Software\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\Cache\Extensible Cache',
Lines);
for i:= 0 to Lines.Count-1 do
AddToLog(Lines[i]);
Lines.Free;
end.


16.30.19. function RegKeyResetSecurity

function RegKeyResetSecurity(ARoot, AName : string) : boolean;
Удаляет все привилегии ключа реестра AName, делая его доступным для всех пользователей. Данная функция полезна для удаления ключей реестра, созданных вредоносными программами - нередко после создания ключа зловред меняет привилегии доступа к нему, блокируя все операции, кроме чтения.
Совместимость: AVZ 4.32 и выше
Пример:
begin
RegKeyResetSecurity('HKLM', 'SYSTEM\CurrentControlSet\Services\TrojanDriverKey');
end.
На заметку: Начиная с версии 4.32 функции RegKeyDel и DeleteService автоматически вызывают RegKeyResetSecurity в случае необходимости.


16.30.20. Имена разделов

В именовании разделов допустимы следующие строки:
'HKEY_LOCAL_MACHINE', 'HKLM' для HKEY_LOCAL_MACHINE
'HKEY_CLASSES_ROOT', 'HKCR' для HKEY_CLASSES_ROOT
'HKEY_CURRENT_USER', 'HKCU' для HKEY_CURRENT_USER
'HKEY_CURRENT_CONFIG', 'HKCC' для HKEY_CURRENT_CONFIG
'HKEY_USERS' для HKEY_USERS (начиная с версии 4.43 для имени данного раздела поддерживается сокращение 'HKUS')
'HKEY_PERFORMANCE_DATA' для HKEY_PERFORMANCE_DATA
'HKEY_DYN_DATA' - для HKEY_DYN_DATA
Обратите внимание, что ключ указывается относительно выбранного раздела, т.е. если необходимо работать с ключом HKEY_LOCAL_MACHINE\Software\TrojanKey, то имя раздела будет 'HKEY_LOCAL_MACHINE', а ключ - "Software\TrojanKey". Регистр символов в имени раздела не играет роли.


16.30.21. Редиректор реестра

В 64 разрядных версиях Windows в реестре ряд ключей имеет две версии - для x32 и x64 приложений. Данная особенность предусмотрена для совместимости, по умолчанию x32 приложению доступны x32 версии ключей, для x64 - соответственно x64 версии. В итоге, к примеру ключ HKEY_LOCAL_MACHINE\SOFTWARE\ x32 и x64 приложения "видят" по разному (фактически, версия ключа HKEY_LOCAL_MACHINE\SOFTWARE\ для x32 приложений хранится в ключе HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node). Данный эффект возникает за счет так называемого "редиректора". По умолчанию AVZ и запускаемые в нем скрипты работают с x32 версиями системных ключей реестра, переключение режима возможно двумя методами:
1. При помощи изменения параметра X64R при помощи функции SetupAVZ . Действует глобально на время работы скрипта, может встречаться в скрипте многократно. Каждый вызов переключит редиректор в заданный режим, этот режим будет действовать до следующего переключения. В частности, SetupAVZ ('X64R=NX') выключает редиректор реестра и функции скрипта обращаются к x64 версиям ключей реестра. В этом режиме доступен ключ HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node с x32 версией ключей реестра. SetupAVZ('X64R=YX') включает редиректор, становятся доступны только x32 версии ключей реестра. В 32 разрядной версии Windows данная настройка игнорируется, вызов SetupAVZ('X64R=NX') не вызовет ошибки.
2. При помощи необязательного аргумента ARedirMode функций по работе с реестром, поддержка которого добавлена в AVZ версии 5. Возможны следующие варианты:
  • •
    данный аргумент отсутствует, или задан и его значение отлично от значений 'x32' или 'x64'. В этом случае функция скрипта по работе с реестром подчиняется глобальной настройке (см. п.п. 1), и ее работа не отличается от работы в AVZ 4.xx.
  • •
    задано значение 'x32' - независимо от глобальной настройки редиректора конкретно для данного вызова редиректор отработает в режиме x32 приложения. Глобальное состояние редиректора при этом не изменяется.
  • •
    задано значение 'x64' - независимо от глобальной настройки редиректора конкретно для данного вызова редиректор работает в режиме x64 приложения. Глобальное состояние редиректора при этом не изменяется. Указание такого значения для 32-х разрядных версий Windows не вызовет ошибки, на них данный параметр игнорируется.
Очевидно, что первый вариант удобен, если необходимо выполнить множество неких операций с заданным состояние редиректора реестра. Второй вариант удобен для разовых операций с реестром, особенно когда режим редиректора заранее неизвестен.


16.31. Работа с INI файлами

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.31. Работа с INI файлами
  • Предыдущая
  • Следующая

Содержание 16.31. Работа с INI файлами

16.31.1. function INIStrParamRead
16.31.2. function INIStrParamWrite
16.31.3. function INISectionExists
16.31.4. function INIEraseSection
16.31.5. function INIEraseParam


16.31.1. function INIStrParamRead

function INIStrParamRead(AFileName, ASectionName, AParamName, ADefVal : string) : string;
Осуществляет чтение параметра с именем AParamName из секции ASectionName файла INI с именем AFileName. Если такой параметр существует, то возвращается его значение, если параметр не существует - то возвращается значение по умолчанию ADefVal.
Совместимость: AVZ 4.26 и выше


16.31.2. function INIStrParamWrite

function INIStrParamWrite(AFileName, ASectionName, AParamName, AParamVal : string) : boolean;
Осуществляет запись параметра с именем AParamName из секции ASectionName файла INI с именем AFileName. Если такой параметр не существует, то он автоматически, аналогично происходит с секцией и файлом. Функция возвращает true в случае успешного выполнения и false в случае ошибки.
Совместимость: AVZ 4.26 и выше


16.31.3. function INISectionExists

function INISectionExists(AFileName, ASectionName : string) : boolean
Выполняет проверку, существует ли в INI файле с именем AFileName секция с именем ASectionName. Возвращает true, если секция существует и false в случае любой ошибки или отсутствия секции.
Совместимость: AVZ 4.26 и выше


16.31.4. function INIEraseSection

function INIEraseSection(AFileName, ASectionName : string) : boolean
Выполняет удаление из INI файла с именем AFileName секции с именем ASectionName. Возвращает true, если удаление успешно выполнено и false в случае ошибки.
Совместимость: AVZ 4.26 и выше


16.31.5. function INIEraseParam

function INIEraseParam(AFileName, ASectionName, AParamName : string) : boolean;
Выполняет удаление из INI файла с именем AFileName параметра AParamName секции ASectionName. Возвращает true, если удаление успешно выполнено и false в случае ошибки.
Совместимость: AVZ 4.26 и выше


16.32. Работа с файлом Hosts

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.32. Работа с файлом Hosts
  • Предыдущая
  • Следующая

Содержание 16.32. Работа с файлом Hosts

16.32.1. function GetHostsFileName
16.32.2. function ClearHostsFile


16.32.1. function GetHostsFileName

function GetHostsFileName : String;
Возвращает полное имя файла Hosts в системе. Функция учитывает тот факт, что в NT местоположение файла Hosts может быть настроено через реестр.
Пример:
begin
AddToLog('Hosts file name = "' + GetHostsFileName + '"');
end.


16.32.2. function ClearHostsFile

function ClearHostsFile : boolean;
Выполняет очистку файла Hosts. В файле Hosts остаются все комментарии из исходного файла, все значащие строки удаляются и добавляется единственная значащая строка "127.0.0.1 localhost". Функция возвращает true в случае успешного запуска и False в случае ошибки
Пример:
begin
ClearHostsFile;
end.


16.33. Работа с файлами и папками

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.33. Работа с файлами и папками
  • Предыдущая
  • Следующая

Содержание 16.33. Работа с файлами и папками

16.33.1. function GetCurrentDirectory
16.33.2. function GetSystemDisk
16.33.3. function GetTempDirectoryPath
16.33.4. function NormalDir
16.33.5. function NormalFileName
16.33.6. function ExtractFileName
16.33.7. function ExtractFilePath
16.33.8. function ExtractFileExt
16.33.9. function DirectoryExists
16.33.10. procedure CreateDirectory
16.33.11. procedure DeleteDirectory
16.33.12. function FileExists
16.33.13. function FileExistsMask
16.33.14. function GetFileSize
16.33.15. function GetFileVersion
16.33.16. function GetAttr
16.33.17. function SetAttr
16.33.18. function CalkFileMD5
16.33.19. function CalkFileSHA1
16.33.20. function DeleteFile
16.33.21. function DeleteFileMask
16.33.22. function DeleteFileSecure
16.33.23. function CopyFile
16.33.24. function RenameFile
16.33.25. function GetDriveType
16.33.26. function SearchFiles
16.33.27. function SearchFolders
16.33.28. function FolderIsEmpty
16.33.29. function FSResetSecurity
16.33.30. Макросы, допустимые в именах файлов
16.33.31. Кодирование атрибутов файла


16.33.1. function GetCurrentDirectory

function GetCurrentDirectory : string
Функция возвращает текущий каталог. Имя каталога нормализовано и содержит '\' на конце.
Примеры:
begin
// Вывод в протокол текущего каталога
AddToLog('Текущий каталог = '+GetCurrentDirectory);
end.
begin
// Сохранение протокола в текущий каталог
SaveLog(GetCurrentDirectory+'avz_log.txt');
end.


16.33.2. function GetSystemDisk

function GetSystemDisk : string;
Функция возвращает букву диска, на котором размещена система (папка Windows, ProgramFiles ...). Данная настройка полезна для сканирования всего диска, на котором размещены системные папки
Пример:
begin
// Настройка - сканировать системный диск
SetupAVZ('SCAN='+GetSystemDisk+':\');
end.


16.33.3. function GetTempDirectoryPath

function GetTempDirectoryPath : String;
Возвращает путь к папке для временных файлов. Выдаваемый функцией путь рекомендуется применять в скриптах. По умолчанию функция возвращает путь к каталогу временных файлов пользователя, под которым запущен AVZ, однако путь можно задать вручную при помощи параметра командной строки TempFolder . Возвращаемый путь содержит слеш на конце, например "c:\windows\temp\".


16.33.4. function NormalDir

function NormalDir(ADirName : string) : string;
Производит нормализацию имени папки. Нормализация предполагает:
·Удаление пробелов в начале и конце имени папки
·Производит замену "/" на "\"
·Производит удаление повторяющихся слешей (например, C:\\abc). Исключение - это парный слеш в начале сетевого пути
·При необходимости добавляет слеш в конце пути
·Замену макросов на их значения. Подробнее про макросы см. в разделе " макросы, допустимые в именах файлов "
Данная функция удобна в различных процедурах, производящих обработку каталогов.
Примеры:
begin
AddToLog(NormalDir('c:\test1'));
AddToLog(NormalDir('c:\\test2'));
AddToLog(NormalDir('c:\\test/abc/'));
AddToLog(NormalDir('%SysDisk%:\\test123'));
end.
В результате работы пример выведет в протокол:
c:\test1\
c:\test2\
c:\test\abc\
c:\test123\


16.33.5. function NormalFileName

function NormalFileName(AName : string) : string;
Возвращает полное нормализованное имя файла. Нормализация имени предполагает:
1. Замену макросов значениями
2. Обработку префиксов типа "\??\", "\System32"
3. Поиск файла в случае, если не указан полный путь к нему


16.33.6. function ExtractFileName

function ExtractFileName(AName : string) : string;
Извлекает имя файла из полного имени. Например, если передать функции полное имя файла "c:\virus\file.exe", то функция вернет "file.exe".
В имени файла допустимо указывать макросы, подробнее см. в разделе " макросы, допустимые в именах файлов "
Пример:
begin
AddToLog(ExtractFileName('c:\windows\virus.exe'));
end.
В данном примере в протокол будет внесен текст "virus.exe"


16.33.7. function ExtractFilePath

function ExtractFilePath(AName : string) : string;
Извлекает путь к файлу из полного имени файла. Например, если передать функции полное имя файла "c:\virus\file.exe", то функция вернет "c:\virus\"
В имени файла допустимо указывать макросы, подробнее см. в разделе " макросы, допустимые в именах файлов "
Пример:
begin
AddToLog(ExtractFilePath('c:\windows\virus.exe'));
end.
В данном примере в протокол будет внесен текст "c:\windows\"


16.33.8. function ExtractFileExt

function ExtractFileExt(AName : string) : string;
Извлекает расширение файла из полного или относительного имени файла. Например, если передать функции полное имя файла "c:\virus\file.exe", то функция вернет ".exe". Обратите внимание, что расширение возвращается вместе с точкой перед ним.
В имени файла допустимо указывать макросы, подробнее см. в разделе " макросы, допустимые в именах файлов "
Пример:
begin
AddToLog(ExtractFileExt('c:\windows\virus.exe'));
AddToLog(ExtractFileExt('virus.exe'));
end.


16.33.9. function DirectoryExists

function DirectoryExists(ADirName : string) : boolean;
Возвращает true, если на диске существует указанный каталог. Переданное имя каталога автоматически нормализуется, поэтому наличие/отсутствие слеша в конце пути, наличие пробелов в начале и конце имени каталога не влияет на работу функции.
В имени файла допустимо указывать макросы, подробнее см. в разделе " макросы, допустимые в именах файлов "


16.33.10. procedure CreateDirectory

procedure CreateDirectory(ADirName : string);
Создает каталог с указанным именем на диске. Переданное в качестве параметра имя каталога автоматически нормализуется.
В имени файла допустимо указывать макросы, подробнее см. в разделе " макросы, допустимые в именах файлов "


16.33.11. procedure DeleteDirectory

procedure DeleteDirectory(ADirName : string);
Удаляет пустой каталог с указанным именем. Переданное в качестве параметра имя каталога автоматически нормализуется.
В имени файла допустимо указывать макросы, подробнее см. в разделе " макросы, допустимые в именах файлов "
Отсутствие каталога или невозможность его удаления не является ошибкой, успешность операции можно проверить при помощи функции DirectoryExists . Если в каталоге есть вложенные каталоги или файлы, то его удаление при помощи DeleteDirectory невозможно - следует предварительно удалить вложенные файлы и папки. Для рекурсивного удаления файлов и папок в данном случае можно применить функцию DeleteFileMask
Начиная с версии 5.xx у процедуры добавлено второй параметр:
procedure DeleteDirectory(ADirName : string; ASDFormula : string = '');
Параметр ASDFormula является необязательным (в результате сохраняется полная совместимость), и позволяет задать формулу необратимого удаления.
Поддерживаемые коды операций:
E - выполняет проверку на наличие каталога. Если каталог отсутствует, то дальнейшая обработка прерывается. Данная операция обычно применяется в начале формулы.
W или Y - переименование каталога. Выполняется для того, чтобы усложнить восстановление, основанное на поиске каталога по его известному имени. Перед переименованием дата каталога заменяется на случайное значение. Код Y имеет аналогичный смысл для необратимого удаления файлов, W - применяется только для каталогов.
P - удаление привилегий каталога, сброс их на "всем разрешено все"
S - сброс кеша для диска, на котором размещен каталог.
Если у каталога имеются потоки, то для них будет применено удавление с помощью функции function DeleteFileSecure , которой передается формула из параметра ASDFormula


16.33.12. function FileExists

function FileExists(AFileName : string) : boolean;
Функция возвращает TRUE, если на диске найден указанный файл.
В имени файла допустимо указывать макросы, подробнее см. в разделе " макросы, допустимые в именах файлов "
Пример:
begin
if FileExists('%System32%\notepad.exe') then
AddToLog('Файл найден');
end.


16.33.13. function FileExistsMask

function FileExistsMask(AFileMask : string) : boolean;
Функция возвращает TRUE, если на диске найден указанный файл. Отличие функции от FileExists состоит в том, что поиск ведется по маске
В имени файла допустимо указывать макросы, подробнее см. в разделе " макросы, допустимые в именах файлов "


16.33.14. function GetFileSize

function GetFileSize(AFileName : string) : integer;
Возвращает размер файла с указанным именем в байтах. В случае ошибки (файл не найден, ошибка доступа) возвращается размер "-1".
В имени файла допустимо указывать макросы, подробнее см. в разделе " макросы, допустимые в именах файлов "
Пример:
begin
AddToLog(IntToStr(GetFileSize('%System32%\notepad.exe')));
end.


16.33.15. function GetFileVersion

function GetFileVersion(AFileName : string; AInfoType : integer) : string;
Возвращает версию или копирайты указанного исполняемого файла (если они у него есть). AInfoType содержит код, указывающий на то, какое поле требуется вернуть:
1 - CompanyName
2 - FileDescription
3 - FileVersion
4 - InternalName;
5 - LegalCopyright
6 - ProductVersion;
7 - ProductName;
8 - FileLongVersion (в виде двух чисел, разделенных точкой);
9 - ProductLongVersion (в виде двух чисел, разделенных точкой);
10 - VersionNum
В имени файла допустимо указывать макросы, подробнее см. в разделе " макросы, допустимые в именах файлов "
В случае, если файл отсутствует, недоступен, или файл не содержит информации заданного типа, то функция вернет пустую строку
Совместимость: AVZ 4.32 и выше
Пример:
var
i : integer;
begin
for i := 1 to 10 do
AddToLog(IntToStr(i) + ' = '+
GetFileVersion('%System32%\kernel32.dll', i));
end.
В результате работы данной функции в протокол будут выведены примерно следующие данные:
1 = Microsoft Corporation
2 = Библиотека клиента Windows NT BASE API
3 = 10.0.18362.1430 (WinBuild.160101.0800)
4 = kernel32
5 = © Корпорация Майкрософт. Все права защищены.
6 = 10.0.18362.1430
7 = Операционная система Microsoft® Windows®
8 = 6.2.18362.1350
9 = 10.0.18362.1350
10 = 393218


16.33.16. function GetAttr

function GetAttr(AName : string) : integer;
Возвращает число, в которой битами закодированы атрибуты указанного файла или каталога. Значения битов описано в разделе " кодирование атрибутов файла ".
В имени допустимо указывать макросы, подробнее см. в разделе " макросы, допустимые в именах файлов "
В случае ошибки возвращается число, содержащее единицы во всех разрядах - $FFFFFFFF.
Совместимость: AVZ 4.32 и выше
Пример:
begin
AddToLog(IntToStr(GetAttr('%System32%\')));
AddToLog(IntToStr(GetAttr('%WinDir%\notepad.exe')));
end.


16.33.17. function SetAttr

function SetAttr(AName : string; Attr : integer): boolean;
Данная функция устанавливает файлу или папке с именем AName атрибуты Attr. Кодирование атрибутов описано в разделе Кодирование атрибутов файла
Функция возвращает True в случае успешного выполнения и false в случае ошибки.
В имени допустимо указывать макросы, подробнее см. в разделе " макросы, допустимые в именах файлов "
Совместимость: AVZ 4.32 и выше
Пример:
begin
SetAttr(' %WinDir% ', $10);
end.
В данном примере у системной папки сбрасываются все атрибуты, кроме атрибута "каталог"


16.33.18. function CalkFileMD5

function CalkFileMD5(AFileName : string) : string;
Возвращает MD5 сумму указанного файла или пустую строку в случае, если файл не существует или доступ к нему заблокирован.
В имени файла допустимо указывать макросы, подробнее см. в разделе " макросы, допустимые в именах файлов "
Совместимость: AVZ 4.28 и выше
Пример:
begin
AddToLog(CalkFileMD5('%System32%\notepad.exe'));
end.


16.33.19. function CalkFileSHA1

function CalkFileSHA1(AFileName : string) : string;
Возвращает SHA1 сумму указанного файла или пустую строку в случае, если файл не существует или доступ к нему заблокирован.
В имени файла допустимо указывать макросы, подробнее см. в разделе " макросы, допустимые в именах файлов "
Совместимость: AVZ 4.37 и выше
Пример:
begin
AddToLog(CalkFileSHA1('%System32%\notepad.exe'));
end.


16.33.20. function DeleteFile

function DeleteFile(AFileName : string; AMode : string = '32') : boolean;
Удаляет файл с именем AFileName. Возвращает TRUE в случае успешного удаления и FALSE в случае ошибки.
Второй параметр необязателен и поддерживается начиная с версии 4.41 - он позволяет управлять файловым редиректором на 64bit системах. Возможны варианты:
32 - удаление производится при включенном редиректоре
64 - удаление производится при выключенном редиректоре
32,64 - делается две попытки удаления - при включенном и выключенном редиректоре.
В имени файла допустимо указывать макросы, подробнее см. в разделе " макросы, допустимые в именах файлов "
Указание несуществующего файла или пустой строки не является ошибкой.
В случае ошибки удаления файла обычным удалением применяется отложенное удаление. Имена удаляемых файлов автоматически добавляются в список файлов, который используется функцией ExecuteSysClean .
Начиная с версии 4.32 функция DeleteFile автоматически вызывает функцию FSResetSecurity в случае неуспешного удаления файла, после чего повторяет попытку удаления файла. Начиная с версии 5.00 данная логика немного изменена - вызов FSResetSecurity и повторное удаление файла выполняется при условии, что параметр AutoResetACL =Y (это значение параметра по умолчанию, как следствие, поведение DeleteFile по умолчанию не отличается от ее реализации в 4.32). Однако если задать AutoResetACL=N, то попыток сброса ACL файлов не производится.
Пример:
begin
DeleteFile('%WinDir%\trojan.exe');
end.


16.33.21. function DeleteFileMask

function DeleteFileMask(ADir, AMask : string; ARecurse : boolean; ASDFormula : string := '') : boolean;
Выполняет поиск и удаление файлов в папке ADir, имена которых соответствуют маскам AMask.
Параметр ARecurse управляет отработкой вложенных каталогов - если ARecurse = true, то будет выполнен рекурсивный обход папок начиная от заданной и в каждой из папок будет выполнен поиск и удаление файлов по маске AMask. Если ARecurse = false, то поиск и удаление файлов производится только в заданной папке, вложенные подкаталоги не обрабатываются.
Важно отметить, что данная функция удаляет объекты внутри каталога ADir, однако сам каталог ADir не удаляется. Если необходимо удаление каталога, следует дополнительно использовать функцию DeleteDirectory . Вложенные каталоги функция удаляет, но при условии, что они пустые (соответственно, попытка удаления каталогов делается после удаления файлов).
В параметре AMask можно указать одну или несколько масок. В случае задания нескольких масок они разделяются пробелами, запятыми или точкой с запятой. Т.е. данный варианты задания маски являются эквивалентными:
*.exe;*.dll;*.com
*.exe,*.dll,*.com
*.exe *.dll *.com
В имени папки ADir допустимо указывать макросы, подробнее см. в разделе " макросы, допустимые в именах файлов "
Параметр ASDFormula задает алгоритм необратимого удаления файла. По умолчанию алгоритм не задан и производится обычное удаление файла. В случае, если алгоритм задан, то выполняется необратимое удаление всех попадающих под маску файлов путем вызова DeleteFileSecure для каждого удаляемого файла. Важно отметить, что необратимое удаление может идти на порядки медленнее обычного - скорость необратимого удаления зависит от заданного алгоритма.
На заметку:
Данная функция опасна и может серьезно повредить системе в случае задания некорректных параметров. Поэтому перед применением функции рекомендуется тщательно проверить ее аргументы.
На заметку:
Несмотря на то, что в параметре ADir поддерживаются макросы, их следует использовать с особой осторожностью. Риск состоит в том, что используемая в макросе переменная окружения может быть установлена некорректно.
Совместимость: AVZ 4.28 и выше; параметр ASDFormula появился начиная с версии 4.32 (при этом параметр содержит значение по умолчанию и сохраняется полная совместимость с версией 4.28)
Примеры:
begin
// Очистка папки
DeleteFileMask('c:\TestDir', '*.*', true);
end.
begin
// Очистка папки и ее последующее удаление
DeleteFileMask('c:\TestDir', '*.*', true);
DeleteDirectory('c:\TestDir');
end.
В данном примере в случае успешного удаления всех файлов и вложенных каталогов функцией DeleteFileMask произойдет удаление каталога. В противном случае DeleteDirectory не сможет удалить каталог.
begin
// Очистка папки - необратимое удаление файлов
DeleteFileMask('c:\TestDir', '*.*', true, '01RX');
end.
В данном примере при удалении файлов применяется "формула" удаления '01RX', в результате содержимое файла будет затерто в три прохода, байтами 0x00, 0xFF и случайными байтами, после чего файл будет удален


16.33.22. function DeleteFileSecure

function DeleteFileSecure(AFileName, AAlgF : string) : boolean;
Выполняет необратимое удаление файла по заданному пользователем алгоритму. Обычное удаление файла состоит в удалении файла из списка имеющихся на диске файлов и пометки занятых под файл кластеров в качестве свободных. При этом задействованные под файл кластеры физически не очищаются и информация файла остается на диске, что позволяет восстановить стертый файл специализированными утилитами. Необратимое стирание файла предполагает уничтожение содержимого файла перед его удалением по тому или иному алгоритму. Известно множество алгоритмов необратимого удаления, отличающихся набором методов стирания (перезапись нулями, единицами, чередующимся битами, случайной информацией, определенными последовательностями байт), их последовательностью и количеством. Функция DeleteFileSecure позволяет реализовать практически любой алгоритм путем указания "формулы" этого алгоритма в параметре AAlgF.
В имени файла AFileName допустимо указывать макросы, подробнее см. в разделе " макросы, допустимые в именах файлов "
Алгоритм стирания
Алгоритм стирания задается своеобразной "формулой" - текстовой строкой в аргументе AAlgF. Каждый символ строки кодирует операцию, пробелы и неподдерживаемые символы игнорируются, регистр символов не учитывается. Некоторые операции могут содержать аргументы, указываемые в круглых скобках после кода операции. Отсутствие открывающей или закрывающей скобки является ошибкой.
Поддерживаемые коды операций:
E - выполняет проверку на наличие файла. Если файл отсутствует, то дальнейшая обработка прерывается. Данная операция обычно применяется в начале формулы.
0 - выполняет перезапись содержимого файла нулями (байтами с кодом 0x00)
1 - выполняет перезапись содержимого файла единицами (байтами с кодом 0xFF)
5 - выполняет перезапись содержимого файла чередованием 0 и 1 (байтами с кодом 0x55)
6 - выполняет перезапись содержимого файла чередованием 1 и 0 (байтами с кодом 0xAA)
R - выполняет перезапись содержимого файла случайными символами
B( ) - выполняет перезапись содержимого файла заданной последовательностью символов. Последовательность указывается в качестве аргумента, побайтно, в круглых скобках, разделителем является запятая. Отсутствие открывающей или закрывающей скобки после операции B является ошибкой, приводящей к прерыванию обработки формулы - т.е. при операции B минимальная конструкция должна иметь вид B( ). Значения байт задаются в шестнадцатеричном виде, минимальное количество байт - один. При описании байт предшествующие нули не обязательны, т.е. к примеру значения "F" и "0F" эквивалентны. Операция B является универсальной, операции "0","1","5" и "6" являются ее частными случаями (соответственно операция 0 эквивалентна "B(00)", "1" - "B(FF)", "5" - "B(55)", "6" - "B(AA)")
A - выполняет выравнивание размера файла на кратный кластеру в большую сторону (для того, чтобы гарантировано стереть данные последнего кластера) путем увеличения размера файла
Z - аналог A, выполняет выравнивание размера файла на кратный кластеру в большую сторону (для того, чтобы гарантировано стереть данные последнего кластера) путем дозаписи в файл байтов с кодом 0
N - инверсия всех байт файла (операция NOT). Для выполнения данной операции содержимое файла считывается с диска, считанные байты инвертируются и записываются в файл
K - замена всех байт файла на их дополнительные коды. Для выполнения данной операции содержимое файла считывается с диска, для считанных байтов вычисляются дополнительные коды и полученный результат записывается в файл
T - урезает длину файла до нулевого размера
C - создает файл нулевого размера. Если файл существует - то его размер урезается до нуля (аналог T)
D - удаляет файл
X - выполняет полную процедуру удаления файла средствами AVZ - включая отложенное удаление
Y - переименование файла. Выполняется несколько раз для того, чтобы усложнить восстановление, основанное на поиске файла по его известному имени или расширению. Перед переименованием дата файла заменяется на случайное значение, что также затрудняет поиск удаленного файла.
F - принудительный сброс кеша файла, для того, чтобы изменения гарантировано записались на диск.
P - удаление привилегий файла, сброс их на "всем разрешено все"
S - сброс кеша для диска, на котором размещен файл.
На заметку:
1. Если в алгоритме не указать в завершении D или X, то файл останется на диске
2. Если в алгоритме не указан оператор X, то файл не попадает в список удаленных файлов для эвристической чистки
3. Если файл блокирован, или открыт другим приложением в монопольном режиме (т.е. запись в него невозможна), то заданная алгоритмом процедура не сработает. Поэтому в любом случае рекомендуется применять операцию X для того, чтобы задействовать механизм отложенного удаления.
Совместимость: AVZ 4.32 и выше
Примеры:
begin
DeleteFileSecure('c:\top_secret.txt', 'E01TX');
end.
В данном примере производится проверка, существует ли файл (E). Если он существует, то файл затирается нулями (0), единицами (1), усекается до нулевой длинны (T) и затем удаляется средствами AVZ (X)
begin
DeleteFileSecure('c:\top_secret.txt', 'EB(AA,55,FF,00)TX');
end.
В данном примере производится проверка, существует ли файл (E). Если он существует, то файл затирается повторяющейся последовательностью байт с кодами AA 55 FF 00, усекается до нулевой длинны (T) и затем удаляется средствами AVZ (X)
begin
DeleteFileSecure('c:\top_secret.txt', 'ER01ARTX');
end.
В данном примере производится проверка, существует ли файл (E). Если он существует, то файл затирается случайными символами (R), нулями (0), единицами (1), размер файла выравнивается на размер кластера (A), затем файл затирается случайными символами (R), усекается до нулевой длинны (T) и затем удаляется средствами AVZ (X)
begin
DeleteFileSecure('c:\top_secret.txt', 'E0156RA0156RTX');
end.
В данном примере производится проверка, существует ли файл (E). Если он существует, то файл нулями (0), единицами (1), символами с кодом 0x55 (5) и 0xAA (6), затем размер файла выравнивается на размер кластера (A), производится повтор процедуры стирания описанными ранее методами (0156R), усекается до нулевой длинны (T) и затем удаляется средствами AVZ (X)
begin
DeleteFileSecure('c:\top_secret.txt', 'E 01 01 01 01 01 01 01 X');
end.
В данном примере содержимое файла перед удалением 7 раз перезаписывается нулями и единицами. В данном примере в алгоритме использованы пробелы, которые игнорируются, но повышают наглядность
Определение алгоритма через параметры функции позволяет в рамках одного скрипта удалять различные файлы с помощью различных алгоритмов, например:
begin
// Обычное удаление
DeleteFile('c:\top_secret1.txt');
// Необратимое удаление
DeleteFileSecure('c:\top_secret2.txt', 'E RR TX');
DeleteFileSecure('c:\top_secret3.txt', 'E 01 R X');
end.
В случае удаления множества файлов с помощью идентичного алгоритма удобно использовать константы:
const
DelAlg = 'E 01 R A R X';
begin
DeleteFileSecure('c:\top_secret1.txt', DelAlg);
DeleteFileSecure('c:\top_secret2.txt', DelAlg);
DeleteFileSecure('c:\top_secret3.txt', DelAlg);
DeleteFileSecure('c:\top_secret4.txt', DelAlg);
end.
Примеры реализации стандартных алгоритмов
1. Быстрое необратимое удаление файла
begin
DeleteFileSecure('c:\top_secret.txt', 'E 0 TX');
DeleteFileSecure('c:\top_secret1.txt', 'E R TX');
end.
Быстрое удаление реализовано в различных утилитах (например Acronis) и сводится к однопроходному стиранию содержимого файла нулями или случайными символами. Данная операция достаточна в большинстве случаев и выполняется достаточно быстро. Данный алгоритм можно усовершенствовать, добавив операции удаления и повторного создания файла - данные операции практически не влияют на быстродействие, но их выполнение затрудняет работу автоматических утилит восстановления файлов
begin
DeleteFileSecure('c:\top_secret.txt', 'E 0 DCZRT X');
end.
2. Российский стандарт, ГОСТ Р50739-95
begin
DeleteFileSecure('c:\top_secret.txt', 'E R TX');
end.
Российская Государственная Техническая Комиссия определяет 6 классов защищенности от несанкционированного доступа. Для классов с 6 по 4 требуется перезаписывать память и содержимое файла нулями (что соответствует формуле "0X"), а для. классов с 3 по 1 требуется перезаписывание секторов псевдослучайной последовательностью чисел (формула "RX" ). Существующий в настоящее время государственный стандарт ГОСТ Р50739-95 соответствует по своим требованиям
по второму классу защищенности по ГТК. В соответствие с этим стандартом все содержимое файла должно быть перезаписано случайными значениями.
3. Алгоритм Брюса Шнайера
begin
DeleteFileSecure('c:\top_secret.txt', 'E 10 RRRRR TX');
end
Брюс Шнайер в книге "Прикладная криптография" предложил метод стирания, состоящий из 7 операций: запись логических единиц (0xFF), нулей (0x00), и 5 проходов стирания содержимого файла последовательностями случайных байт. ((реализуется запросто - формула "10RRRRRX" для обычного и "" - продвинутого).
4. Немецкий стандарт VSITR
begin
DeleteFileSecure('c:\top_secret.txt', 'E 01 01 01 6 TX');
end.
Немецкий алгоритм предполагает метод стирания, состоящий из 7 операций, на каждой из которых содержимое файла перезаписывается следующими байтами: 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xAA
5. Американский стандарт, NAVSO P-5239-26 (MFM)
begin
DeleteFileSecure('c:\top_secret.txt', 'E B(01,00,00,00) B(FF,FF,FF,7F) R TX');
end.
Данный алгоритм предполагает стирание в три прохода: 1-й проход - стирание значением 0x01, 2 — 0x7FFFFFFF, 3 — случайные последовательности символов
6. Американский стандарт, NAVSO P-5239-26 (RLL)
begin
DeleteFileSecure('c:\top_secret.txt', 'E B(01,00,00,00) B(FF,FF,FF,27) R TX');
end.
Данный алгоритм предполагает стирание в три прохода: 1-й проход - стирание значением 0x01, 2 — 27FFFFFF, 3 — случайные последовательности символов
7.Американский стандарт: 5220.22-M
begin
DeleteFileSecure('c:\top_secret.txt', 'RKR TX');
end..
Данный алгоритм предполагает стирание в три прохода: 1-й проход — случайно выбранные символы в каждый байт каждого сектора, 2 — дополнительные к записанным на 1-м проходе; 3 — случайно выбранные символы
8. Алгоритм Питера Гутмана
Данный алгоритм очень сложный и громоздкий, предполагает использование 35 (!!) циклов стирания содержимого файла. Подробное описание алгоритма приведено на странице http://www.cs.auckland.ac.nz/~pgut001/pubs/secure_del.html , стоит отметить, что он представляет практическую ценность только для стирания особо ценных данных на магнитных носителях.
begin
DeleteFileSecure('c:\top_secret.txt', 'E RRRR 56 '+
'B(92,49,24) B(49,24,92) B(24,92,49)'+
'0 B(11)B(22)B(33)B(44)B(55)B(66)B(77)B(88)B(99)B(AA)B(BB)B(CC)B(DD)B(EE) 1'+
'B(92,49,24) B(49,24,92) B(24,92,49)'+
'B(6D,B6,DB) B(B6,DB,6D) B(DB,6D,B6)'+
'RRRR TX');
end.
Выполнение многопроходной перезаписи содержимого файла в рассмотренных алгоритмах предполагается выполнять для того, чтобы осуществить перемагничивание поверхности диска и затруднить считывание информации специальными техническими средствами (применение данных средств предполагает разборку HDD и установку снятых с него дисков в специальное устройство). Данные методы не повышают защищенность при удалении информации с флеш-накопителей, SSD дисков, могут быть неэффективны для гибридных HDD (т.е. HDD, содержащих энергонезависимый кеш для часто изменяемых данных), RAID массивов и сетевых хранилищ (так как последние обычно обладают кешем достаточно внушительного размера и в результате физического многопроходного стирания файла на диске может и не происходить. Поэтому для большинства практических операций достаточно затирания содержимого файла случайными данными с его последующим удалением:
begin
DeleteFileSecure('c:\top_secret.txt', 'R DCAT X');
end.
В данном случае содержимое файла стирается случайными значениями, после чего файл удаляется, вновь создается с нулевой длинной, увеличивается до размера кластера, снова усекается до нулевой длинны и стирается. Подобные пересоздания файла затрудняют работу автоматических утилит, предназначенных для восстановления стертых файлов.
На заметку
Для необратимого удаления всех файлов в заданном каталоге или удаления файлов по маске следует применить функцию DeleteFileMask с параметром ASDFormula


16.33.23. function CopyFile

function CopyFile(AFromName, AToName : string) : boolean;
Выполняет копирование файла с именем AFromName в файл AToName. Возвращает true, если копирование было успешным и false в случае ошибки.
В имени файла допустимо указывать макросы, подробнее см. в разделе " макросы, допустимые в именах файлов "


16.33.24. function RenameFile

function RenameFile(AFromName, AToName : string) : boolean;
Выполняет переименование файла с именем AFromName в AToName. Возвращает true в случае успешного выполнения переименование и false в случае ошибки.
В имени файла допустимо указывать макросы, подробнее см. в разделе " макросы, допустимые в именах файлов "
Пример:
begin
RenameFile('%WinDir%\trojan.exe', '%WinDir%\trojan.bak');
end.


16.33.25. function GetDriveType

function GetDriveType(ADirName : string) : integer;
Определяет тип диска. Параметр ADirName должен содержать путь к корневому каталогу тома, например "C:\".
Возвращаемые значения:
0 - Ошибка, определить тип диска невозможно
1 - Указанный диск не существует (как вариант - некорректно путь к корневому каталогу тому, например "C:\Windows")
2 - Сменный диск
3 - HDD
4 - Сетевой диск
5 - CD-ROM/DVD-ROM
6 - RAM-диск
Совместимость: AVZ 4.26 и выше
Пример:
begin
AddToLog(Inttostr(GetDriveType('C:\')));
end.


16.33.26. function SearchFiles

function SearchFiles(APath, AMask : string; AFileList : TStrings;
AFullPath, AAppendFiles : boolean) : integer;
Осуществляет поиск файлов по маске AMask в каталоге APath.
Найденные файлы помещаются в список AFileList.
Параметр AFullPath задает режим добавления найденных файлов. Если AFullPath равен true, то в список добавляются полные имена найденных файлов, включая путь. Если он равен False, то добавляются только имена файлов, без пути.
Параметр AAppendFiles управляет режимом формирования списка. Если он равен true, то найденные файлы добавляются к списку (с практической точки зрения данный режим актуален при AFullPath=false), если он равен false, то список очищается перед началом поиска.
Функция возвращает количество файлов, найденных в соответствии с заданными параметрами и 0 в случае ошибки.
В пути (параметр APath) допустимо указывать макросы, подробнее см. в разделе " макросы, допустимые в именах файлов "
Данная функция удобна для решения простых задач поиска файлов, для решения более сложных задач следует применять класс TFileSearch . У функции есть аналог SearchFolders , предназначенный для быстрого поиска подкаталогов в указанной папке
Совместимость: AVZ 4.30 и выше
Пример:
var
Lines : TStrings;
i : integer;
begin
Lines := TStringList.Create;
SearchFiles('%WinDir%', '*.exe', Lines, true, false);
for i:= 0 to Lines.Count-1 do
AddToLog(Lines[i]+', MD5='+
CalkFileMD5(Lines[i])+
', Size='+inttostr(GetFileSize(Lines[i])));
Lines.Free;
end.
Данный пример осуществляет поиск файлов *.exe в папке Windows, найденные файлы заносятся в список с полными путями и затем в цикле выводятся в протокол. Для практической демонстрации в данном примере для каждого найденного файла определяется MD5 сумма и размер.


16.33.27. function SearchFolders

function SearchFolders(APath, AMask : string; ADirList : TStrings;
AFullPath, AAppendFolders : boolean) : integer;
Осуществляет поиск каталогов по маске AMask в каталоге APath.
Найденные каталоги помещаются в список ADirList.
Параметр AFullPath задает режим добавления найденных каталогов. Если AFullPath равен true, то в список добавляются полные имена найденных каталогов, включая полный путь. Если он равен False, то добавляются только имена найденных каталогов, без пути.
Параметр AAppendFolders управляет режимом формирования списка. Если он равен true, то найденные каталоги добавляются к списку (с практической точки зрения данный режим актуален при AFullPath=false), если он равен false, то список очищается перед началом поиска.
Функция возвращает количество каталогов, найденных в соответствии с заданными параметрами и 0 в случае ошибки.
В пути (параметр APath) допустимо указывать макросы, подробнее см. в разделе " макросы, допустимые в именах файлов "
Данная функция удобна для решения простых задач поиска каталогов, для решения более сложных задач следует применять класс TFileSearch . У функции есть аналог SearchFiles , предназначенный для быстрого поиска файлов в указанной папке
Совместимость: AVZ 4.32 и выше
Пример:
var
Lines : TStrings;
i : integer;
begin
Lines := TStringList.Create;
SearchFolders('%WinDir%', 'system*', Lines, true, false);
for i:= 0 to Lines.Count-1 do
AddToLog(Lines[i]);
Lines.Free;
end.
Данный пример осуществляет поиск файлов *.exe в папке Windows, найденные файлы заносятся в список с полными путями и затем в цикле выводятся в протокол. Для практической демонстрации


16.33.28. function FolderIsEmpty

function FolderIsEmpty(AName : string):boolean;
Возвращает TRUE, если указанная папка отсутствует на диске, или присутствует и пустая (не содержит вложенных папок и файлов). Если папка существует и в ней есть хотя-бы один вложенный объект, то возвращает FALSE. Данная функция очень полезна для операций чистки каталогов, содержащих кеши, дампы, протоколы и т.п.
В имени папки допустимо указывать макросы, подробнее см. в разделе " макросы, допустимые в именах файлов "
Совместимость: AVZ 4.32 и выше
Пример:
begin
if FolderIsEmpty('c:\temp') then
AddToLog('папка c:\temp отсутствует или пустая')
else
AddToLog('в папке c:\temp есть файлы или каталоги');
end.


16.33.29. function FSResetSecurity

function FSResetSecurity(AName : string) : boolean;
Удаляет все привилегии файлового объекта с именем AName, делая его доступным для всех пользователей. Данная функция полезна для удаления файлов и папок, созданных вредоносными программами.
В имени файла допустимо указывать макросы, подробнее см. в разделе " макросы, допустимые в именах файлов "
Совместимость: AVZ 4.32 и выше
Пример:
begin
FSResetSecurity('%System32%\trojan.dll');
end.
На заметку: Начиная с версии 4.32 функция DeleteFile при ее явном и неявном вызове автоматически вызывает FSResetSecurity в случае неуспешного удаления файла.
На заметку: Начиная с версии 5.00 функция DeleteFile при ее явном и неявном вызове автоматически вызывает FSResetSecurity в случае неуспешного удаления файла, но только при условии, что параметр AutoResetACL =Y. По умолчанию значение данного параметра Y, как следствие, поведение DeleteFile по умолчанию не отличается от ее реализации в 4.32.


16.33.30. Макросы, допустимые в именах файлов

%WinDir% - путь к папке Windows (без \ на конце)
%SystemRoot%, %System32% - заменяется на путь к папке System/System32 (без \ на конце)
%SysDisk% - системный диск в виде "X:" (без \)
%Tmp% - путь к системной папке для временных файлов
%PF% - путь к папке Program Files на системном диске (без \ на конце)
Начиная с версии 4.26 поддерживаются
%SYSTEMDRIVE% - синоним %SysDisk%, системный диск в виде "X:"
%Personal% - путь к папке "Мои документы" текущего пользователя
%ProfileDir% - путь к папке, в которой размещаются профили пользователей
%USERPROFILE% - путь к папке с профилем текущего пользователя (берется из одноименной переменной окружения)
Начиная с версии 4.32 поддерживаются
%allusersprofile% - путь к папке с профилем AllUsers (без \ на конце)
%AppData% - путь к папке Application Data текущего пользователя (без \ на конце)
%LocalSettings% - путь к папке Local Settings текущего пользователя (без \ на конце)
На заметку:
Регистр символов макроса не учитывается, к примеру %SysDisk%, %SYSDISK% и %sysdisk% эквивалентны.
Примеры:
begin
AddToLog(NormalDir('%LocalSettings%'));
end.
Пример вывода в протокол данных по операционной системе и значения всех макросов:
procedure TestPath(S : string);
begin
AddToLog(S + ' = "' + NormalDir(S)+'"');
end;
// Добавление в протокол данных о версии ОС
procedure AddToLogVerionInfo;
var
S : string;
begin
S := RegKeyStrParamRead('HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows NT\CurrentVersion',
'ProductName');
S := S + ', Build='+
RegKeyStrParamRead('HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows NT\CurrentVersion',
'CurrentBuildNumber');
S := S + ', SP="'+
RegKeyStrParamRead('HKEY_LOCAL_MACHINE',
'SOFTWARE\Microsoft\Windows NT\CurrentVersion',
'CSDVersion')+'"';
AddToLog('$AVZ0101: '+S);
// Проверка, не работаем ли мы из терминальной сессии - это может повлиять на пути !
if ISNT then
if GetEnvironmentVariable('SESSIONNAME') <> '' then
if UpperCase(Trim(GetEnvironmentVariable('SESSIONNAME'))) <> 'CONSOLE' then
AddToLog('$AVZ1172 ('+GetEnvironmentVariable('SESSIONNAME')+')');
end;
begin
ClearLog;
AddToLogVerionInfo;
TestPath('%WinDir%');
TestPath('%SystemRoot%');
TestPath('%System32%');
TestPath('%SysDisk%');
TestPath('%Tmp%');
TestPath('%PF%');
TestPath('%SYSTEMDRIVE%');
TestPath('%personal%');
TestPath('%profiledir%');
TestPath('%userprofile%');
TestPath('%allusersprofile%');
TestPath('%AppData%');
TestPath('%localsettings%');
end.
См. также GetEnvironmentVariable


16.33.31. Кодирование атрибутов файла

Атрибуты файла являются битовой маской, в которой каждый бит кодирует определенный атрибут.
Оперировать с битами несложно при помощи операций OR и AND.
Основные атрибуты файлов и каталогов:
Бит 0 (вес 1 = $01) - атрибут ReadOnly ("только чтение")
Бит 1 (вес 2 = $02) - атрибут Hidden ("скрытый")
Бит 2 (вес 4 = $04) - атрибут SysFile ("системный")
Бит 3 (вес 8 = $08) - атрибут VolumeID ("метка тома")
Бит 4 (вес 16 = $10) - атрибут Directory ("каталог")
Бит 5 (вес 32 = $20) - атрибут Archive ("архивирован")
Бит 6 (вес 64 = $40) - атрибут SymLink ("символьная ссылка")
Таким образом, если например требуется задать атрибуты "только чтение" и "архивирован", то 1 or 32 = 33. Аналогично с проверкой атрибутов - несложно проверять один или несколько интересующих нас битов при помощи оператора AND, например:
var
FAttr : integer;
begin
FAttr := GetAttr('%System32%\');
if FAttr <> $FFFFFFFF then
if (FAttr and 79) > 0 then
AddToLog('У системной папки подозрительные атрибуты');
end.
В данном примере битовая маска 79 (01001111) выделяет биты 0,1,2,3,6 для проверки, и если хотя бы один из этих битов установлен, то выводится сообщение о подозрительных атрибутах.
Более подробную информация по атрибутам можно получить в MSDN - https://docs.microsoft.com/en-us/windows/win32/fileio/file-attribute-constants


16.34. Работа с текстовыми файлами и списками строк

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.34. Работа с текстовыми файлами и списками строк
  • Предыдущая
  • Следующая

Содержание 16.34. Работа с текстовыми файлами и списками строк

16.34.1. Класс TStringList
16.34.2. Примеры


16.34.1. Класс TStringList

Для работы с текстовыми файлами и массивами строк в скриптовом языке поддерживается класс TStringList, идентичный аналогичному классу в Delphi. Данный класс позволяет:
  • •
    Создавать списки строк и осуществлять их обработку;
  • •
    Производить поиск строк и сортировку;
  • •
    Работать с текстовыми файлами;
  • •
    Осуществлять особую обработку массивов строк вида "имя=значение";
Методы:
constructor Create;
Создает экземпляр класса. Попытка работы с экземпляром класса до его создания или после разрушения приведет к ошибке.
destructor Free;
Разрушает экземпляр класса, освобождает все занятые им ресурсы.
function Add(const S: string): Integer;
Добавляет строку к списку, возвращаемое значение - позиция элемента в списке (позиция отсчитывается от 0).
procedure Append(const S: string);
Аналогично Add, но не возвращает позицию добавленного элемента
procedure Clear;
Очищает список строк
procedure Delete(Index: Integer);
Удаляет строку с указанным индексом. Указание недопустимого индекса является ошибкой
procedure Move(CurIndex, NewIndex: Integer); virtual;
Перемещает элемент CurIndex в позицию NewIndex. Указание недопустимого индекса является ошибкой
function IndexOf(const S: string): Integer;
Поиск указанной строки в массиве. Если строка найдена, то возвращается ее индекс, если не найдена - значение -1.
procedure Insert(Index: Integer; const S: string);
Вставляет строку по указанному индексу (раздвигая массив). Например, Insert(0, 'First string !') вставит текст 'First string !' в начало массива строк
procedure LoadFromFile(const FileName: string);
Загружает текстовый файл с именем FileName в список строк. Имеющиеся при этом в списке данные затираются.
procedure SaveToFile(const FileName: string);
Загружает список строк в текстовый файл с именем FileName. Имеющиеся при этом в списке данные не изменяются.
Свойства
property Count: Integer;
Возвращает текущее количество строк в списке. Допускает только чтение.
property Values[const Name: string]: string;
Возвращает значение по заданному ключу Name. Работает в случае, если в массиве строк данные представлены в виде пар ключ=значение. Допускает чтение и запись. Если заданный ключ не будет найден в списке строк, то вернет пустую строку. Первое присвоение приведет к созданию соответствующей пары "ключ=значение", последующие - к ее модификации. По сути, это позволяет использовать TStringList в качестве ассоциативного массива, что удобно для ряда задач, в частности - создания профилей настроек, собственных баз и т.п.. Разделителем пары "ключ=значение" является знак "=".
Пример:
var
List : TStringList;
begin
List := TStringList.Create;
List.Values['x'] := '123';
List.Values['y'] := 'test';
List.Values['x'] := '456';
AddToLog('x='+List.Values['x']);
AddToLog('y='+List.Values['y']);
List.Free;
end.
property CommaText: string;
Позволяет работать с представлением содержимого TStringList в виде строки с разделителями, допускает чтение и запись (в случае записи производится разбиение строки по символу разделителю ','). В случае, если строка содержит разделитель, она заключается в кавычки при чтении, при записи разделители внутри заключенной в кавычки строки игнорируются.
Пример:
var
List : TStringList;
begin
List := TStringList.Create;
List.CommaText := 'x=111,"y=0,0,0"';
AddToLog('x='+List.Values['x']);
AddToLog('y='+List.Values['y']);
AddToLog('CommaText='+List.CommaText);
List.Free;
end.
property Text: string;
Позволяет работать с представлением содержимого TStringList в виде строки. Разделителем строк внутри такой строки будут стандартные символы перевода строки. Допускает как чтение, так и запись, что в частности удобно в случае, если требуется скопировать все строки из одного TStringList в другой.


16.34.2. Примеры

Минимальный скрипт, использующий списки
var
SL : TStringList;
begin
SL := TStringList.Create;
SL.Free;
end.
Вывод содержимого списка в протокол
// Вывод списка строк в протокол в цикле
procedure PrintStringListToLog(ASL : TStringList);
var
i : integer;
begin
for i := 0 to ASL.Count - 1 do
AddToLog(ASL[i]);
end;
var
SL : TStringList;
begin
SL := TStringList.Create;
SL.Add('111111');
SL.Add('222222');
SL.Add('333333');
PrintStringListToLog(SL);
SL.Free;
end.
Добавление, удаление и перемещение строк
var
SL : TStringList;
begin
SL := TStringList.Create;
// Добавление строк
SL.Add('111111');
SL.Add('222222');
SL.Add('333333');
// Удаление второй строки
SL.Delete(1);
// Перестановка строк
SL.Move(0,1);
// Вывод результатов
PrintStringListToLog(SL);
SL.Free;
end.
Добавление, удаление и перемещение строк
var
SL : TStringList;
begin
SL := TStringList.Create;
// Добавление строк
SL.Add('111111');
SL.Add('222222');
SL.Add('333333');
// Удаление второй строки
SL.Delete(1);
// Перестановка строк
SL.Move(0,1);
// Вывод результатов
PrintStringListToLog(SL);
SL.Free;
end.
Поиск строк
var
SL : TStringList;
begin
SL := TStringList.Create;
// Добавление строк
SL.Add('111111');
SL.Add('222222');
SL.Add('333333');
// Примеры поиска строк
AddToLog(IntToStr(SL.IndexOf('111')));
AddToLog(IntToStr(SL.IndexOf('111111')));
AddToLog(IntToStr(SL.IndexOf('333333')));
SL.Free;
end.
В данном примере первая операция поиска не найдет образец, и функция вернет -1. Поиск "333333" и "111111" будет успешным и метод вернет их индексы.
Работа с текстовыми файлами
var
SL : TStringList;
begin
SL := TStringList.Create;
// Добавление строк
SL.Add('111111');
SL.Add('222222');
SL.Add('333333');
// Сохранение в текстовый файл
SL.SaveToFile(GetAVZDirectory + '1.txt');
// Загрузка из текстового файла
SL.LoadFromFile(GetAVZDirectory + '1.txt');
SL.Free;
end.


16.35. Поиск файлов и папок

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.35. Поиск файлов и папок
  • Предыдущая
  • Следующая

Содержание 16.35. Поиск файлов и папок

16.35.1. Класс TFileSearch
16.35.2. Примеры поиска


16.35.1. Класс TFileSearch

Для организации поиска файлов и папок на диске в скриптовом языке предусмотрен класс TFileSearch, реализующий всю необходимую для поиска функциональность. Следует заметить, что для простых случаев поиска файлов по маске можно применять функцию SearchFiles
Методы:
constructor Create(AOwner: TComponent);
Создает экземпляр класса. Единственный параметр AOwner задает владельца в данном случае не имеет смысла и должен быть равен nil. Экземпляр класса должен быть создан перед его использованием, в противном случае возникнет исключение
destructor Free;
Разрушает экземпляр класса, освобождает все занятые им ресурсы.
function FindFirst(AFileMask : string) : boolean;
Поиск первого файла или папки, удовлетворяющего условию поиска. Возвращает TRUE, если первый подходящий объект успешной найден. AFileMask задает маску поиска файлов, например "*.*". В маске допустимо указывать макросы, подробнее см. в разделе " макросы, допустимые в именах файлов "
function FindNext : boolean;
Поиск очередного файла или папки, удовлетворяющего условию поиска. Возвращает TRUE, если очередной подходящий объект успешной найден. Результат последней операции поиска можно так-же получить при помощи свойства Found
function FindClose : boolean;
Завершает поиск, освобождает занятые для поиска ресурсы, но не разрушает экземпляр класса. FindClose автоматически вызывается при вызове FindFirst и Free
Свойства:
property Found : boolean;
Результат последней операции FindFirst или FindNext. Наличие этого свойства упрощает организацию цикла поиска
property ISDir : boolean;
Возвращает TRUE, если текущий найденный объект является каталогом и false, если это файл
property FileName : string;
Возвращает имя файла текущего найденного объекта (важно отметить - только имя, без пути !!)
property FileAttr : byte;
Возвращает атрибуты последнего найденного объекта ( коды атрибутов )
property FileTime : TDateTime;
Возвращает дату и время создания последнего найденного объекта
property FileLastWriteTime : TDateTime;
Возвращает дату и время последней модификации последнего найденного объекта (поддерживается начиная с AVZ 4.29 и KIS 2013)
property FileLastAccessTime : TDateTime;
Возвращает дату и время последнего доступа последнего найденного объекта (поддерживается начиная с AVZ 4.29 и KIS 2013)


16.35.2. Примеры поиска

Возможно два базовых варианта организации цикла поиска файлов. Рассмотрим оба (они равнозначны по скорости работы)
Вариант 1. Цикл repeat ... until
var
FS : TFileSearch;
begin
FS := TFileSearch.Create(nil);
if FS.FindFirst('c:\*.*') then
repeat
if FS.IsDir then
AddToLog('Найден каталог: '+FS.FileName)
else
AddToLog('Найден файл: '+FS.FileName)
until not(FS.FindNext);
FS.Free;
end.
Вариант 2. Цикл while
var
FS : TFileSearch;
begin
FS := TFileSearch.Create(nil);
FS.FindFirst('c:\*.*');
while FS.Found do begin
if FS.IsDir then
AddToLog('Найден каталог: '+FS.FileName)
else
AddToLog('Найден файл: '+FS.FileName);
FS.FindNext;
end;
FS.Free;
end.
Пример рекурсивного обхода каталогов
// Обработка найденного файла
Procedure ScanFile(AFileName : string);
begin
SetStatusBarText(AFileName);
end;
// Сканирование каталога
Procedure ScanDir(ADirName : string; AScanSubDir : boolean);
var
FS : TFileSearch;
begin
ADirName := NormalDir(ADirName);
FS := TFileSearch.Create(nil);
FS.FindFirst(ADirName + '*.*');
while FS.Found do begin
if FS.IsDir and AScanSubDir and (FS.FileName <> '.')
and (FS.FileName <> '..') then
ScanDir(ADirName + FS.FileName, AScanSubDir)
else
ScanFile(ADirName + FS.FileName);
FS.FindNext;
end;
FS.Free;
end;
begin
ScanDir('c:\', true);
end.


16.36. Работа с процессами

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.36. Работа с процессами
  • Предыдущая
  • Следующая

Содержание 16.36. Работа с процессами

16.36.1. function ExecuteFile
16.36.2. function ExecuteFileOUT
16.36.3. function GetLastExitCode
16.36.4. function RefreshProcessList
16.36.5. function GetProcessCount
16.36.6. function GetProcessName
16.36.7. function GetProcessPID
16.36.8. function TerminateProcess
16.36.9. function TerminateProcessByName
16.36.10. Пример


16.36.1. function ExecuteFile

function ExecuteFile(FileName, Params : string;
Mode : integer; WaitTime : integer;
Terminate : boolean) : boolean;
Производит выполнение указанного файла с заданными параметрами.
Функция возвращает true в случае успешного запуска процесса, false в случае ошибки.
FileName - имя файла. В имени файла допустимы макросы, подробнее см. в разделе " макросы, допустимые в именах файлов ".
Params - параметры. При отсутствии параметров передается пустая строка. Параметры так-же допустимо передавать после имени запускаемого файла, отделяя их запятой
Mode - код режима отображения запускаемой программы. Поддерживаются коды:
0 - запуск приложения с флагом SW_HIDE - при этом окно приложения невидимо для пользователя
1 - стандартное отображение окна запускаемого приложения
2 - окно запускаемого приложения минимизировано
3 - окно запускаемого приложения развернуто на весь экран
WaitTime - время в миллисекундах, в течении которого производится ожидание завершения запущенной программы. Указание нулевого времени приводит к тому, что скрипт продолжает свое выполнение без ожидания завершения запущенной программы. Минимальная задержка - 100 мс, указание меньшей задержки приводит к тому, что она будет установлена на 100 мс. Ожидание завершается по достижению одного из двух событий - истечению указанного времени или завершению запущенной программы. Важно, что при указании ненулевого WaitTime работа скрипта будет приостановлена до истечения таймаута или до момента завершения запущенной программы. С помощью GetLastExitCode можно определить тот факт, что работа процесса была прервана по таймауту.
В случае, если во время ожидания завершения приложения, запущенного скриптом, пользователь принудительно остановит работу скрипта, AVZ делает попытку остановить запущенное им приложение также, как при истечении таймаута.
Terminate - принудительное завершение запущенной программы после истечения заданного в WaitTime периода. При WaitTime=0 данный параметр не имеет смысла и игнорируется. Логика работы: если прошло время WaitTime, Terminate=true и приложение еще работает, то оно принудительно завершается.
На заметку:
Если на момент запуска процесса работает AVZGuard, то процесс будет запущен как доверенный процесс и действие AVZGuard на него не будет распространяться.
Примеры:
begin
ExecuteFile('notepad.exe', '', 1, 10000, true);
end.
В данном примере производится запуск блокнота, и ожидается его завершение. Если процесс отработает более десяти секунд, то он будет принудительно завершен.
Код возврата процесса, запущенного при помощи ExecuteFile можно узнать при помощи функции GetLastExitCode


16.36.2. function ExecuteFileOUT

function ExecuteFileOUT(FileName, Params: string;
Mode : integer;
WaitTime : integer; ATerminate : boolean;
AOUT: TStringList; AErrors : TStringList;
ACodePage : integer) : boolean;
Производит выполнение указанного приложения, полный аналог ExecuteFile , за исключением того, что данная функция предназначена для запуска консольных приложений и перехватывает выводимые ими на консоль данные с учетом кодировки. Код возврата процесса, запущенного при помощи ExecuteFileOUT можно узнать при помощи функции GetLastExitCode
Функция возвращает true в случае успешного запуска процесса, false в случае ошибки.
AOUT - экземпляр класса TStringList, в случае успешного запуска приложения заполняется строками, выведенными запущенным приложением на консоль в поток StdOutput.
AErrors - экземпляр класса TStringList, в случае успешного запуска заполняется строками, выведенными запущенным приложением на консоль в поток StdError. Если поток StdError не представляет интереса, вместо экземпляра класса можно передать nil.
ACodePage - кодовая страница для перекодировки сообщений, выводимых приложением в консоль. Для русскоязычной Windows это, как правило, 866.
Совместимость: AVZ 5.45 и выше
На заметку:
Так как в данном случае необходимо дождаться завершения работы приложения, WaitTime=0 не поддерживается, для значений менее 5000 оно автоматически исправляется на 5000 (т.е. минимальное ожидание завершения процесса - 5 секунд, рекомендуется задать большие значения, так как если приложение завершится раньше заданного интервала, то ожидание немедленно прервется).
Пример:
var
PrgOut, PrgErr : TStringList;
begin
PrgOut := TStringList.Create;
PrgErr := TStringList.Create;
ExecuteFileOUT('cmd', '/c dir', 1, 15000, true, PrgOut, PrgErr, 866);
AddToLog('Приложение вывело на консоль:');
AddToLog(PrgOut.text);
AddToLog('Ошибки:');
AddToLog(PrgErr.text);
end.
В данном примере выполняется команда DIR, и результаты работы этой команды выводится в протокол.
var
PrgOut, SummaryOut: TStringList;
procedure AddLinesToSummary(ALines : TStringList);
var
i : integer;
begin
for i := 0 to ALines.Count-1 do
SummaryOut.Add(ALines[i]);
end;
begin
PrgOut := TStringList.Create;
SummaryOut:= TStringList.Create;
SummaryOut.Add('--- Запуск ipconfig /flushdns ---');
ExecuteFileOUT('ipconfig', '/flushdns', 1, 15000, true, PrgOut, nil, 866);
SummaryOut.Add(PrgOut.Text);
SummaryOut.Add('--- Запуск ipconfig /all ---');
ExecuteFileOUT('ipconfig.exe', '/all', 1, 15000, true, PrgOut, nil, 866);
SummaryOut.Add(PrgOut.Text);
AddToLog('Итоговый протокол:');
AddToLog(SummaryOut.text);
end.
В данном примере демонстрируется формирование сводного протокола, содержащего данные, выведенные в StdOut несколькими консольными приложениями.


16.36.3. function GetLastExitCode

function GetLastExitCode : dword;
Возвращает код возврата, переданный процессом, запущенным при помощи функции ExecuteFile или ExecuteFileOUT , имеет смысл только в случае успешного запуска и завершения процесса.
Совместимость: AVZ 4.45 и выше
Пример:
begin
if ExecuteFile('console_tool.exe', '', 1, 100000, true) then
AddToLog('Exit code = '+IntToStr(GetLastExitCode));
end.
У значения, возвращаемого GetLastExitCode, зарезервировано несколько значений, используемых для инженерных целей:
  • •
    FFFFFFFF (4294967295) - значение, возвращаемое в случае, если перед вызовом GetLastExitCode не было вызова ExecuteFile; или вызов ExecuteFile был, но процесс запустить не удалось.
  • •
    FFFFFFFE (4294967294) - значение, возвращаемое в случае, если процесс был успешно запущен, а затем принудительно завершен AVZ по таймауту, заданному в параметре WaitTime.


16.36.4. function RefreshProcessList

function RefreshProcessList:boolean;
Обновляет список процессов. Эта функция должна вызываться перед началом работы со списком процессов. Функция возвращает True, если построение списка было успешным.
Пример:
begin
// Обновление списка процессов
RefreshProcessList;
AddToLog('Количество процессов = '+IntToStr(GetProcessCount));
end.
Подробный пример использования: пример


16.36.5. function GetProcessCount

function GetProcessCount:integer;
Возвращает количество процессов в списке, построенном при помощи RefreshProcessList. Вызов GetProcessCount до успешного вызова RefreshProcessList не является ошибкой - в этом случае возвращается 0.
Пример:
begin
// Обновление списка процессов
RefreshProcessList;
AddToLog('Количество процессов = '+IntToStr(GetProcessCount));
end.


16.36.6. function GetProcessName

function GetProcessName(Indx : integer):string;
Возвращает имя исполняемого файла процесса с индексом Indx. Обратите внимание - индекс отсчитывается от нуля, следовательно цикл анализа списка процессов должен идти от 0 до GetProcessCount -1. Указание индекса вне допустимого диапазона не является ошибкой - в этом случае функция возвращает пустую строку.


16.36.7. function GetProcessPID

function GetProcessPID(Indx : integer):dword;
Возвращает PID процесса с индексом Indx. Обратите внимание - индекс отсчитывается от нуля, следовательно цикл анализа списка процессов должен идти от 0 до GetProcessCount -1. Указание индекса вне допустимого диапазона не является ошибкой - в этом случае функция возвращает пустую строку.


16.36.8. function TerminateProcess

function TerminateProcess(PID : dword):boolean;
Завершает процесс с указанным PID. Функция возвращает TRUE, если процесс с заданным PID найден и успешно завершен. При использовании данной функции следует учитывать, что после перезагрузки системы или перезапуска процесса его PID изменяется. Поэтому данную функцию рекомендуется применять совместно с функциями, позволяющими анализировать список процессов - см. пример .
Пример:
begin
TerminateProcess(1056);
end.


16.36.9. function TerminateProcessByName

function TerminateProcessByName(AName : string): boolean;
Останавливает все процессы, имя которых содержит указанный в AName образец. Применять данную функцию необходимо с разумной осторожностью, так как к примеру задание образца ".exe" приведет к остановке всех процессов и краху системы.
Пример:
begin
TerminateProcessByName('iexplore.exe');
end.


16.36.10. Пример

var
i : integer;
begin
// Обновление списка процессов
RefreshProcessList;
AddToLog('Количество процессов = '+IntToStr(GetProcessCount));
// Цикл анализа полученного списка
for i := 0 to GetProcessCount - 1 do begin
// Вывод PID процесса и его имя
AddToLog(IntToStr(GetProcessPID(i)) + ' '+ GetProcessName(i));
// Остановка процесса по условию
if pos('trojan.exe', LowerCase(GetProcessName(i))) > 0 then
TerminateProcess(GetProcessPID(i));
end;
end.
В примере использовались: AddToLog , GetProcessCount , GetProcessName , GetProcessPID , RefreshProcessList , TerminateProcess
Данный пример демонстрирует использование всех описанных выше функций для работы с процессам. Сначала при помощи функции RefreshProcessList производится обновление списка процессов. Затем производится просмотр списка в цикле с выводом информации в протокол.
Кроме того, производится завершение процессов, имя исполняемого файла которых содержит текст "trojan.exe" при помощи вызова TerminateProcess, которому передается идентификатор процесса (PID).


16.37. Сигнатурный анализатор файла

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.37. Сигнатурный анализатор файла
  • Предыдущая
  • Следующая

Содержание 16.37. Сигнатурный анализатор файла

16.37.1. function LoadFileToBuffer
16.37.2. function LoadFileToBufferEx
16.37.3. function FreeBuffer
16.37.4. function GetBufferSize
16.37.5. function GetBufferByte
16.37.6. function GetBufferWord
16.37.7. function GetBufferDWord
16.37.8. function GetBufferStr
16.37.9. function SearchSign
16.37.10. Пример реализации сигнатурного искателя


16.37.1. function LoadFileToBuffer

function LoadFileToBuffer(AFile : string) : boolean;
Производит загрузку файла с указанным именем в буфер для последующего изучения. В случае успешного выполнения операции возвращается true, в случае ошибки - false. Повторные вызовы не являются ошибкой - перед выполнение операции выделенный при предыдущем вызове буфер автоматически очищается. В имени файла допустимы макросы, подробнее см. в разделе " макросы, допустимые в именах файлов "
См. также: LoadFileToBufferEx , FreeBuffer , GetBufferSize , GetBufferByte , GetBufferWord , GetBufferDWord , GetBufferStr , SearchSign
Пример: см. в разделе " Пример реализации сигнатурного искателя "


16.37.2. function LoadFileToBufferEx

function LoadFileToBuffer(AFile : string; ARel : integer; ALen : integer) : boolean;
Производит загрузку файла с указанным именем в буфер для последующего изучения. Функция аналогична LoadFileToBuffer , но позволяет осуществить частичную загрузку файла. В имени файла AFile допустимы макросы, подробнее см. в разделе " макросы, допустимые в именах файлов "
В случае успешного выполнения операции возвращается true, в случае ошибки - false. Повторные вызовы не являются ошибкой - перед выполнение операции выделенный при предыдущем вызове буфер автоматически очищается.
ARel - смещение в файле. Если ARel равно 0, то загрузка идет с начала файла. Отрицательное значение ARel рассматривается как смещение от конца файла. Указание отрицательного смещения больше размера файла приведет к тому, что файл будет загружаться с начала. Указание положительного смещения больше размера файла является ошибкой и файл при этом не загружается
ALen - размер загружаемого буфера. Указание нулевого размера трактуется как "загрузить от указанного смещения до конца файла". Указание размера, при котором точка ARel + ALen выйдет за границу файла не является ошибкой - значение ARel автоматически исправляется таким образом, что идет загрузка от ARel и до конца файла.
См. также: LoadFileToBuffer , FreeBuffer , GetBufferSize , GetBufferByte , GetBufferWord , GetBufferDWord , GetBufferStr , SearchSign
Пример: см. в разделе " Пример реализации сигнатурного искателя "


16.37.3. function FreeBuffer

function FreeBuffer : boolean;
Выполняет освобождение памяти, выделенной в ходе успешного вызова LoadFileToBuffer. Повторный вызов не является ошибкой - при отсутствии буфера в памяти функция считает, что очистка прошла успешно.
См. также: LoadFileToBuffer , GetBufferSize
Пример: см. в разделе " Пример реализации сигнатурного искателя "


16.37.4. function GetBufferSize

function GetBufferSize : integer;
Возвращает размер буфера в байтах. Может применяться в случае организации нестандартных алгоритмов анализа буфера в цикле. В случае отсутствия буфера в памяти (т.е. еще не производилась загрузка данных или был вызов FreeBuffer) возвращается значение 0.
См. также: LoadFileToBuffer , FreeBuffer
Пример: см. в разделе " Пример реализации сигнатурного искателя "


16.37.5. function GetBufferByte

function GetBufferByte(ARel : integer) : byte;
Возвращает байт по указанному смещению. Задание недопустимого смещения не приведет к ошибке, но функция вернет значение 0.
См. также: LoadFileToBuffer , GetBufferSize
Пример: см. в разделе " Пример реализации сигнатурного искателя "


16.37.6. function GetBufferWord

function GetBufferWord(ARel : integer) : word;
Возвращает word (двух-байтное целое) по указанному смещению. Задание недопустимого смещения не приведет к ошибке, но функция вернет значение 0.
См. также: LoadFileToBuffer , GetBufferSize
Пример: см. в разделе " Пример реализации сигнатурного искателя "


16.37.7. function GetBufferDWord

function GetBufferDWord(ARel : integer) : dword;
Возвращает dword (четырех-байтное целое) по указанному смещению. Задание недопустимого смещения не приведет к ошибке, но функция вернет значение 0.
См. также: LoadFileToBuffer , GetBufferSize
Пример: см. в разделе " Пример реализации сигнатурного искателя "


16.37.8. function GetBufferStr

function GetBufferStr(ARel : integer; ALen : integer) : string;
Возвращает строку символов начиная от заданного смещения ARel. Отрицательные смещения рассматриваются как смещения относительно конца буфера. Длина строки задается параметром ALen, но реальная длинна определяется автоматически исходя из следующих критериев:
·В случае выхода точки ARel + ALen за пределы буфера длина ALen автоматически уменьшается таким образом, чтобы копировались данные от указанной позиции и до конца буфера
·В случае выхода точки ARel за левую границу буфера берется ARel = 0, за правую - возвращается пустая строка
·При обнаружении в строке символа с кодом 0 строка усекается до этой позиции
См. также: LoadFileToBuffer , FreeBuffer , GetBufferSize
Пример: см. в разделе " Пример реализации сигнатурного искателя "


16.37.9. function SearchSign

function SearchSign(ASign : string; ARel : integer; ALen : integer) : integer;
Основная функция анализатора. Производит поиск сигнатуры ASign начиная со смещения ARel в зоне длинной ALen.
ARel - смещение точки, с которой начинается поиск. Смещение отсчитывается с нуля, указание отрицательного смещения рассматривается как смещение от конца файла
ALen - длина. Указание нулевой длинны рассматривается как поиск от точки ARel до конца буфера
ASign - сигнатура. Сигнатура задается текстовой строкой, описывающей правила сигнатурного поиска. Сигнатура состоит из элементов, разделенных пробелами. Пробелы в начале и конце сигнатуры игнорируются.
Поддерживаются следующие типы элементов сигнатуры:
xx - байт должен быть равен xx, где xx - значение байта в шестнадцатеричном виде
Пример: "55 AA 45 21"
!xx- байт не равен xx, где xx - значение байта в шестнадцатеричном виде
Пример: "55 AA !45 21"
? - байт может иметь любое значение (по сути это пропуск байта при анализе). Указание данного элемента в начале и конце сигнатуры не имеет смысла, хотя не является ошибкой
Пример: "55 ? AA ? ? 45 21"
?nn - пропуск при анализе nn байт (по сути условие - "nn байт имеют произвольное значение"), где nn - количество пропускаемых байт в десятичном виде. Пример: 55 AA ?5 45 21 - данная сигнатура аналогична сигнатуре 55 AA ? ? ? ? ? 45 21
*xx - пропуск нескольких байт (от нуля до достижения границы анализируемой области) до обнаружения байта, равного xx. Пример: 55 AA *FF 25 14
~xx,yy - производит проверку условия <байт буфера> AND yy = xx. Данная операция позволяет сравнивать заданные биты в байте, а не весь байт целиком. Пробелы в данной конструкции (до и после запятой) недопустимы, т.к. пробел является разделителем элементов в сигнатуре
Пример: "55 ~0A,0F" - в данном случае расшифровка сигнатуры звучит как "первый байт равен 55, а младшая тетрада второго равна 0A" (выделение младшей тетрады происходит за счет операции "байт AND 0F")
См. также: LoadFileToBuffer , FreeBuffer , GetBufferSize
Пример: см. в разделе " Пример реализации сигнатурного искателя "


16.37.10. Пример реализации сигнатурного искателя

// Добавление сообщения в протокол
Procedure AddAlarm(AFileName, AMsg : string);
begin
AddtoLog('>>>>> '+AFileName+' подозрение на '+AMsg);
end;
// Сканирование файла
Procedure ScanFile(AFileName : string);
begin
SetStatusBarText(AFileName);
// Загрузка файла в буфер анализа
LoadFileToBuffer(AFileName);
// Поиск сигнатуры
if SearchSign('2E 61 64 2D 77 2D 61 2D 72 2D 65 2E 63 6F',-20000, 0) >= 0 then
AddAlarm(AFileName, 'Adware.Look2me');
// Освобождение памяти, занятой под буфер
FreeBuffer;
end;
// Сканирование папки (с рекурсивным обходом)
Procedure ScanDir(ADirName : string; AScanSubDir : boolean);
var
FS : TFileSearch;
begin
ADirName := NormalDir(ADirName);
FS := TFileSearch.Create(nil);
FS.FindFirst(ADirName + '*.*');
while FS.Found do begin
if FS.IsDir then begin
if AScanSubDir and (FS.FileName <> '.') and (FS.FileName <> '..') then
ScanDir(ADirName + FS.FileName, AScanSubDir)
end else
ScanFile(ADirName + FS.FileName);
FS.FindNext;
end;
FS.Free;
end;
begin
ScanDir('c:\', true);
end.
В примере использовались: AddtoLog , FreeBuffer , LoadFileToBuffer , NormalDir , SearchSign , SetStatusBarText


16.38. Работа с результатами исследования системы

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.38. Работа с результатами исследования системы
  • Предыдущая
  • Следующая

Работа с результатами исследования системы

Исследование системы собирает различную информацию об изучаемом компьютере и сохраняет ее в двух форматах - HTML (с интерактивными элементами) и XML (для автоматизированного анализа). Для решения ряда задач может возникнуть потребность в анализе собранных данных и выполнении некоторых действий на основании подобного анализа. Для решения этой задачи в скриптовой язык AVZ введен набор команд, позволяющих загрузить XML файл с данными последнего исследования из памяти или любой произвольный XML с диска для последующей обработки.

Содержание 16.38. Работа с результатами исследования системы

16.38.1. function SC_INIT
16.38.2. function SC_FREE
16.38.3. function SC_SelectNode
16.38.4. function SC_GetItemsCount
16.38.5. function SC_GetParamVal
16.38.6. function SC_GetTagName
16.38.7. function SC_SearchItem
16.38.8. Примеры


16.38.1. function SC_INIT

function SC_INIT(AFileName : string = '') : boolean;
Выполняет инициализацию системы обработки результатов исследования. В случае успешного выполнения возвращает TRUE, в случае ошибки - FALSE. Перед вызовом SC_INIT требуется выполнить исследование системы. Если в рамках скрипта имеется несколько вызовов SC_INIT, то в ходе работы данной функции будет при необходимости автоматически вызвана SC_FREE.
Параметр AFileName является необязательным и по умолчанию отсутствует. Его указание задет имя XML файла, который должен быть загружен для анализа - применение данного параметра позволяет анализировать любой протокол исследования системы, а не только последний лог исследования, полученный на данном компьютере.
На заметку: Первичное назначение системы - анализ XML логов исследования системы при помощи скриптов. Однако теоретически данный набор функций позволяет скрипту загрузить и обработать любой XML файл.
Совместимость: AVZ 4.28 и выше
Пример:
var
Res : boolean;
begin
Res := SC_INIT('C:\avz4\avz_sysinfo.xml');
if Res then
AddToLog('Загрузка и парсинг протокола выполнены успешно')
else
AddToLog('Ошибка загрузки и парсинга протокола');
end.
В данном примере производится загрузка существующего протокола исследования системы с жестко заданным именем, результативность загрузки отображается в протоколе.
var
Res : boolean;
begin
// Исследование системы
ExecuteSysCheck('test.htm');
// Загрузка и анализ результатов исследования
Res := SC_INIT;
if Res then
AddToLog('Парсинг протокола выполнен успешно')
else
AddToLog('Ошибка парсинга протокола');
end.
В данном примере выполняется исследование системы и затем собранные результаты загружаются в парсер для анализа, результативность загрузки отображается в протоколе.


16.38.2. function SC_FREE

function SC_FREE : boolean;
Освобождает ресурсы, выделенные в процессе работы SC_INIT. Рекомендуется вызвать данную функцию после завершения работы с данными, собранными в ходе исследования системы.
На заметку: после завершение работы скрипта AVZ в случае необходимости автоматически вызывает SC_FREE.
Совместимость: AVZ 4.28 и выше
Пример:
begin
// Исследование системы
ExecuteSysCheck('test.htm');
// Инициализация системы обработки результатов исследования
SC_INIT;
... обработка результатов исследования ...
// Освобождение ресурсов
SC_FREE;
end.


16.38.3. function SC_SelectNode

function SC_SelectNode(Anode : string) : boolean;
Выбирает один из тегов XML с заданным именем. Имя задается в виде "AVZ\имя_узла", имя не чувствительно к регистру. Например, для работы с данными о запущенных процессах требуется задать имя 'AVZ\Process', с расширениями проводника - "AVZ\ExplorerExt".
Функция возвращает TRUE, если успешно удалось найти запрошенные данные. В случае, если запрошенные данные не найдены, не инициализирован анализатор или не выполнялось исследование, то функция возвращает FALSE.
Совместимость: AVZ 4.28 и выше
Пример:
var
Res : boolean;
begin
Res := SC_INIT(GetAVZDirectory + 'LOG\avz_sysinfo.xml');
if Res then
AddToLog('Загрузка и парсинг протокола выполнены успешно')
else begin
AddToLog('Ошибка загрузки и парсинга протокола');
exit;
end;
if SC_SelectNode('AVZ\KERNELOBJ') then
AddToLog('Тег KERNELOBJ найден');
end.


16.38.4. function SC_GetItemsCount

function SC_GetItemsCount : integer;
Возвращает количество вложенных тегов данных в текущем теге XML базы. Если тег не выбран, то функция возвращает 0.
Совместимость: AVZ 4.28 и выше
Пример:
var
Res : boolean;
begin
Res := SC_INIT(GetAVZDirectory + 'LOG\avz_sysinfo.xml');
if Res then
AddToLog('Загрузка и парсинг протокола выполнены успешно')
else begin
AddToLog('Ошибка загрузки и парсинга протокола');
exit;
end;
if SC_SelectNode('AVZ\KERNELOBJ') then
AddToLog('Тег KERNELOBJ найден')
else begin
AddToLog('Тег KERNELOBJ не найден');
exit;
end;
// Запрос количества вложенных тегов
AddToLog('SC_GetItemsCount = '+inttostr(SC_GetItemsCount));
end.


16.38.5. function SC_GetParamVal

function SC_GetParamVal(AIndx : integer; AName, ADefVal : string) : string;
Возвращает значение параметра с именем AName тега с номером AIndx. Отсчет элементов идет с 0. Указание имени несуществующего параметра или индекса за пределами диапазона не является ошибкой - в этом случае функция возвращает значение ADefVal. Значение ADefVal также возвращается в случае, если у тега с индексом AIndx нет параметра с именем AName.
Для чтения параметров текущего тега (родительского для тегов данных) необходимо указать индекс равный -1.
Совместимость: AVZ 4.28 и выше
Пример:
var
Res : boolean;
i : integer;
begin
Res := SC_INIT(GetAVZDirectory + 'LOG\avz_sysinfo.xml');
if Res then
AddToLog('Загрузка и парсинг протокола выполнены успешно')
else begin
AddToLog('Ошибка загрузки и парсинга протокола');
exit;
end;
if SC_SelectNode('AVZ\KERNELOBJ') then
AddToLog('Тег KERNELOBJ найден')
else begin
AddToLog('Тег KERNELOBJ не найден');
exit;
end;
// Запрос количества вложенных тегов
AddToLog('SC_GetItemsCount = '+inttostr(SC_GetItemsCount));
// Вывод данных в цикле
for i := 0 to SC_GetItemsCount - 1 do
AddToLog('['+inttostr(i)+'] File= "'+SC_GetParamVal(i, 'File', '')+'"');
end.
В примере использовались: AddToLog , GetAVZDirectory , SC_GetItemsCount , SC_GetParamVal, SC_INIT , SC_SelectNode
В данном примере выполняется загрузка существующего протокола исследования из папки LOG, размещенной в рабочем каталоге AVZ, и вывод в цикле элементов значения параметра File всех тегов, для которых родительским является текущий тег, выбранный при помощи SC_SelectNode.


16.38.6. function SC_GetTagName

function SC_GetTagName(AIndx : integer) : string;
Возвращает имя тега с индексом AIndx. Имя возвращается в верхнем регистре. Индекс -1 применяется для получения имени родительского тега. В случае задания некорректного индекса или в случае возникновении ошибки функция возвращает пустую строку.
Совместимость: AVZ 4.28 и выше
Пример:
var
Res : boolean;
i : integer;
begin
Res := SC_INIT(GetAVZDirectory + 'LOG\avz_sysinfo.xml');
if Res then
AddToLog('Загрузка и парсинг протокола выполнены успешно')
else begin
AddToLog('Ошибка загрузки и парсинга протокола');
exit;
end;
if SC_SelectNode('AVZ\KERNELOBJ') then
AddToLog('Тег KERNELOBJ найден')
else begin
AddToLog('Тег KERNELOBJ не найден');
exit;
end;
// Запрос количества вложенных тегов
AddToLog('SC_GetItemsCount = '+inttostr(SC_GetItemsCount));
for i := 0 to SC_GetItemsCount - 1 do
if SC_GetTagName(i) = 'ITEM' then
AddToLog('['+inttostr(i)+'] File= "'+SC_GetParamVal(i, 'File', '')+'"');
end.


16.38.7. function SC_SearchItem

function SC_SearchItem(AName, AVal : string; AFullComp : boolean) : integer;
Поиск элемента по его значению. Выполняет поиск в текущем теге базы XML, обрабатываются значения параметров с именем AName, AVal - сравнение не чувствительно к регистру. AFullComp - параметр, управляющий режимом сравнения. Если он равен TRUE, то выполняется полное сравнение образца и значения параметра с именем AName, если он равен FALSE, то ищется вхождение AVal в значениях параметра с именем AName.
В случае успешного поиска функция возвращает индекс первой найденной записи, в случае отсутствия совпадений или ошибки - значение "-1".
На заметку: Данная функция предназначена для простейшего поиска. Для более сложного поиска (по нескольким параметрам и т.п.) следует организовать цикл от 0 до SC_GetItemsCount-1 и в нем проверять любые условия, получая значения параметров через SC_GetItem. Однако в случае, если поиск возможен через SC_SearchItem, то следует применять именно его, т.к. поиск через SC_SearchItem работает на порядок быстрее, чем аналогичный ему перебор элементов в цикле.
Совместимость: AVZ 4.28 и выше
Пример:
var
Res : boolean;
i : integer;
begin
Res := SC_INIT(GetAVZDirectory + 'LOG\avz_sysinfo.xml');
if Res then
AddToLog('Загрузка и парсинг протокола выполнены успешно')
else begin
AddToLog('Ошибка загрузки и парсинга протокола');
exit;
end;
if SC_SelectNode('AVZ\KERNELOBJ') then
AddToLog('Тег KERNELOBJ найден')
else begin
AddToLog('Тег KERNELOBJ не найден');
exit;
end;
// Запрос количества вложенных тегов
AddToLog('SC_GetItemsCount = '+inttostr(SC_GetItemsCount));
// Поиск тега
i := SC_SearchItem('File', 'AnyDVD', false);
if i >= 0 then
AddToLog('Найден драйвер AnyDVD - ['+inttostr(i)+'] File= "'+SC_GetParamVal(i, 'File', '')+'"');
end.
В примере использовались: AddToLog , GetAVZDirectory , SC_GetItemsCount , SC_GetParamVal, SC_INIT , SC_SearchItem , SC_SelectNode


16.38.8. Примеры

Задача: экспортировать список процессов в формате CSV для дальнейшего изучения. Для этой операции потребуется следующий скрипт:
function CreateCSVProcessReport(AReportFile : string) : boolean;
const
FieldSeparator = ';';
var
Lines : TStringList;
i : integer;
begin
Result := false;
if SC_INIT then begin
if SC_SelectNode('AVZ\PROCESS') then begin
Lines := TStringList.Create;
for i := 0 to SC_GetItemsCount - 1 do
if SC_GetTagName(i) = 'ITEM' then
Lines.Add(SC_GetParamVal(i, 'PID', '') + FieldSeparator +
SC_GetParamVal(i, 'File', '') + FieldSeparator +
SC_GetParamVal(i, 'CheckResult', '') + FieldSeparator +
SC_GetParamVal(i, 'MD5', '') + FieldSeparator
);
Lines.SaveToFile(AReportFile);
Lines.Free;
Result := true;
end else
AddToLog('[CSV] Ошибка: в результатах исследования нет данных о процессах');
SC_FREE;
end else
AddToLog('[CSV] Ошибка: данные исследования системы недоступны')
end;
begin
// Исследование системы - только процессы, отчет на диске не сохранять
ExecuteSysCheckEX('avz_rep.htm', 1, true, 1+2+8+16+32);
CreateCSVProcessReport('rep.csv');
end.
В примере использовались: AddToLog , ExecuteSysCheckEX , SC_FREE , SC_GetItemsCount , SC_GetParamVal, SC_GetTagName , SC_INIT , SC_SelectNode


16.39. Функции запроса статистики

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.39. Функции запроса статистики
  • Предыдущая
  • Следующая

Содержание 16.39. Функции запроса статистики

16.39.1. function GetSuspCount
16.39.2. function GetDetectedCount


16.39.1. function GetSuspCount

function GetSuspCount:integer;
Возвращает количество подозрительных файлов, обнаруженных в ходе последнего сканирования.
Пример:
begin
// Использовать карантин
SetupAVZ('UseQuarantine=Y');
// Запуск сканирования
RunScan;
// Что-то подозрительное ??
if GetSuspCount > 0 then begin
// Выполнение исследования системы
ExecuteSysCheck(GetAVZDirectory + 'syscheck.htm');
// Сохранение архива с файлами карантина
CreateQurantineArchive(GetAVZDirectory+'quarantine.zip');
end;
end;


16.39.2. function GetDetectedCount

function GetDetectedCount:integer;
Возвращает количество детектированных вредоносных файлов, обнаруженных в ходе последнего сканирования.
Пример:
begin
// Использовать карантин
SetupAVZ('UseQuarantine=Y');
// Запуск сканирования
RunScan;
// Что-то продетектировано ??
if GetDetectedCount > 0 then begin
// Выполнение исследования системы
ExecuteSysCheck(GetAVZDirectory + 'syscheck.htm');
// Сохранение архива с файлами карантина
CreateQurantineArchive(GetAVZDirectory+'quarantine.zip');
end;
end;
В примере использовались: CreateQurantineArchive , ExecuteSysCheck , GetAVZDirectory , RunScan , SetupAVZ


16.40. Обработка параметров командной строки

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.40. Обработка параметров командной строки
  • Предыдущая
  • Следующая

Содержание 16.40. Обработка параметров командной строки

16.40.1. function GetParamCount
16.40.2. function GetParamStr
16.40.3. function GetParamByName
16.40.4. Пример обработки параметров


16.40.1. function GetParamCount

function GetParamCount:integer;
Возвращает количество параметров, переданных пользователем в командной строке.
Использование функции продемонстрировано в примере


16.40.2. function GetParamStr

function GetParamStr(AParamId:integer) : string;
Возвращает параметр с указанным номером или пустую строку, если номер параметра вне диапазона.
Параметры нумеруются с 1, запрос параметра 0 возвращает полное имя исполняемого файла AVZ.
Использование функции продемонстрировано в примере


16.40.3. function GetParamByName

function GetParamByName(AParamName:string) : string;
Возвращает значение параметра, найденного по имени. Для использования данной функции необходимо передавать параметры в формате имя=значение. Если параметр не найден, то возвращается пустая строка. Если среди параметров встречается несколько параметров с одинаковым именем, то функция возвращает значение первого из них.
Совместимость: AVZ 4.26 и выше
Пример:
begin
AddToLog(GetParamByName('test'));
end.
На заметку:
Данную функцию удобно применять для передачи параметров скриптам - в этом случае можно не модифицируя код скрипта изменять его поведение. Для исключения совпадения параметров пользователя с параметрами AVZ рекомендуется именам своих параметров командной строки присваивать префиксы, давая параметрам имена типа типа "usr_test".


16.40.4. Пример обработки параметров

Пример скрипта, выводящего в протокол все параметры командной строки AVZ:
var
i : integer;
begin
AddToLog('ParamCount = ' + IntToStr(GetParamCount));
for i := 1 to GetParamCount do
AddToLog(' Param[' + IntToStr(i) + '] = "' + GetParamStr(i) + '"');
end.
В примере использовались: AddToLog , GetParamCount , GetParamStr


16.41. Работа со строками

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.41. Работа со строками
  • Предыдущая
  • Следующая

Содержание 16.41. Работа со строками

16.41.1. function StringReplace
16.41.2. function Pos
16.41.3. procedure Insert
16.41.4. procedure Delete
16.41.5. function Copy
16.41.6. function Length
16.41.7. function Trim
16.41.8. function UpperСase
16.41.9. function LowerСase
16.41.10. function Chr
16.41.11. function Ord
16.41.12. Преобразования в строку
16.41.13. Преобразования из строки


16.41.1. function StringReplace

function StringReplace(S, OldPattern, NewPattern: string) : string;
Возвращает строку S, в которой все вхождения OldPattern заменены на NewPattern. Сравнение при поиске OldPattern ведется без учета регистра символов.
Пример:
begin
AddToLog(StringReplace('У попа была кошка', 'кошка', 'собака'));
end.


16.41.2. function Pos

function Pos(SubStr, S: String): Integer;
Возвращает позицию подстроки substr в строке S. Поиск подстроки ведется с учетом регистра символов. Если поиск подстроки успешен, то возвращается номер первого символа первого вхождения SubStr в строке S. Если поиск неуспешен, то функция возвращает 0.
begin
AddToLog(IntToStr(Pos('кошка', 'У попа была собака')));
AddToLog(IntToStr(Pos('собака', 'У попа была собака' )));
end.


16.41.3. procedure Insert

procedure Insert(S: String; var S2: String; pos: Integer);
Вставляет строку S в позицию pos строки S2.
Пример:
var
S : string;
begin
S := 'У попа собака';
Insert('была ', S, 8);
AddToLog(S);
end.


16.41.4. procedure Delete

procedure Delete(var s: String; from, count: Integer);
Удаляет из строки S несколько символов начиная с позиции from, количество удаляемых символов задается параметром count.
var
S : string;
begin
S := 'У попа была кошка или собака';
Delete(S, 12, 10);
AddToLog(S);
end.


16.41.5. function Copy

function Copy(s: String; from, count: Integer): String;
Возвращает фрагмент строки S длиной count символов начиная с позиции from. Указание некорректных значений from и count приводит к тому, что возвращается пустая строка.
Пример:
begin
AddToLog(Copy('У попа была кошка или собака', 13, 5));
end.


16.41.6. function Length

function Length(s: string): Integer;
Возвращает длину строки s.
Пример:
begin
AddToLog(InttoStr(Length('У попа была собака')));
end.


16.41.7. function Trim

function Trim(s: String): String;
Возвращает строку s, в которой удалены все пробелы и спецсимволы в начале и конце.
Пример:
begin
AddToLog(Trim(' test '));
end.


16.41.8. function UpperСase

function UpperСase(s: String): String;
Возвращает строку s, приведенную к верхнему регистру.
Пример:
begin
AddToLog(UpperСase('Test Тест'));
end.


16.41.9. function LowerСase

function LowerCase(s: String): String;
Возвращает строку s, приведенную к нижнему регистру.
Пример:
begin
AddToLog(LowerCase('Test Тест'));
end.


16.41.10. function Chr

function Chr(CharCode: Integer): Char;
Возвращает символ с кодом CharCode. При указании кодов от 0 до 255 ($FF) возвращаются символы ASCII, для значений больше 255 - символы Unicode


AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.41. Работа со строками
  • 16.41.11. function Ord
  • Предыдущая
  • Следующая

16.41.11. function Ord

function Ord(ch: Char): Integer;
Возвращает ASCII код заданного символа


16.41.12. Преобразования в строку

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.41. Работа со строками
  • 16.41.12. Преобразования в строку
  • Предыдущая
  • Следующая

Содержание 16.41.12. Преобразования в строку

16.41.12.1. function IntToStr
16.41.12.2. function IntToHex
16.41.12.3. function FloatToStr
16.41.12.4. function DateToStr
16.41.12.5. function TimeToStr
16.41.12.6. function DateTimeToStr
16.41.12.7. function FormatFloat
16.41.12.8. function FormatDateTime


16.41.12.1. function IntToStr

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.41. Работа со строками
  • 16.41.12. Преобразования в строку
  • 16.41.12.1. function IntToStr
  • Предыдущая
  • Следующая

16.41.12.1. function IntToStr

function IntToStr(i: Integer): String;
Преобразует целое число в строку.
Пример:
begin
AddToLog(IntToStr(10)); // Возвращает строку "10"
end.


16.41.12.2. function IntToHex

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.41. Работа со строками
  • 16.41.12. Преобразования в строку
  • 16.41.12.2. function IntToHex
  • Предыдущая
  • Следующая

16.41.12.2. function IntToHex

function IntToHex(Value: Integer; Digits: Integer): string;
Функция преобразует целое число в строку в HEX формате, параметр Digits задает количество цифр при форматировании числа. Если задать Digits равным нулю или меньшим, чем требуется для корректного представления числа в HEX формате, то будет использовано столько разрядов, сколько требуется для корректного преобразования числа в строку.
Пример:
begin
AddToLog(IntToHEX(12345, 8));
AddToLog(IntToHEX(12345, 0));
end.
Выполнение данного скрипта приведет к выводу в протокол строк "00003039" и "3039".


16.41.12.3. function FloatToStr

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.41. Работа со строками
  • 16.41.12. Преобразования в строку
  • 16.41.12.3. function FloatToStr
  • Предыдущая
  • Следующая

16.41.12.3. function FloatToStr

function FloatToStr(e: Extended): String;
Преобразует число с плавающей точкой в строку.
Пример:
begin
AddToLog(FloatToStr(123.67)); // Возвращает строку "123.67"
end.


16.41.12.4. function DateToStr

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.41. Работа со строками
  • 16.41.12. Преобразования в строку
  • 16.41.12.4. function DateToStr
  • Предыдущая
  • Следующая

16.41.12.4. function DateToStr

function DateToStr(e: Extended): String;
Преобразует дату в строку. При форматировании даты используется стандартная системная форматная маска.
Примеры:
begin
AddToLog('Дата завершения сканирования: '+DateToStr(Now));
end.
begin
SaveLog(GetAVZDirectory+'\LOG\'+GetComputerName+'_'+
DateToStr(Now)+'_log.txt');
end.
В примере использовались: GetAVZDirectory , GetComputerName , SaveLog


16.41.12.5. function TimeToStr

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.41. Работа со строками
  • 16.41.12. Преобразования в строку
  • 16.41.12.5. function TimeToStr
  • Предыдущая
  • Следующая

16.41.12.5. function TimeToStr

function TimeToStr(e: Extended): String;
Преобразует время в строку. При форматировании времени используется стандартная системная форматная маска.
Пример:
begin
AddToLog('Время завершения сканирования: '+TimeToStr(Now));
end.


16.41.12.6. function DateTimeToStr

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.41. Работа со строками
  • 16.41.12. Преобразования в строку
  • 16.41.12.6. function DateTimeToStr
  • Предыдущая
  • Следующая

16.41.12.6. function DateTimeToStr

function DateTimeToStr(e: Extended): String;
Преобразует дату/время в строку. При форматировании даты и времени используется стандартная системная форматная маска.
Пример:
begin
AddToLog('Сканирование завершено: '+DateTimeToStr(Now));
end.


16.41.12.7. function FormatFloat

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.41. Работа со строками
  • 16.41.12. Преобразования в строку
  • 16.41.12.7. function FormatFloat
  • Предыдущая
  • Следующая

16.41.12.7. function FormatFloat

function FormatFloat(Fmt: String; Value: Extended): String;
Форматирует значение Value в соответствии с маской Fmt. Указание пустой маски не является ошибкой - функция сработает с форматной маской по умолчанию и будет эквивалентна FormatFloat. Вместо одной маски можно указать три, разделяя их ; - для форматирования положительных, отрицательных и нулевых значений.
В маске допустимы следующие символы:
0 - одна цифра числа. Если при форматировании на данном для данного знакоместа нет цифры, то в данной позиции выводится "0"
# - одна цифра числа. Если при форматировании на данном для данного знакоместа нет цифры, то в данной позиции ничего не выводится
, - разделитель тысяч
. - десятичная точка
Пример:
begin
AddToLog( FormatFloat('#', 1234.567) ); // Выводит "1235"
AddToLog( FormatFloat('#.00', 1234.567) ); // Выводит "1234.57"
AddToLog( FormatFloat('00000000.00', 1234.567) ); // Выводит "00001234.57"
AddToLog( FormatFloat('00000000', 1234.567) ); // Выводит "00001235"
AddToLog( FormatFloat('###,###,###.##', 1234.567) ); // Выводит "1 234.57"
end.


16.41.12.8. function FormatDateTime

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.41. Работа со строками
  • 16.41.12. Преобразования в строку
  • 16.41.12.8. function FormatDateTime
  • Предыдущая
  • Следующая

16.41.12.8. function FormatDateTime

function FormatDateTime(Fmt: String; DateTime: TDateTime): String;
Форматирует дату и время согласно заданной в Fmt форматной маске, что отличает ее от функций DateToStr , TimeToStr и DateTimeToStr , которые используют системные настройки.
В форматной маске допустимы символы:
d - день без предшествующих нулей
dd - день с предшествующими нулями
ddd - короткое символьное название дня недели в текущей локализации (двух-буквенное сокращение, например "Пн")
dddd - длинное символьное название дня недели в текущей локализации (например "понедельник")
m - месяц без предшествующих нулей (1, 2 ... 12)
mm - месяц c предшествующими нулями (01, 02 ... 12)
mmm - короткое название месяца в текущей локализации (трех буквенное сокращение, например "июл")
mmmm - длинное название месяца в текущей локализации (например - "Июль")
yy - последние две цифры года
yyyy - год в четырехзначном формате (например - 2009)
h - часы без предшествующих нулей (1, 2 ... 24)
hh - часы с предшествующими нулями (01, 02 ... 24)
n - минуты без предшествующих нулей (1, 2 ... 59)
nn - минуты с предшествующими нулями (01, 02 ... 59)
s - секунды без предшествующих нулей (1, 2 ... 59)
ss - секунды с предшествующими нулями (01, 02 ... 59)
z - отображение миллисекунд времени без предшествующих нулей (1, 2 ... 999)
zzz - отображение миллисекунд времени с предшествующими нулями (001, 002 ... 999)
a/p - не отображается, но указание данной константы в маске переключает отображение времени в 12-часовой режим с добавлением суффикса AM/PM
/ - отображает системный разделитель даты
: - отображает системный разделитель времени
"x" - символы в кавычках (один или несколько) не считаются маской и отображаются "как есть"
Пример:
begin
AddToLog(FormatDateTime('dd.mm.yyyy',now));
AddToLog(FormatDateTime('dd mmmmm yyyy',now));
AddToLog(FormatDateTime('hh:mm',now));
AddToLog(FormatDateTime('"дата: "dd mmmmm yyyy", время: "hh:mm:ss',now));
end.


16.41.13. Преобразования из строки

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.41. Работа со строками
  • 16.41.13. Преобразования из строки
  • Предыдущая
  • Следующая

Содержание 16.41.13. Преобразования из строки

16.41.13.1. function StrToInt
16.41.13.2. function StrToFloat
16.41.13.3. function ValidInt
16.41.13.4. function ValidFloat
16.41.13.5. function ValidDate
16.41.13.6. function StrToDate
16.41.13.7. function StrToTime
16.41.13.8. function StrToDateTime


16.41.13.1. function StrToInt

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.41. Работа со строками
  • 16.41.13. Преобразования из строки
  • 16.41.13.1. function StrToInt
  • Предыдущая
  • Следующая

16.41.13.1. function StrToInt

function StrToInt(S: string): Integer;
Преобразует строку в целое число. В случае, если указано некорректное символьное представление числа, работа скрипта будет прервана по ошибке. Поэтому рекомендуется пользоваться конструкцией try-except или функцией ValidInt
Пример:
begin
AddToLog(IntToStr(StrToInt('12345')));
end.


16.41.13.2. function StrToFloat

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.41. Работа со строками
  • 16.41.13. Преобразования из строки
  • 16.41.13.2. function StrToFloat
  • Предыдущая
  • Следующая

16.41.13.2. function StrToFloat

function StrToFloat(S: String): Extended;
Преобразует строку в число с плавающей точкой. В случае, если указано некорректное символьное представление числа, работа скрипта будет прервана по ошибке. Поэтому рекомендуется пользоваться конструкцией try-except или функцией ValidFloat
Пример:
begin
AddToLog(FloatToStr(StrToFloat('12345.67')));
end.
Начиная с версии AVZ 5.0 алгоритм работы функции несколько изменен - разделителем целой и дробной части числа теперь является и точка, и запятая. В итоге корректно распознается как число '123.45', так и '123,45', независимо от региональных настроек. В предыдущих версиях могла возникать ошибка. Аналогично доработана и функция ValidFloat


16.41.13.3. function ValidInt

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.41. Работа со строками
  • 16.41.13. Преобразования из строки
  • 16.41.13.3. function ValidInt
  • Предыдущая
  • Следующая

16.41.13.3. function ValidInt

function ValidInt(S: string): Boolean;
Возвращает TRUE, если строка S содержит корректное символьное представление целого числа.
Пример:
begin
if ValidInt('123.55') then
AddToLog('true')
else
AddToLog('false');
if ValidInt('123') then
AddToLog('true')
else
AddToLog('false');
end.


16.41.13.4. function ValidFloat

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.41. Работа со строками
  • 16.41.13. Преобразования из строки
  • 16.41.13.4. function ValidFloat
  • Предыдущая
  • Следующая

16.41.13.4. function ValidFloat

function ValidFloat(S: string): Boolean;
Возвращает TRUE, если строка S содержит корректное символьное представление числа c плавающей точкой.
Пример:
begin
if ValidFloat('123.55') then
AddToLog('true')
else
AddToLog('false');
if ValidFloat('123 55') then
AddToLog('true')
else
AddToLog('false');
end.
В версии 5.0 алгоритм работы функции несколько изменен - разделителем целой и дробной части числа теперь является и точка, и запятая (в итоге корректно распознается как число '123.45', так и '123,45').


16.41.13.5. function ValidDate

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.41. Работа со строками
  • 16.41.13. Преобразования из строки
  • 16.41.13.5. function ValidDate
  • Предыдущая
  • Следующая

16.41.13.5. function ValidDate

function ValidDate(S: string): boolean;
Возвращает TRUE, если строка S содержит корректное символьное представление даты.
Пример:
begin
if ValidDate('1.02.2021') then
AddToLog('true')
else
AddToLog('false');
if ValidDate('32.02.2021') then
AddToLog('true')
else
AddToLog('false');
end.
В примере использовались: AddToLog


16.41.13.6. function StrToDate

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.41. Работа со строками
  • 16.41.13. Преобразования из строки
  • 16.41.13.6. function StrToDate
  • Предыдущая
  • Следующая

16.41.13.6. function StrToDate

function StrToDate(s: String): TDateTime;
Преобразует строку в значение даты. В случае, если строка не содержит корректную дату, возникнет исключение (в частности, если указать полную дату типа '05.02.2021 12:15:30', то возникнет исключение).
Пример:
var
TestDate : TDateTime;
begin
TestDate := StrToDate('05.02.2021');
AddToLog(DateToStr(TestDate))
end.
В примере использовались: AddToLog , DateToStr


16.41.13.7. function StrToTime

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.41. Работа со строками
  • 16.41.13. Преобразования из строки
  • 16.41.13.7. function StrToTime
  • Предыдущая
  • Следующая

16.41.13.7. function StrToTime

function StrToTime(s: String): TDateTime;
Преобразует строку в значение времени. В случае, если строка не содержит корректное время, возникнет исключение (в частности, если указать полную дату типа '05.02.2021 12:15:30', то возникнет исключение).
Пример:
var
TestDate : TDateTime;
begin
TestDate := StrToTime('12:15:30');
AddToLog(TimeToStr(TestDate))
end.
В примере использовались: AddToLog , TimeToStr


16.41.13.8. function StrToDateTime

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.41. Работа со строками
  • 16.41.13. Преобразования из строки
  • 16.41.13.8. function StrToDateTime
  • Предыдущая
  • Следующая

16.41.13.8. function StrToDateTime

function StrToDateTime(s: String): TDateTime;
Преобразует строку в значение даты и времени. В случае, если строка не содержит корректное дату и время, возникнет исключение.
Пример:
var
TestDate : TDateTime;
begin
TestDate := StrToDateTime('05.02.2021 12:15:30');
AddToLog(DateTimeToStr(TestDate))
end.
В примере использовались: AddToLog , DateTimeToStr


16.42. Работа с числами

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.42. Работа с числами
  • Предыдущая
  • Следующая

Содержание 16.42. Работа с числами

16.42.1. function Round
16.42.2. function Trunc
16.42.3. function Int
16.42.4. function Frac
16.42.5. function Sqrt
16.42.6. function Abs
16.42.7. procedure Inc
16.42.8. procedure Dec
16.42.9. procedure Randomize
16.42.10. function Random


16.42.1. function Round

function Round(e: Extended): Integer;
Выполняет округление до целого по правилам округления.
Пример:
begin
AddToLog(IntToStr(Round(125.67))); // Возвращает "126"
end.
В примере использовались: AddToLog


16.42.2. function Trunc

function Trunc(e: Extended): Integer;
Возвращает целую часть числа. Важно отметить, что в отличие от округления данная функция отбрасывает дробную часть, не используя правила округления. Аналогична функции Int.
Пример:
begin
AddToLog(IntToStr(Trunc(125.67))); // Возвращает "125"
end.
В примере использовались: AddToLog


16.42.3. function Int

function Int(e: Extended): Integer;
Возвращает целую часть числа. Важно отметить, что в отличие от округления данная функция отбрасывает дробную часть, не используя правила округления
Пример:
begin
AddToLog(IntToStr(Int(125.67))); // Возвращает "125"
end.
В примере использовались: AddToLog


16.42.4. function Frac

function Frac(X: Extended): Extended;
Возвращает дробную часть числа.
Пример:
begin
AddToLog(FloatToStr(Frac(125.67))); // Возвращает "0.67"
end.
В примере использовались: AddToLog


16.42.5. function Sqrt

function Sqrt(e: Extended): Extended;
Возвращает квадратный корень заданного числа.
Пример:
begin
AddToLog(FloatToStr(Sqrt(16))); // Возвращает "4"
end.
В примере использовались: AddToLog


16.42.6. function Abs

function Abs(e: Extended): Extended;
Возвращает абсолютное значение числа
Пример:
begin
AddToLog(FloatToStr(abs(10))); // Возвращает "10"
AddToLog(FloatToStr(abs(-10))); // Возвращает "10"
end.
В примере использовались: AddToLog


16.42.7. procedure Inc

procedure Inc(var i: Integer; incr: Integer = 1);
Осуществляет инкремент целочисленной переменной i. По умолчанию инкремент ведется на единицу, но возможен инкремент на любое заданное значение.
Пример:
var
i : integer;
begin
i := 0;
inc(i);
inc(i, 5);
AddToLog(IntToStr(i));
end.
В примере использовались: AddToLog


16.42.8. procedure Dec

procedure Dec(var i: Integer; incr: Integer = 1);
Осуществляет декремент целочисленной переменной i. По умолчанию декремент ведется на единицу, но возможен декремент на любое заданное значение.
Пример:
var
i : integer;
begin
i := 25;
dec(i);
dec(i, 5);
AddToLog(IntToStr(i));
end.
В примере использовались: AddToLog


16.42.9. procedure Randomize

procedure Randomize;
Инициализирует генератор случайных чисел. Данная операция необязательная, так как выполняется автоматически перед запуском скрипта.
Пример:
begin
Randomize;
AddToLog(FloatToStr(Random));
end.
В примере использовались: AddToLog


16.42.10. function Random

function Random: Extended;
Осуществляет генерацию случайного числа в диапазоне от 0 до 1. В случае, если требуется генерация целых случайных чисел, следует применять функцию округления и умножения.
Пример:
begin
Randomize;
AddToLog(FloatToStr(Random));
AddToLog(IntToStr(Round(Random*10000)));
end.
В примере использовались: AddToLog


16.43. Работа с датами и временем

Для работы с датой и временем предусмотрена переменные типа TDate, TDateTime, TTime. С технической точки зрения кроме названия между ними нет никакой разницы, это число с плавающей запятой типа Extended, содержащее количество дней от базовой точки 30.12.1899. По этой причине с датами возможны стандартные арифметические операции типа сложения и вычитания.
Функции для преобразования даты в строку и наоборот описаны в соответствующих разделах работы со строками:
  • •
    DateToStr
  • •
    TimeToStr
  • •
    DateTimeToStr
  • •
    FormatDateTime
  • •
    ValidDate
  • •
    StrToDate
  • •
    StrToTime
  • •
    StrToDateTime

Содержание 16.43. Работа с датами и временем

16.43.1. function Now
16.43.2. function Date
16.43.3. function Time
16.43.4. function EncodeDate
16.43.5. function EncodeTime
16.43.6. procedure DecodeDate
16.43.7. procedure DecodeTime
16.43.8. function DayOfWeek
16.43.9. function DaysInMonth


AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.43. Работа с датами и временем
  • 16.43.1. function Now
  • Предыдущая
  • Следующая

16.43.1. function Now

function Now: TDateTime;
Возвращает текущую дату и время.
begin
AddToLog(DateTimeToStr(Date));
end.


16.43.2. function Date

function Date: TDateTime;
Возвращает только текущую дату, без времени (т.е. время в такой дате всегда будет равно 00:00:00)
Пример:
begin
AddToLog(DateToStr(Date));
end.
В примере использовались: AddToLog , DateToStr


16.43.3. function Time

function Time: TDateTime;
Возвращает только текущее время, без даты (т.е. датой будет нулевой день от базовой точки отсчета, что соответствует 30.12.1899).
Пример:
begin
AddToLog(TimeToStr(Time));
end.


16.43.4. function EncodeDate

function EncodeDate(Year, Month, Day: Word): TDateTime;
Собирает дату из отдельных значений дня, месяца и года.
Пример:
var
TestDate : TDateTime;
begin
TestDate := EncodeDate(2021, 02, 05);
AddToLog(DateToStr(TestDate));
end.
В примере использовались: AddToLog , DateToStr


16.43.5. function EncodeTime

function EncodeTime(Hour, Min, Sec, MSec: Word): TDateTime;
Собирает время из значения часов, минут, секунд и миллисекунд.
Пример:
var
TestDate : TDateTime;
begin
TestDate := EncodeTime(14, 25, 05, 00);
AddToLog(TimeToStr(TestDate));
end.


16.43.6. procedure DecodeDate

procedure DecodeDate(Date: TDateTime; var Year, Month, Day: Word);
Выделяет из указанной даты день, месяц и год.
Пример:
var
Year, Month, Day: Word;
begin
DecodeDate(Now, Year, Month, Day);
AddToLog('Year=' + IntToStr(Year));
AddToLog('Month=' + IntToStr(Month));
AddToLog('Day=' + IntToStr(Day));
end.


16.43.7. procedure DecodeTime

procedure DecodeTime(Time: TDateTime; var Hour, Min, Sec, MSec: Word);
Извлекает из указанного времени часы, минуты, секунды и миллисекунды. В качестве первого параметра можно указывать полную дату, это не является ошибкой, день, месяц и год будут проигнорированы.
Пример:
var
Hour, Min, Sec, MSec: Word;
begin
DecodeTime(Now, Hour, Min, Sec, MSec);
AddToLog('Hour=' + IntToStr(Hour));
AddToLog('Min=' + IntToStr(Min));
AddToLog('Sec=' + IntToStr(Sec));
AddToLog('MSec=' + IntToStr(MSec));
end.


16.43.8. function DayOfWeek

function DayOfWeek(aDate: TDateTime): Integer;
Возвращает текущий день недели (1-воскресенье, 2-понедельник ... 7-суббота).
Пример:
begin
AddToLog(IntToStr(DayOfWeek(Now+2)));
end.
В данном примере также демонстрируется использование арифметических операций с датами - к текущей дате прибавляется два дня.


16.43.9. function DaysInMonth

function DaysInMonth(nYear, nMonth: Integer): Integer;
Возвращает количество дней в заданном месяце.
Пример:
var
Year, Month, Day: Word;
begin
DecodeDate(Now, Year, Month, Day);
AddToLog('DaysInMonth=' +
IntToStr(DaysInMonth(Year,Month))
);
end.


16.44. Передача оповещения администратору

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.44. Передача оповещения администратору
  • Предыдущая
  • Следующая

Содержание 16.44. Передача оповещения администратору

16.44.1. function SendNetMessage
16.44.2. function SendSyslogMessage
16.44.3. function SendEmailMessage


16.44.1. function SendNetMessage

function SendNetMessage(AHost, AFromSt, AToSt, AMessageSt: string) : boolean;
Отправляет сообщение по сети, аналог NET SEND.
Параметры:
·AHost - имя хоста, которому передается сообщение
·AFromSt - поле "От кого"
·AToSt - поле "Кому"
·AMessageSt - текст сообщения.
Значения параметров AFromSt, AToSt, AMessageSt могут содержать русские буквы, но в этом случае не гарантируется корректное отображение сообщения.
Пример:
begin
// Запуск сканирования
RunScan;
// Что-то подозрительное ??
if (GetSuspCount > 0) or (GetDetectedCount > 0) then begin
SendNetMessage('Monitoring', 'AVZ', 'Admin',
'Report from computer "' + GetComputerName + '" '+
'SuspCount = ' + InttoStr(GetSuspCount) + ', '
'DetectedCount = ' + InttoStr(GetDetectedCount)
);
end;
end.
В примере использовались: GetComputerName , GetDetectedCount , GetSuspCount , RunScan


16.44.2. function SendSyslogMessage

function SendSyslogMessage(AHost, AMessageSt: string) : boolean;
Отправляет сообщение стандартной службе Syslog (порт 514 UDP) на указанном сервере, удобно для регистрации различных событий
Пример:
begin
// Запуск сканирования
RunScan;
// Что-то подозрительное ??
if (GetSuspCount > 0) or (GetDetectedCount > 0) then begin
SendSysLogMessage('172.20.97.28',
'Report from computer "' + GetComputerName + '" '+
'SuspCount = ' + InttoStr(GetSuspCount) + ', '
'DetectedCount = ' + InttoStr(GetDetectedCount)
);
end;
end.
В примере использовались: GetComputerName , GetDetectedCount , GetSuspCount , RunScan


16.44.3. function SendEmailMessage

function SendEmailMessage(AServer, AFrom, ARecipients, ASubject, AMessageSt: string;
AIdentification : boolean;
ALogin, APasswd : string;
AAttachFile1, AAttachFile2, AAttachFile3 : string) : boolean;
Данная функция производит отправку письма под управлением скрипта.
Параметры функции:
AServer - имя или IP адрес почтового сервера, через который производится отправка письма
AFrom - значение поля "От кого"
ARecipients - список получателей
ASubject - тема письма
AMessageSt - текст сообщения, может содержать символы перевода строки
AIdentification - режим аутентификации. Если передается false, то аутентификация на сервере не производится и значение параметров ALogin и APasswd игнорируются. Если передается true, то аутентификация производится и параметры ALogin и APasswd должны быть заполнены.
ALogin - имя пользователя для авторизации на почтовом сервере
APasswd - пароль пользователя для авторизации на почтовом сервере
AAttachFile1, AAttachFile2, AAttachFile3 - имена файлов, которые должны быть приложены к письму. Передача пустого имени означает, что вложение не требуется.
Пример:
begin
// Использовать карантин
SetupAVZ('UseQuarantine=Y');
// Запуск сканирования
RunScan;
// Что-то подозрительное ??
if (GetSuspCount > 0) or (GetDetectedCount > 0) then begin
// Выполнение исследования системы
ExecuteSysCheck(GetAVZDirectory + 'syscheck.htm');
// Сохранение архива с файлами карантина
CreateQurantineArchive(GetAVZDirectory+'quarantine.zip');
// Отправка письма
SendEmailMessage('mail.my_mail_server.ru', 'AVZ', 'my_mail@mail.ru',
'AVZ email alert',
'Report from computer "' + GetComputerName + '" '+#13 +
'SuspCount = ' + InttoStr(GetSuspCount) + #13 +
'DetectedCount = ' + InttoStr(GetDetectedCount) ,
false, '', '',
GetAVZDirectory + 'syscheck.zip',
GetAVZDirectory + 'quarantine.zip',
''
);
end;
end.
В примере использовались: CreateQurantineArchive , ExecuteSysCheck , GetAVZDirectory , GetComputerName , GetDetectedCount , GetSuspCount , RunScan , SendEmailMessage , SetupAVZ


16.45. Работа с Интернет

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.45. Работа с Интернет
  • Предыдущая
  • Следующая

Содержание 16.45. Работа с Интернет

16.45.1. function DownloadFile
16.45.2. function FTPSendFile
16.45.3. function GetHostByName
16.45.4. function Ping


16.45.1. function DownloadFile

function DownloadFile(AURL, ASaveName : string;
ADownloadMode : integer = 0;
AProxyServer : string='';
AProxyLogin : string='';
AProxyPasswd : string='');
Осуществляет загрузку файла из Интернет. Параметры (первые два обязательны, остальные - необязательные):
AURL - URL загрузки включая протокол, например http://www.myserver.ru/myfile.txt
ASaveName - имя, под которым файл сохраняется на диске в случае успешной загрузки. Параметр обязателен, диск должен быть доступен на запись, а указанный каталог должен существовать на диске. В имени файла допустимо указывать макросы
ADownloadMode - код режима загрузки файла. Необязательный параметр, по умолчанию 0. Поддерживаются следующие коды:
0 - загрузка по настройкам Internet Explorer
1 - прямой доступ в Интернет, настройки IE игнорируются
2 - загрузка через прокси сервер без авторизации. Для корректной работы данного режима необходимо указать прокси в параметре AProxyServer
3 - загрузка через прокси сервер с авторизацией. Для корректной работы данного режима необходимо указать прокси в параметре AProxyServer и задать логин и пароль в параметрах AProxyLogin и AProxyPasswd
4 - загрузка через прокси сервер с NTLM авторизацией. Для корректной работы данного режима необходимо указать прокси в параметре AProxyServer и задать логин и пароль в параметрах AProxyLogin и AProxyPasswd
Прокси-сервер для режимов 2-4 задается в формате IP_адрес:порт
Функция возвращает true в случае успешной загрузки и False в случае ошибки. Следует отметить, что при указании имени несуществующего файла многие сайты вместо ошибки возвращают HTML страницу с сообщением об ошибке. В таком случае функция вернет true, но вместо необходимого файлам мы получим HTML код страницы ошибки. Следовательно, для надежного определения успешности загрузки следует проверять размер и контрольную сумму принятого файла, для чего пригодятся функции CalkFileMD5 , CalkFileSHA1 и GetFileSize
Совместимость: AVZ 4.34 и выше
Пример:
Загрузка с настройкой по умолчанию
begin
DownloadFile('http://www.yandex.ru', 'c:\ya_ru.txt');
end.
Загрузка через прокси-сервер без авторизации
begin
DownloadFile('http://www.yandex.ru', 'c:\ya_ru.txt', 2, '192.168.1.1:8080');
end.
На заметку:
1. Данная функция может применяться для передачи неких данных (например статистики) по методу GET, параметры указываются в URL - это удобно для использования в корпоративной сети, например:
begin
DownloadFile('http://192.168.1.1/stat.php?SuspCount='+inttostr(GetSuspCount), 'result.txt');
end.
В этом примере в файле result.txt будет содержаться ответ скрипта - файл можно загрузить с диска для анализа ответа, после чего удалить
2. Функция пытается выполнить загрузку без кеширования, чтобы исключить получение из кеша устаревшей версии файла, однако это не всегда срабатывает, так как к примеру некоторые прокси-сервера и оптимизаторы трафика игнорируют прагмы запроса типа "no-cache".
Защититься от этого можно, добавив к URL незначащий уникальный параметр, например:
begin
DownloadFile('http://www.my_server.ru/my_file.txt?anti_cache='+
inttostr(round(random*1000000)),
'c:\my_file.txt');
end.


16.45.2. function FTPSendFile

function FTPSendFile(AFileName, AServer, APath, ASaveName : string;
APassiveMode : boolean = false;
ALogin : string='';
APasswd : string='') : boolean;
Осуществляет передачу указанного файла на сервер по протоколу FTP. Параметры (первые 4 параметра обязательны):
AFileName - полное имя загружаемого на FTP сервер файла
AServer - имя сервера или его IP адрес
APath - путь к папке на FTP сервере, в который необходимо поместить файл. Указание пустого пути означает, что файл должен быть помещен в текущий после подключения к серверу каталог. Если путь указан, то после успешно подключения выполняется попытка сделать заданный каталог текущим, в случае ошибки отправка файла блокируется. Путь может быть относительным и абсолютным - абсолютный путь должен начинаться с /
ASaveName - имя файла на сервере. Если передать в ASaveName пустую строку, то имя файла берется из AFileName. Данный параметр полезен для динамического формирования имен файлов - например, включая в имя даты или имени ПК
APassiveMode - режим работы с FTP сервером. Если APassiveMode=true, то включается пассивный режим
ALogin, APasswd - логин и пароль для авторизации на сервере. Должны задаваться парой, если логин не задан, то в качестве логина используется значение 'anonymous', в качестве пароля - ' anonymous@anonymous.com '
Подробнее про протокол FTP и пассивный режим см. http://ru.wikipedia.org/wiki/FTP и http://tools.ietf.org/html/rfc959
Совместимость: AVZ 4.34 и выше
Пример:
begin
// Выполнение исследования системы
// по умолчанию создает файлы syscheck.htm, syscheck.xml и syscheck.zip
ExecuteSysCheck(GetAVZDirectory + 'syscheck.htm');
// Отправка карантина на сервер
FTPSendFile(GetAVZDirectory+'syscheck.zip',
'192.168.0.100', '/avz', GetComputerName+'_syscheck.zip' ,
false, 'avz', 'top_secret');
// Выход из AVZ
ExitAVZ;
end.
В примере использовались: ExecuteSysCheck , ExitAVZ , GetAVZDirectory , GetComputerName
В данном примере отправка протокола исследования системы выполняется на сервер с IP адресом 192.168.0.100, протокол помещается в папку AVZ под именем, которое формируется из имени ПК и суффикса '_syscheck.zip'. Пассивный режим не используется, авторизация на сервере производится с логином avz и паролем top_secret


16.45.3. function GetHostByName

function GetHostByName(AName : string) : string;
Возвращает IP адрес хоста с заданным именем. Если у хоста более одного IP, возвращается их список, разделитель - запятая.
В случае ошибки возвращается пустая строка.
Совместимость: AVZ 4.45 и выше
Пример:
var
IpAddr, PingIP, s : string;
begin
IpAddr := GetHostByName('yandex.ru');
AddToLog('yandex.ru, IP='+IpAddr);
if IpAddr <> '' then begin
IpAddr := IpAddr + ',';
while pos(',', IpAddr) > 0 do begin
PingIP := copy(IpAddr, 1, pos(',', IpAddr)-1);
delete(IpAddr, 1, pos(',', IpAddr));
AddToLog('Ping хоста '+PingIP);
if Ping(PingIP, 5000, S) then
AddToLog(' хост отвечает')
else
AddToLog(' ошибка');
end;
end;
end.
В примере использовались: AddToLog , Ping
В данном примере скрипт определяет список IP для yandex.ru и поочередно пингует каждый из адресов при помощи функции Ping


16.45.4. function Ping

function Ping(AHostIP : string; ATimeOut : integer; var AReply : string) : boolean;
Осуществляет пинг хоста с IP адресом, заданным в AHostIP. Таймаут задается параметром ATimeOut в миллисекундах.
Функция возвращает true в случае, если хост отвечает и false, если хост не отвечает или возникли ошибки сети.
Независимо от возвращаемого значения функция заполняет переменную AReply дополнительными данными, разделяя значения запятой:
- код статуса. В случае успешного ответа код равен нулю, в противном случае это код ошибки WinSock, позволяющий уточнить причину ошибки
- задержка между запросом и ответом в миллисекундах
- IP хоста, который ответил на PING (должен совпадать с AHostIP)
Совместимость: AVZ 4.45 и выше
Пример:
var
s : string;
begin
if Ping('192.168.01', 2000, S) then
ShowMessage('Хост ответил на запрос !');
end.
В примере использовались: ShowMessage


16.46. Работа с WMI

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.46. Работа с WMI
  • Предыдущая
  • Следующая

Содержание 16.46. Работа с WMI

16.46.1. function WMI_Init
16.46.2. procedure WMI_Free
16.46.3. function WMI_Query
16.46.4. function WMI_Fetch
16.46.5. function WMI_GetField
16.46.6. Примеры


16.46.1. function WMI_Init

function WMI_Init(AHost, ANameSpace : string) : boolean;
Инициализация. Параметр AHost позволяет задать сетевое имя ПК ('localhost' - текущий ПК), ANameSpace задает пространство имен.
Функция возвращает True в случае успеха и False в случае ошибки. До успешного вызова WMI_Init функции WMI_* заблокированы и при попытке из вызова функции будут возвращать False.
Совместимость: AVZ 4.40 и выше
Пример:
begin
if WMI_Init('localhost', 'root\SecurityCenter2') then begin
if WMI_Query('SELECT * FROM AntiVirusProduct') then
while WMI_Fetch do
Addtolog(WMI_GetField('displayName') + ', '+
WMI_GetField('instanceGuid'));
WMI_Free;
end;
end.
В данном примере используются: WMI_Query , WMI_Fetch , WMI_GetField и WMI_Free .


16.46.2. procedure WMI_Free

procedure WMI_Free;
Завершает работу с WMI и освобождает выделенные для этого ресурсы.
Вызов WMI_Free имеет смысл после успешного вызова WMI_Init
Совместимость: AVZ 4.40 и выше


16.46.3. function WMI_Query

function WMI_Query(ASQL : string) : boolean;
Выполняет запрос. Текст запроса передается через параметр ASQL, функция возвращает True в случае, если запрос успешно выполнен и False в случае ошибки. Вызов WMI_Query имеет смысл после успешного вызова WMI_Init .
Совместимость: AVZ 4.40 и выше
Пример:
begin
if WMI_Init('localhost', 'root\SecurityCenter2') then begin
if WMI_Query('SELECT * FROM AntiVirusProduct') then
while WMI_Fetch do
Addtolog(WMI_GetField('displayName') + ', '+
WMI_GetField('instanceGuid'));
WMI_Free;
end;
end.
В данном примере используются функции WMI_Init , WMI_Fetch , WMI_GetField и WMI_Free . Выполняется запрос 'SELECT * FROM AntiVirusProduct'


16.46.4. function WMI_Fetch

function WMI_Fetch : boolean;
Извлекает очередную запись. Возвращает true, если извлечение записи прошло успешно и false в случае, если записей больше нет или возникла ошибка. имеет смысл после успешного выполнения WMI_Query
Совместимость: AVZ 4.40 и выше
Пример:
begin
if WMI_Init('localhost', 'root\SecurityCenter2') then begin
if WMI_Query('SELECT * FROM AntiVirusProduct') then
while WMI_Fetch do
Addtolog(WMI_GetField('displayName') + ', '+
WMI_GetField('instanceGuid'));
WMI_Free;
end;
end.
В данном примере используются функции WMI_Init , WMI_GetField и WMI_Free .
Выполняется запрос 'SELECT * FROM AntiVirusProduct'


16.46.5. function WMI_GetField

function WMI_GetField(AName : string): string;
Возвращает значение указанного поля текущей строки данных по его имени, заданного в AName.
Если имя поля задано неверно, или возникла ошибка, то функция вернет пустую строку
Совместимость: AVZ 4.40 и выше


16.46.6. Примеры

1. Скрипт, выводящий сведения о текущих установленных антивирусах
begin
if WMI_INIT('localhost', 'root\SecurityCenter2') then
if WMI_QUERY('SELECT * FROM AntiVirusProduct') then
while WMI_FETCH do
Addtolog(WMI_GETFIELD('displayName') + ', '+
WMI_GETFIELD('instanceGuid'));
end.
2. Сведения о видеокарте
begin
if WMI_INIT('localhost', 'root\cimv2') then
if WMI_QUERY('SELECT * FROM Win32_VideoController') then
while WMI_FETCH do begin
Addtolog('VideoProcessor = '+ WMI_GETFIELD('VideoProcessor'));
Addtolog('Video RAM = '+ WMI_GETFIELD('AdapterRAM'));
Addtolog('VideoModeDescription = '+ WMI_GETFIELD('VideoModeDescription'));
end;
end.
3. Данные о дисках в системе
function GetField(AName : string) : string;
begin
Result := AName +
'="'+
WMI_GETFIELD(AName)+
'"';
end;
begin
if WMI_INIT('localhost', 'root\cimv2') then
if WMI_QUERY('SELECT * FROM Win32_LogicalDisk') then
while WMI_FETCH do begin
Addtolog(GetField('DeviceID')+', '+
GetField('VolumeName')+', '+
GetField('Size')+', '+
GetField('FreeSpace')+', '+
GetField('VolumeSerialNumber'));
end;
end.
В примерах использовались: AddToLog , WMI_FETCH , WMI_GETFIELD , WMI_INIT , WMI_QUERY
4. Определение объема оперативной памяти ПК
function GetPCMemSize : integer;
var
x : double;
begin
Result := 0; x := 0;
if WMI_INIT('localhost', 'root\cimv2') then
if WMI_QUERY('SELECT * FROM Win32_PhysicalMemory') then
while WMI_FETCH do
x := x + StrToFloat(WMI_GETFIELD('Capacity'));
x := x / (1024*1024); // Перевод в мегабайты
Result := round(x);
end;
begin
Addtolog('Memory size = '+IntToStr(GetPCMemSize)+' mb');
end.
В примере использовались: AddToLog , StrToFloat , WMI_FETCH , WMI_GETFIELD , WMI_INIT , WMI_QUERY


16.47. Работа с архивами

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.47. Работа с архивами
  • Предыдущая
  • Следующая

Содержание 16.47. Работа с архивами

16.47.1. function ZIP_CreateArchive
16.47.2. function ZIP_ExtractArchive


16.47.1. function ZIP_CreateArchive

function ZIP_CreateArchive(AArchiveFile : string; AFileList, AResCodes : TStrings; APWD : string = '') : boolean;
Создает на диске ZIP архив c именем AArchiveFile и помещает в него файлы из списка AFileList.
Результат обработки каждого из файлов заносится в список AResCodes (если файл успешно помещен в архив, в список записывается "0", если файл не найден - "1", если в ходе добавления файла в архив возникли некие ошибки (например, файл заблокирован на чтение или не хватает прав для его открытия) - "2". Если в скрипте не требуется анализировать успешность добавления файлов в архив, следует в качестве значения параметра AResCodes передать nil. Важно, что список AResCodes будет заполнен только при условии, что функция успешно отработала и вернула true.
Параметр APWD не обязателен и позволяет задать пароль архива. По умолчанию пароль не задан.
Каждая строка списка файлов AFileList должна содержать полное имя добавляемого файла, и отделенное от него точной с запятой имя этого файла в архиве. Например 'd:\avz_sysinfo.htm;LOG\avz_sysinfo.htm' - в данном случае файл d:\avz_sysinfo.htm будет добавлен в архив в каталог LOG под именем avz_sysinfo.htm.
Если в строке списка не указано имя файла в архиве (т.е. нет разделителя ;), то файл добавляется в корень архива, причем имя файла в архиве будет совпадать с именем добавляемого файла.
Если на диске существует файл с именем, заданным в AArchiveFile, то такой файл удаляется перед началом процесса архивации.
Начиная с версии 5.00 перед созданием архива делается проверка, существует ли на диске каталог, заданный в AArchiveFile. Если каталог не существует, то автоматически выполняется попытка его создания.
Функция возвращает true в случае успешного выполнения и false при обнаружении критических ошибок.
В параметре AArchiveFile и именах файлов списка AFileList допустимо указывать макросы, подробнее см. в разделе " макросы, допустимые в именах файлов "
Совместимость: AVZ 4.45 и выше
var
FileList : TStrings;
begin
FileList := TStringList.Create;
FileList.Add('d:\avz_sysinfo.htm');
FileList.Add('d:\avz_sysinfo.xml');
ZIP_CreateArchive('d:\test.zip', FileList, nil, 'infected');
FileList.Free;
end.
В данном примере на диске d:\ создается архив test.zip, в корень архива добавляется два файла, имена файлов в архиве будут совпадать с их именами на диске.
var
FileList : TStrings;
begin
FileList := TStringList.Create;
FileList.Add('d:\avz_sysinfo.htm;LOG\sysinfo.htm');
FileList.Add('d:\avz_sysinfo.xml;LOG\sysinfo.xml');
ZIP_CreateArchive('d:\test.zip', FileList, nil, 'infected');
FileList.Free;
end.
Данный пример отличается от предыдущего тем, что в архив файлы помещаются в каталог LOG под именами, отличными от имени на диске.
var
FileList, ResCodes : TStrings;
i : integer;
begin
FileList := TStringList.Create;
ResCodes := TStringList.Create;
FileList.Add('d:\avz_sysinfo.htm;LOG\sysinfo.htm');
FileList.Add('d:\avz_sysinfo.xml;LOG\sysinfo.xml');
if ZIP_CreateArchive('d:\test.zip', FileList, ResCodes, 'infected') then
for i := 0 to FileList.Count-1 do
AddToLog('Файл '+FileList[i]+', результат архивации = '+ResCodes[i]);
FileList.Free;
ResCodes.Free;
end.


16.47.2. function ZIP_ExtractArchive

function ZIP_ExtractArchive(AArchiveFile, ADestDir, AMask : string; APWD : string='') : integer;
Извлекает из ZIP архива c именем AArchiveFile файлы, имена и расширения которых соответствуют маске AMask в каталог ADestDir.
Если каталог ADestDir не существует, то он создается автоматически.
Необязательный параметр APWD содержит пароль архива, его необходимо указывать для распаковки архивов, защищенных паролем.
В параметра AArchiveFile и ADestDir допустимо указывать макросы, подробнее см. в разделе " макросы, допустимые в именах файлов "
Возвращаемое значение:
0 - успешное завершение работы
1 - файл архива не найден (или нет прав доступа к архиву)
2 - невозможно создать каталог для извлекаемых файлов
3 - в ходе распаковки возникла непредвиденная ошибка
4 - архив не является ZIP архивом, или поврежден, или указан неверный пароль
Совместимость: AVZ 4.45 и выше
begin
ZIP_ExtractArchive('d:\test.zip', '%TMP%\Test',
'*.*', 'infected');
end.


16.48. Типовые примеры

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.48. Типовые примеры
  • Предыдущая
  • Следующая

Содержание 16.48. Типовые примеры

16.48.1. Параметры запуска
16.48.2. Сканирование компьютера
16.48.3. Блокировка сканирования по условию
16.48.4. Сканирование и автокарантин
16.48.5. Лечение заданных папок по условию
16.48.6. Автокарантин и сбор подозрительных файлов с ПК
16.48.7. Поиск файла на диске
16.48.8. Заготовка скрипта для сканирования сети
16.48.9. Обновление баз с протоколированием
16.48.10. Пример удаления троянской программы с известным именем
16.48.11. Поиск подозрительных объектов по именам
16.48.12. Блокировка повторного запуска скрипта в течение дня
16.48.13. Сканирование и отправка результатов по почте
16.48.14. Пример построения простого antimalware сканера с собственными базами
16.48.15. Сканирование ПК и отправка результатов по FTP


16.48.1. Параметры запуска

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.48. Типовые примеры
  • 16.48.1. Параметры запуска
  • Предыдущая
  • Следующая

Параметры запуска

1. Запуск AVZ и выполнение скрипта Test1.txt
avz.exe Script =Test1.txt
2. Запуск AVZ в невидимом для пользователя режиме и выполнение скрипта Test2.txt
avz.exe HiddenMode =3 Script=Test2.txt
3. Запуск AVZ в недоступном для пользователя режиме (отображается ярлык с трее) и выполнение скрипта Test3.txt, режим карантина - сетевой
avz.exe nw=Y HiddenMode=2 Script=Test3.txt


16.48.2. Сканирование компьютера

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.48. Типовые примеры
  • 16.48.2. Сканирование компьютера
  • Предыдущая
  • Следующая

Сканирование компьютера

begin
// если сканирование не завершилось за 10 минут, прервать его
ActivateWatchDog(10*60);
// Настройка AVZ
SetupAVZ('UseQuarantine=Y'); // Включить карантин
SetupAVZ('Priority=-1'); // Пониженный приоритет
// Запуск сканирования
RunScan;
// Завершение работы AVZ
ExitAVZ;
end.
Данный пример демонстрирует простейший скрипт, выполняющий настройку AVZ при помощи функции SetupAVZ и запуск сканирования при помощи RunScan .
В примере использовались: ActivateWatchDog , SetupAVZ , RunScan , ExitAVZ


16.48.3. Блокировка сканирования по условию

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.48. Типовые примеры
  • 16.48.3. Блокировка сканирования по условию
  • Предыдущая
  • Следующая

Блокировка сканирования по условию

begin
// Не проверять компьютеры, имя которых начинается с 'ASU'
if pos('ASU', GetComputerName) = 1 then
ExitAVZ;
// если сканирование не завершилось за 10 минут, прервать его
ActivateWatchDog(10*60);
// Настройка AVZ
SetupAVZ('UseQuarantine=Y'); // Включить карантин
SetupAVZ('Priority=-1'); // Пониженный приоритет
// Запуск сканирования
RunScan;
// Завершение работы AVZ
ExitAVZ;
end.
В данном примере для блокировки применяется имя компьютера, получаемое при помощи GetComputerName
В примере использовались: GetComputerName , ExitAVZ , ActivateWatchDog , SetupAVZ , RunScan


16.48.4. Сканирование и автокарантин

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.48. Типовые примеры
  • 16.48.4. Сканирование и автокарантин
  • Предыдущая
  • Следующая

Сканирование и автокарантин

begin
ActivateWatchDog(5*60);
// Настройка AVZ
SetupAVZ('UseQuarantine=Y'); // Включить карантин
SetupAVZ('Priority=-1'); // Пониженный приоритет
SetupAVZ('nw=Y'); // Сетевой режим
// Запуск сканирования
RunScan;
// Добавление данных о имени ПК
AddToLog('---------------');
AddToLog('Протокол с компьютера '+GetComputerName);
// Сохранение протокола
SaveLog('AVZ_LOG\'+GetComputerName+'_log.txt');
// Автокарантин
ExecuteAutoQuarantine;
// Завершение работы AVZ
ExitAVZ;
end.
Для работы данного примера необходимо создать в рабочем каталоге AVZ папку AVZ_LOG. Ключ NW=Y переключает AVZ в сетевой режим работы - это проявляется в том, что при помещении файла в карантин в папке Quarantine и Infected создается новый уровень - имя компьютера. Это позволяет избежать наложения помещаемых в карантин файлов при запуске AVZ на множестве ПК
В примере использовались: ActivateWatchDog , AddToLog , ExecuteAutoQuarantine , ExitAVZ , GetComputerName , RunScan , SaveLog , SetupAVZ


16.48.5. Лечение заданных папок по условию

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.48. Типовые примеры
  • 16.48.5. Лечение заданных папок по условию
  • Предыдущая
  • Следующая

Лечение заданных папок по условию

begin
ActivateWatchDog(5*60);
// Настройка AVZ
SetupAVZ('UseQuarantine=Y'); // Включить карантин
SetupAVZ('Priority=-1'); // Пониженный приоритет
if GetComputerName = 'PUPKIN' then begin
SetupAVZ('Scan=C:\'); // Проверять диск C:\
SetupAVZ('Scan=D:\Virus'); // Проверять указанную папку
SetupAVZ('DelVir=Y'); // Включить лечение
end;
// Запуск сканирования
RunScan;
// Добавление данных о имени ПК
AddToLog('---------------');
AddToLog('Протокол с компьютера '+GetComputerName);
// Сохранение протокола
SaveLog('AVZ_LOG\'+GetComputerName+'_log.txt');
// Завершение работы AVZ
ExitAVZ;
end.
В примере использовались: ActivateWatchDog , AddToLog , ExitAVZ , GetComputerName , RunScan , SaveLog , SetupAVZ


16.48.6. Автокарантин и сбор подозрительных файлов с ПК

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.48. Типовые примеры
  • 16.48.6. Автокарантин и сбор подозрительных файлов с ПК
  • Предыдущая
  • Следующая

Автокарантин и сбор подозрительных файлов с ПК

begin
// ********* Настройка AVZ ********
SetupAVZ('UseQuarantine=Y'); // Включить карантин подозрительных
SetupAVZ('Priority=-1'); // Пониженный приоритет
SetupAVZ('EvLevel=3'); // Эвристика на максимум
SetupAVZ('ExtEvCheck=Y'); // Расширенный анализ включен
// Активирование сторожевого таймера на 15 минут
ActivateWatchDog(60 * 15);
// Запуск сканирования
RunScan;
// Добавление данных о имени ПК
AddToLog('---------------');
AddToLog('Протокол с компьютера '+GetComputerName);
// Автокарантин
ExecuteAutoQuarantine;
// Генерация архива с собранными файлами
CreateQurantineArchive('c:\AVZ_Qurantine.zip');
// Сохранение протокола
SaveLog('c:\AVZ_Qurantine.log');
// Завершение работы AVZ
ExitAVZ;
end.
В примере использовались: ActivateWatchDog , AddToLog , CreateQurantineArchive , ExecuteAutoQuarantine , ExitAVZ , GetComputerName , RunScan , SaveLog , SetupAVZ
Для запуска скрипта удобно создать BAT файл CollectFiles.bat, содержащий команду следующего вида:
avz.exe HiddenMode=1 Script=CollectFiles.avz
Предполагается, что скрипт сохранен в файле CollectFiles.avz, этот файл вместе с CollectFiles.bat лежат в том-же каталоге, что и avz.exe


16.48.7. Поиск файла на диске

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.48. Типовые примеры
  • 16.48.7. Поиск файла на диске
  • Предыдущая
  • Следующая

Поиск файла на диске

Задача - произвести поиск на диске файла с заданным именем. Данная задача решается при помощи следующего скрипта:
// Сканирование папки (с рекурсивным обходом)
Procedure ScanDir(ADirName : string; AScanSubDir : boolean);
var
FS : TFileSearch;
begin
ADirName := NormalDir(ADirName);
FS := TFileSearch.Create(nil);
FS.FindFirst(ADirName + '*.*');
while FS.Found do begin
SetStatusBarText(ADirName + FS.FileName);
if FS.IsDir then begin
if AScanSubDir and (FS.FileName <> '.') and (FS.FileName <> '..') then
ScanDir(ADirName + FS.FileName, AScanSubDir)
end else
if LowerCase(FS.FileName) = 'trojan.dll' then
AddToLog('Найден файл '+ADirName + FS.FileName);
FS.FindNext;
end;
FS.Free;
end;
begin
ScanDir('c:\', true);
end.
В примере использовались: AddToLog , NormalDir , SetStatusBarText
В данном примере функция ScanDir применяется для рекурсивного обхода каталогов. Функция получает два параметра - имя каталога для сканирования и параметр AScanSubDir, указывающий, следует ли сканировать вложенные каталоги.


16.48.8. Заготовка скрипта для сканирования сети

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.48. Типовые примеры
  • 16.48.8. Заготовка скрипта для сканирования сети
  • Предыдущая
  • Следующая

Заготовка скрипта для сканирования сети

Заготовка типового скрипта для сканирования множества ПК в сети:
begin
// Проверка - блокировки запуска
if pos('первые буквы имени', GetComputerName) = 1 then
ExitAVZ;
if GetComputerName = 'имя1' then
ExitAVZ;
if GetComputerName = 'имя2' then
ExitAVZ;
// Пауза на 50 сек, чтобы не мешать автозагрузке
Sleep(50);
// Настройка AVZ
SetupAVZ('UseQuarantine=Y'); // Включить карантин
SetupAVZ('nw=Y'); // Сетевой режим карантина
SetupAVZ('Priority=-1'); // Пониженный приоритет
SetupAVZ('EvLevel=3'); // Эвристика на максимум
SetupAVZ('ExtEvCheck=Y'); // Расширенный анализ включен
SetupAVZ('DelVir=Y'); // Включить лечение
// Активирование сторожевого таймера на 15 минут
ActivateWatchDog(60 * 15);
// Запуск сканирования
RunScan;
// Добавление данных о имени ПК
AddToLog('---------------');
AddToLog('Протокол с компьютера '+GetComputerName);
AddToLog('Путь к AVZ = ' + GetAVZDirectory);
// Автокарантин
ExecuteAutoQuarantine;
// Сохранение протокола
SaveLog(GetAVZDirectory+'\LOG\'+GetComputerName+'_ log.txt');
// Завершение работы AVZ
ExitAVZ;
end.
В примере использовались: ActivateWatchDog , AddToLog , ExecuteAutoQuarantine , ExitAVZ , GetAVZDirectory , GetComputerName , RunScan , SaveLog , SetupAVZ , Sleep
Параметры запуска AVZ в этом случае:
\\my_server\AVZ\avz.exe Priority=-1 nw=Y nq=Y HiddenMode=2 Script=\\my_server\AVZ\netscan.avz
при этом предполагается, что AVZ находится в папке \\my_server\AVZ, а скрипт сохранен в файле netscan.avz.
Некоторые комментарии по скрипту и параметрам запуска:
· Priority=-1 - запускает AVZ с пониженным приоритетом, чтобы он не мешал работе компьютера. Этот ключ дублируется в скрипте и командной строке и в принципе не обязателен в случае сканирования современных ПК
· nw=Y - аналогично, дублируется в командной строке и скрипте (дублирование это не обязательно, достаточно в одном месте). Этот ключ переключает карантин в "сетевой режим" - в нем в папке Quarantine появляется еще один уровень - по сетевому имени компьютера
· HiddenMode=2 - запуск AVZ в скрытом режиме - в трее на время сканирования видна иконка AVZ, но доступ пользователя к органам управления AVZ-ом блокирован. Папку Quarantine необходимо предварительно создать и выдать пользователям права на запись в нее
· SaveLog (GetAVZDirectory+'\LOG\'+GetComputerName+'_ log.txt'); - в данном случае сохранение протокола идет в рабочем каталоге AVZ, причем протокол содержит в имени имя компьютера. Папку LOG необходимо предварительно создать и выдать пользователям права на запись в нее
· Вызов ExecuteAutoQuarantine ; в скрипте для обычного сканирования следует закомментировать - эта функция собирает все файлы, находящиеся в памяти или автозапуске и не опознанные как безопасные и системные. Сбор таких файлов удобен для их последующей проверки несколькими антивирусами
· Проверки вида "if pos('первые буквы имени', GetComputerName ) = 1 then ExitAVZ;" и "if GetComputerName = 'имя2' then ExitAVZ;" естественно не обязательны и позволяют исключать из сканирования компьютеры с заданными сетевыми именами. Это удобно для отключения ежедневного сканирования компьютеров администраторов сети и IT-специалистов (но при этом AVZ у них находится в автозапуске и в случае чего можно убрать фильтр и включить их ПК в сканирование).
Данный пример является простым, более сложный скрипт позволяет выполнять контроль за ходом исследования, отправлять данные по FTP и принимать настройки через командную строку - см. Сканирование ПК и отправка результатов по FTP


16.48.9. Обновление баз с протоколированием

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.48. Типовые примеры
  • 16.48.9. Обновление баз с протоколированием
  • Предыдущая
  • Следующая

Обновление баз с протоколированием

Задача: выполнить обновление базы в "тихом" режиме (без отображения GUI) с протоколированием успешности операций. Это в частности удобно в случае размещения AVZ на сервере - в этом случае процедуру обновления баз можно включить в планировщик и в результате на сервере будет находиться AVZ с актуальной базой.
Скрипт имеет вид:
var
S : string;
begin
// Обновление баз
if ExecuteAVUpdate then S := 'Обновление прошло успешно'
else S := 'Ошибка обновления баз AVZ';
// Протоколирование
AddLineToTxtFile(GetAVZDirectory + 'avz_upd.log',
DateTimeToStr(Now)+' '+S);
// Завершение работы AVZ
ExitAVZ;
end.
В примере использовались: AddLineToTxtFile , ExecuteAVUpdate , ExitAVZ , GetAVZDirectory
Запуск AVZ в данном случае должен производиться с параметрами:
avz.exe HiddenMode=1 script=update.txt
В данном случае предполагается, что скрипт сохранен в папке AVZ в файле с именем update.txt. Параметр HiddenMode =1 предписывает AVZ запуститься свернутым в трей. В качестве усовершенствования в данном скрипте можно применить функцию ExecuteAVUpdateEx


16.48.10. Пример удаления троянской программы с известным именем

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.48. Типовые примеры
  • 16.48.10. Пример удаления троянской программы с известным именем
  • Предыдущая
  • Следующая

Пример удаления троянской программы с известным именем

Постановка задачи:
Администратору известно, что на компьютере пользователя имеется троянская программа и ее исполняемый файл с именем c:\windows\system32\trojan.dll, причем данная программа агрессивно защищается от удаления.
Решение задачи:
begin
// **** Шаг 1. Активируем AVZGuard
if SetAVZGuardStatus(True) then
AddToLog('AVZGuard успешно активирован')
else
AddToLog('AVZGuard - ошибка активации');
// **** Шаг 2. Удаляем файл
DeleteFile('c:\windows\system32\trojan.dll');
// *** Шаг 3. Чистка ссылок на удаленный файл
ExecuteSysClean;
// *** Шаг 4. Сохранение протокола
SaveLog('del_trojan.log');
// *** Шаг 5. Перезагрузка системы
RebootWindows(true);
end.
В примере использовались: AddToLog , DeleteFile , ExecuteSysClean , RebootWindows , SaveLog , SetAVZGuardStatus
Приведенный выше скрипт может быть усовершенствован - можно задействовать систему Boot Cleaner , что существенно повысит вероятность удаления файла:
begin
// **** Шаг 1. Активируем AVZGuard
if SetAVZGuardStatus(True) then
AddToLog('AVZGuard успешно активирован')
else
AddToLog('AVZGuard - ошибка активации');
// **** Шаг 2. Удаляем файл
DeleteFile('c:\windows\system32\trojan.dll');
// **** Шаг 3. Импорт списка удаленных файлов в настройки Boot Cleaner
BC_ImportDeletedList;
// **** Шаг 4. Чистка ссылок на удаленный файл
ExecuteSysClean;
// **** Шаг 5. Сохранение протокола
SaveLog('del_trojan.log');
// **** Шаг 6. Активация драйвера Boot Cleaner
BC_LogFile(GetAVZDirectory + 'boot_clr.log');
BC_Activate;
// **** Шаг 7. Перезагрузка системы
RebootWindows(true);
end.
В примере использовались: AddToLog , BC_Activate , BC_ImportDeletedList , BC_LogFile , DeleteFile , ExecuteSysClean , GetAVZDirectory , RebootWindows , SaveLog , SetAVZGuardStatus
В описанных примерах работа скрипт завершается командой RebootWindows , что приводит к автоматической перезагрузке компьютера с активной системой AVZ Guard .


16.48.11. Поиск подозрительных объектов по именам

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.48. Типовые примеры
  • 16.48.11. Поиск подозрительных объектов по именам
  • Предыдущая
  • Следующая

Поиск подозрительных объектов по именам

Поиск файлов по именам малоэффективен для борьбы с современными вредоносными программами, но он может пригодиться в качестве одной из форм своеобразной эвристики. Достоинство метода - высокая скорость поиска и простота реализации. Рассмотрим несколько вариантов реализации этого поиска при помощи скриптов AVZ
Пример 1. Простейший поиск по именам
// Поиск файла с указанным именем
function CheckByName(Fname : string) : boolean;
begin
Result := FileExists(Fname) ;
if Result then
AddToLog('Файл '+Fname+' имеет подозрительное имя');
end;
begin
// Проверка файлов
CheckByName('%WinDir%\cservv32.exe');
CheckByName('%WinDir%\services.exe');
CheckByName('%WinDir%\lsass.exe');
end.
В примере использовались: AddToLog , FileExists
В данном примере объявляется функция CheckByName, задачей которой является проверка наличия файла с указанным именем на диске. В случае обнаружения подобного файла функция возвращает true и делает отметку в протоколе при помощи функции AddToLog . Недостатком функции является то, что список файлов как таковой отсутствует - вместо него идут повторяющиеся вызовы CheckByName. В более сложном примере можно усовершенствовать поиск, разместив список имен в отдельном файле, который будет выступать в роли базы данных.
Пример 2. Поиск по именам с использованием загружаемого списка файлов
// Поиск файла с указанным именем
function CheckByName(Fname : string) : boolean;
begin
Result := FileExists(Fname) ;
if Result then
AddToLog('Файл '+Fname+' имеет подозрительное имя');
end;
var
SuspNames : TStringList; // Список имен подозрительных файлов
i : integer;
begin
// Проверка файлов по обновляемой базе данных
if FileExists(GetAVZDirectory + 'files.db') then begin
SuspNames := TStringList.Create;
SuspNames.LoadFromFile('files.db');
AddToLog('База имен загружена - количество записей = '+
inttostr(SuspNames.Count));
// Цикл поиска
for i := 0 to SuspNames.Count - 1 do
CheckByName(SuspNames[i]);
end else
AddToLog('Ошибка загрузки списка имен файлов');
end.
В примере использовались: AddToLog , FileExists , GetAVZDirectory
В данном примере используется уже знакомая по примеру 1 функция CheckByName, которая вызывается в цикле. Для работы со списком файлов применяется класс TStringList . Предполагается, что список файлов хранится в текстовом файле files.db, который размещается в каталоге AVZ (путь к этому каталогу определяется при помощи GetAVZDirectory
Пример 3. Поиск по именам с использованием загружаемого списка файлов и AV баз AVZ
// Поиск файла с указанным именем
function CheckByName(Fname : string) : boolean;
var
S : string;
begin
Result := FileExists(Fname) ;
if Result then begin
S := '';
case CheckFile(Fname) of
-1 : S := ', доступ к файлу блокируется';
1 : S := ', опознан как Malware ('+GetLastCheckTxt+')';
2 : S := ', подозревается файловым сканером ('+GetLastCheckTxt+')';
3 : exit; // Безопасные файлы игнорируем
end;
AddToLog('Файл '+NormalFileName(Fname)+' имеет подозрительное имя'+S);
end;
end;
var
SuspNames : TStringList; // Список имен подозрительных файлов
i : integer;
begin
// Проверка файлов по обновляемой базе данных
if FileExists(GetAVZDirectory + 'files.db') then begin
SuspNames := TStringList.Create;
SuspNames.LoadFromFile('files.db');
AddToLog('База имен загружена - количество записей = '+inttostr(SuspNames.Count));
// Цикл поиска
for i := 0 to SuspNames.Count - 1 do
CheckByName(SuspNames[i]);
end else
AddToLog('Ошибка загрузки списка имен файлов');
end.
В примере использовались: AddToLog , CheckFile , FileExists , GetAVZDirectory , GetLastCheckTxt , NormalFileName
В данном примере появляется еще одно усовершенствование - функция CheckByName проверяет обнаруженный по имени файла по базам AVZ. Для этих целей применяется функция CheckFile (она поддерживается начиная с AVZ 4.23). Анализ результатов сканирования файла позволяет исключить из протокола безопасные файлы и файлы, прошедшие контроль по каталогу Microsoft. Функция CheckFile применяется совместно с GetLastCheckTxt для получения имени зловреда в случае его детектирования или подозрения. Еще одной особенностью является применение функции NormalFileName для нормализации имени файла (которая, в частности, предполагает замену применяемых в AVZ макросов). Дополнительную информацию о поиске файлов можно посмотреть в разделе " Поиск файлов и папок "


16.48.12. Блокировка повторного запуска скрипта в течение дня

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.48. Типовые примеры
  • 16.48.12. Блокировка повторного запуска скрипта в течение дня
  • Предыдущая
  • Следующая

Блокировка повторного запуска скрипта в течение дня

В случае применения AVZ для автоматического сканирования компьютеров в сети может возникнуть задача блокировки повторного запуска одного и того-же скрипта в течении дня. Это полезно, например, для блокировки повторных запусков AVZ после каждой перезагрузки компьютера или для однократного обновления баз в течении дня. Решение данной операции достаточно простое и сводится в установки в реестре отметки, содержащей время последнего сканирования.
var
LastScanDate, CurrentDate : string;
begin
LastScanDate := RegKeyStrParamRead('HKEY_CURRENT_USER', 'Software\AVZ', 'LastScanDate');
CurrentDate := DateToStr(Now);
if LastScanDate = CurrentDate then begin
AddToLog('Блокировка повторного запуска. Скрипт уже запускался '+LastScanDate);
ExitAVZ;
exit;
end;
RegKeyStrParamWrite('HKEY_CURRENT_USER', 'Software\AVZ', 'LastScanDate', CurrentDate);
// продолжение скрипта ....
end.
В примере использовались: AddToLog , ExitAVZ , RegKeyStrParamRead , RegKeyStrParamWrite
Принцип работы данного скрипта основан на том, что из реестра считывается параметр с именем 'LastScanDate', хранящийся в ключе 'HKEY_CURRENT_USER\Software\AVZ' (естественно, что ключ и имя параметры можно задать любые). Если считанное значение содержит текущую дату, то работа скрипта прерывается и производится выход из AVZ. В противном случае производится запись в реестр отметки с текущей датой.


16.48.13. Сканирование и отправка результатов по почте

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.48. Типовые примеры
  • 16.48.13. Сканирование и отправка результатов по почте
  • Предыдущая
  • Следующая

Сканирование и отправка результатов по почте

Постановка задачи:
Необходимо выполнить сканирование диска C: компьютера, после чего отправить на указанный адрес письмо, содержащее протокол сканирования, результаты исследования системы и файлы, помещенные в карантин.
begin
// Разрешить использовать карантин
SetupAVZ('UseQuarantine=Y');
// Сканировать диск C
SetupAVZ('Scan=C:\');
// Запуск сканирования
RunScan;
// Выполнение исследования системы
ExecuteSysCheck(GetAVZDirectory + 'syscheck.htm');
// Сохранение архива с файлами карантина
CreateQurantineArchive(GetAVZDirectory+'quarantine.zip');
// Отправка письма
SendEmailMessage('mail.my_mail_server.ru',
'AVZ',
'my_mail@mail.ru',
'AVZ email alert',
'Report from computer "' + GetComputerName + '" '+#13 +
'SuspCount = ' + InttoStr(GetSuspCount) + #13 +
'DetectedCount = ' + InttoStr(GetDetectedCount) ,
false, '', '',
GetAVZDirectory + 'syscheck.zip',
GetAVZDirectory + 'quarantine.zip',
''
);
// Выход из AVZ
ExitAVZ;
end.
В примере использовались: CreateQurantineArchive , ExecuteSysCheck , ExitAVZ , GetAVZDirectory , GetComputerName , GetDetectedCount , GetSuspCount , RunScan , SendEmailMessage , SetupAVZ
В данном примере исследование системы производится после сканирования, поэтому в протокол исследования включается протокол сканирования.


16.48.14. Пример построения простого antimalware сканера с собственными базами

AVZ 5. Руководство пользователя
×

  • 16. Скрипты управления
  • 16.48. Типовые примеры
  • 16.48.14. Пример построения простого antimalware сканера с собственными базами
  • Предыдущая
  • Следующая

Пример построения простого antimalware сканера с собственными базами

Администраторы сетей нередко задают вопросы по поводу того, нет ли возможности выполнять зачистку от нежелательного ПО, троянов или запрещенных к применению на ПК пользователей программ на базе AVZ. Возможность такая существует, и реализуется на основе скрипт-языка.
Рассмотрим типовой пример:
var
SignDB : TStrings; // Сигнатурная база
MalwareCnt : integer; // Счетчик найденных зловредов
DelMalwareCnt : integer; // Счетчик удаленных зловредов
DeleteMalware : boolean; // Признак того, что делать с найденными Malware
// Обработка найденного файла
Procedure ScanFile(AFileName : string);
var
FMD5 : string;
begin
SetStatusBarText(AFileName);
// Вычисление MD5 суммы
FMD5 := CalkFileMD5(AFileName);
// Поиск MD5 в базе
if (FMD5 <> '') and (SignDB.IndexOf(FMD5) >= 0) then begin
AddToLog('Найден malware, файл = '+AFileName);
inc(MalwareCnt);
if DeleteMalware then begin
DeleteFile(AFileName);
inc(DelMalwareCnt);
end;
end;
end;
// Сканирование каталога
Procedure ScanDir(ADirName : string; AScanSubDir : boolean);
var
FS : TFileSearch;
begin
ADirName := NormalDir(ADirName);
FS := TFileSearch.Create(nil);
FS.FindFirst(ADirName + '*.*');
while FS.Found do begin
// В зависимости от типа - или сканируем подкаталог, или изучаем файл
if (FS.FileName <> '.') and (FS.FileName <> '..') then
if FS.IsDir and AScanSubDir then
ScanDir(ADirName + FS.FileName, AScanSubDir)
else
ScanFile(ADirName + FS.FileName);
FS.FindNext;
end;
FS.Free;
end;
begin
// Режим сканирования
DeleteMalware := false;
// Обнуляем счетчик зловредов
MalwareCnt := 0; DelMalwareCnt := 0;
// Загружаем сигнатурную базу
SignDB := TStringList.Create;
SignDB.LoadFromFile('my_sign_db.txt');
AddToLog('Баз загружена, количество сигнатур = '+inttostr(SignDB.Count));
// Задействуем антируткит
SearchRootkit(true, true);
// Проверка дисков и (или) папок
ScanDir('c:\', true);
ScanDir('d:\MyFolder\', false);
// Зачистка следов зловредов, если таковые были найдены
if DelMalwareCnt > 0 then begin
SaveLog('scan_result.txt');
// Включение AVZGuard - он помешает зловредам восстановиться
SetAVZGuardStatus(true);
// Активация BootCleaner
BC_ImportALL;
BC_Activate;
// Эвристическая чистка
ExecuteSysClean;
// Перезагрузка
RebootWindows(true);
end;
end.
В примере использовались: AddToLog , BC_Activate , BC_ImportALL , CalkFileMD5 , DeleteFile , ExecuteSysClean , NormalDir , RebootWindows , SaveLog , SearchRootkit , SetAVZGuardStatus , SetStatusBarText и класс TFileSearch
Для работы данного примера необходима сигнатурная база. В нашем случае роли сигнатуры выступает MD5 сумма файла - ее крайне неудобно применять в реальных ситуациях (так как изменение хотя бы одного байта в файле приведет к изменению его MD5), однако для простейшего сканера такой подход удобен, так как рассчитать MD5 любого файла очень просто, например в AVZ меню "Сервис/Вычислить MD5 сумму файла". Записи базы просты - по одной MD5 сумме в каждой строке, без пробелов до или после суммы
Для примера можем создать базу my_sign_db.txt, состоящую из единственной записи:
44D88612FEA8A8F36DE82E1278ABB02F
Это MD5 сумма файла EICAR - тестового "вируса", который можно взять где угодно, например вот тут: http://support.kaspersky.ru/downloads/eicar/eicar.zip (только нужно не забыть распаковать его - так как наш пример архивы не проверяет).
Работа данного примера достаточно просто, разберем ее шаг за шагом:
1. В скрипте декларируется класс SignDB для работы с массивами строк типа TStringList .
2. Производится загрузка базы. Обработку ошибок в скрипте мы не производим, поэтому в случае ошибки AVZ прервет работу скрипта и выведет сообщение об ошибке
3. С помощью SearchRootkit нейтрализуем перехваты. Это необязательный шаг, однако перехватчик может маскировать или блокировать доступ к файлам зловреда, что затруднит его поиск
4. Производим поиск с помощью созданной нами функции ScanDir. У нее два параметра - стартовый каталог и режим сканирования подкаталогов. Если второй параметр TRUE, то сканируется указанный каталог и все его подкаталоги. Если FALSE, то подкаталоги не сканируются - это в частности удобно для поиска файлов в корне диска. Вызовов ScanDir может быть несколько.
5. Проверяем показания нашего счетчика DelMalwareCnt - если он больше нуля, то в ходе работы были удалены описанной базой программы. В этом случае производится сохранение протокола работы, активация AVZGuard при помощи SetAVZGuardStatus , настройка BootCleaner, после чего выполняется эвриcтическая чистка системы и перезагрузка при помощи RebootWindows . Конкретный набор операций определяется конкретной задачей, в минимуме можно оставить:
if DelMalwareCnt > 0 then begin
// Эвристическая чистка
ExecuteSysClean;
end;
Процедура ScanDir в данном скрипте отвечает за рекурсивный обход каталогов на диске и поиск файлов, ничего примечательного в ее работе нет, используется описанный в справке AVZ класс TFileSearch
Процедура ScanFile выполняет самое интересное - изучение файла. Она выполняет следующие операции:
1. Выводит в строке статуса имя сканируемого файла через SetStatusBarText . Это чисто "косметическая" операция, которая замедляет работу скрипта, зато можно наблюдать за тем, как идет сканирование. Из реального скрипта ее можно исключить
2. При помощи CalkFileMD5 вычисляется MD5 сумма файла
3. Если MD5 вычислен успешно (в этом случае CalkFileMD5 возвращает строку с MD5 суммой) и такая MD5 сумма найдена в базе, то выполняются действия над найденным файлом - делается отметка в протоколе, а файл удаляется при условии, что DeleteMalware = true. В данном случае если DeleteMalware = true, то получаем "режим лечилки", если False - то "режим сканера" (данный параметр задается в начале скрипта).
Может возникнуть резонный вопрос - а как быть, если скажем имеется коллекция malware, насчитывающая сотни файлов. Не получать же вручную их MD5 для данной базы ... в данной ситуации мы можем построить несложный скрипт, который создаст базу сигнатур:
var
SignDB : TStrings; // Сигнатурная база
// Обработка найденного файла
Procedure ScanFile(AFileName : string);
var
FMD5 : string;
begin
SetStatusBarText(AFileName);
// Вычисление MD5 суммы
FMD5 := CalkFileMD5(AFileName);
// Добавление в базу без повторов
if (FMD5 <> '') and (SignDB.IndexOf(FMD5) < 0) then
SignDB.Add(Trim(FMD5));
end;
// Сканирование каталога
Procedure ScanDir(ADirName : string; AScanSubDir : boolean);
var
FS : TFileSearch;
begin
ADirName := NormalDir(ADirName);
FS := TFileSearch.Create(nil);
FS.FindFirst(ADirName + '*.*');
while FS.Found do begin
// В зависимости от типа - или сканируем подкаталог, или изучаем файл
if (FS.FileName <> '.') and (FS.FileName <> '..') then
if FS.IsDir and AScanSubDir and then
ScanDir(ADirName + FS.FileName, AScanSubDir)
else
ScanFile(ADirName + FS.FileName);
FS.FindNext;
end;
FS.Free;
end;
begin
// Инициализируем сигнатурную базу
SignDB := TStringList.Create;
SignDB.LoadFromFile('my_sign_db.txt');
AddToLog('Баз загружена, количество сигнатур = '+inttostr(SignDB.Count));
// Сканирование папки с образцами Malware
ScanDir('c:\MalwareSamplesDir\', true);
// Сохранение базы
AddToLog('Баз пополнена, количество сигнатур = '+inttostr(SignDB.Count));
SignDB.SaveToFile('my_sign_db.txt');
SignDB.Free;
end.
В примере использовались: AddToLog , CalkFileMD5 , NormalDir , SetStatusBarText и класс TFileSearch
Как несложно заметить, данный скрипт похож на предыдущий - выполняется рекурсивное сканирование папок с коллекцией Malware, однако вместо поиска по базе ведется ее пополнение. После заполнения база сохраняется. При добавлении новых MD5 в базу производится контроль повторов, поэтому выполнять его можно многократно - он загружает текущую базу и в случае надобности пополняет ее новыми сигнатурами.


16.48.15. Сканирование ПК и отправка результатов по FTP

Данный пример может быть полезен системным администраторам, желающим автоматически просканировать большое количество компьютеров и собрать протоколы исследования и карантины не опознанных AVZ или заподозренных в чем-то файлов для углубленного изучения.
var
// Список хостов мониторинга, на которые посылаются статусы
MonitoringHost : string;
// Параметры подключения к FTP серверу
FFtpServer, FFtpLogin, FFtpPasswd, FFtpPath : string;
FTPPassiveMode : boolean;
// Признак необходимости создать и отправить карантин
isCreateQr : boolean;
// Настройки задержки
RandomDelay, RDTimer : integer;
// Запрос параметра командной строки по имени
function GetCmdLineParam(AParam, ADefVal : string) : string;
begin
Result := GetParamByName(AParam);
if Result = '' then
Result := ADefVal;
end;
// Отправка событий смены статуса в SYSLOG
procedure SendStatusInfo(S : string);
var
Tmp : string;
begin
if MonitoringHost = '' then
exit;
// Перебор заданных в настройке хостов SYSLOG
Tmp := MonitoringHost+';';
while pos(';', Tmp) > 0 do begin
SendSysLogMessage(Trim(copy(Tmp, 1, pos(';', Tmp)-1)),
'['+DateTimeToStr(now)+'] '+
GetComputerName + '='+ S);
delete(Tmp, 1, pos(';', Tmp));
end;
end;
// Загрузка настроек из командной строки
function LoadSetup : boolean;
begin
Result := false;
// Параметры подключения к FTP
FFtpServer := GetCmdLineParam('FtpServer', '--');
FFtpLogin := GetCmdLineParam('FtpLogin','--');
FFtpPasswd := GetCmdLineParam('FtpPasswd','--');
FFtpPath := GetCmdLineParam('FtpPath','/');
FTPPassiveMode := UpperCase(GetCmdLineParam('FtpPassiveMode','Y'))='Y';
// Мониторинг SYSLOG (допускает использование нескольких хостов через разделитель ;)
MonitoringHost := GetCmdLineParam('MonHost', '');
MonitoringHost := StringReplace(MonitoringHost, ';;', ';');
// Выключение создания карантина создания карантина
isCreateQr := true;
if UpperCase(GetCmdLineParam('NoCreateQR','N'))='Y' then
isCreateQr := false;
// Случайная задержка перед отправкой карантина
RandomDelay := StrToInt(GetCmdLineParam('StartRandomDelay','0'));
if (RandomDelay < 0) then
RandomDelay := 0;
if (RandomDelay > 1000) then
RandomDelay := 1000;
// Проверка наличия обязательных параметров
Result := (FFtpServer<>'--') and
(FFtpLogin<>'--') and
(FFtpPasswd<>'--');
end;
// Отправка локального файла AFileName под именем ASaveName
function FSendFile(AFileName, ASaveName : string) : boolean;
begin
Result := FTPSendFile(AFileName, FFtpServer, FFtpPath,
ASaveName,
FTPPassiveMode,
FFtpLogin, FFtpPasswd);
end;
// ***************** Основной скрипт *************************
var
WorkPath : string; // Рабочая папка в каталоге TEMP
LogTimeStamp : string; // Отметка времени для вставки в имя файла
WinVersion, WinBuild : string; // Данные о версии Windows
begin
// Определение версии ОС на случай использования в скрипте
WinVersion := Trim(RegKeyStrParamRead('HKEY_LOCAL_MACHINE',
'SOFTWARE\Microsoft\Windows NT\CurrentVersion',
'CurrentVersion'));
WinBuild := Trim(RegKeyStrParamRead('HKEY_LOCAL_MACHINE',
'SOFTWARE\Microsoft\Windows NT\CurrentVersion',
'CurrentBuildNumber'));
// Загрузка настроек, при неуспешности прерывание работы скрипта
if not(LoadSetup) then begin
ExitAVZ;
exit;
end;
// Создание рабочего каталога
WorkPath := NormalDir('%Tmp%\AVZ_TEMP\');
CreateDirectory(WorkPath);
// Формирование отметки времени для уникальности имен лога и карантина
LogTimeStamp := FormatDateTime('YYYYMMDDHHNNSS', Now);
// Карантин размещать в папке Temp ПК (важно в случае запуска AVZ из сетевой папки)
SetupAVZ('QuarantineBaseFolder='+WorkPath);
// Полная очистка карантинов
ClearQuarantineEx(true);
// Включение фильтра - в качестве примера исключим карантин документов и журналов
AddQuarantineFilter('*.docx');
AddQuarantineFilter('*.xlsx');
// ********* Настройка AVZ *********
SetupAVZ('UseQuarantine=Y'); // Включить карантин подозрительных
SetupAVZ('Priority=-1'); // Пониженный приоритет
SetupAVZ('EvLevel=3'); // Эвристика на максимум
SetupAVZ('ExtEvCheck=Y'); // Расширенный анализ включен
SetupAVZ('HiddenMode=3'); // GUI блокирован
SetupAVZ('KeyloggerSearch=N'); // Антикейлоггер блокирован
SetupAVZ('SaveIPToLog=Y'); // Запись IP адреса ПК в протокол
//SetupAVZ('QrOnlyEXE=Y'); // Карантин только исполняемых файлов - по необходимости
// Заголовка для неких кастомизированных настроек, зависящих от версии Windows
if WinVersion = '6.2' then begin
// Некие настройки для заданной версии Windows
end;
// Настройки для x64 систем
if IsWow64 then begin
SetupAVZ('AntiRootKitSystemKernel=N');
end;
// Активирование сторожевого таймера на 45 минут
ActivateWatchDog(60 * 45);
SendStatusInfo('Начало работы');
// Запуск сканирования (предварительно снимаем перехваты UserMode)
SearchRootkit(true, false);
RunScan;
if isCreateQr then begin
SendStatusInfo('Карантин файлов');
// Автокарантин
ExecuteAutoQuarantine;
// При необходимости принудительный карантин неких файлов по заданным критериям
//QuarantineFileF('%PF%', '*.exe,*.dll', true, 'PF-QR', 1000, 1000000);
// Создание архива с карантином
CreateQurantineArchive(WorkPath + 'avz_qr.zip');
end;
// Выполнение исследования системы
SendStatusInfo('Исследование системы');
ExecuteSysCheckEX(WorkPath + 'avz_log.htm', $FFFFFFFF, true, 1+4+8+16+64);
// Отправка архива с карантином на сервер
SendStatusInfo('Отправка протокола');
FSendFile(WorkPath + 'avz_log.zip', GetComputerName+'_'+LogTimeStamp+'_log.zip');
if isCreateQr then begin
if RandomDelay > 0 then begin
RDTimer := Trunc(Random * RandomDelay);
SendStatusInfo('Задержка отправки карантина на '+IntToStr(RDTimer)+' сек.');
Sleep(RDTimer);
end;
SendStatusInfo('Отправка карантина');
FSendFile(WorkPath + 'avz_qr.zip', GetComputerName+'_'+LogTimeStamp+'_qr.zip');
end;
// Очистка карантина и архива с ним (после отправки они не нужны)
ClearQuarantineEx(true);
// Чистка следов AVZ
ExecuteStdScr(6);
SendStatusInfo('Процесс завершен');
// Выход из AVZ
ExitAVZ;
end.
В примере использовались: ActivateWatchDog , AddQuarantineFilter , ClearQuarantineEx , CreateDirectory , CreateQurantineArchive , ExecuteAutoQuarantine , ExecuteStdScr , ExecuteSysCheckEX , ExitAVZ , FTPSendFile , GetComputerName , GetParamByName , IsWow64 , NormalDir , RegKeyStrParamRead , RunScan , SearchRootkit , SendSysLogMessage , SetupAVZ , Sleep , StringReplace
Рассмотрим сначала функции, определенные в скрипте для выделения логически завершенных операций, выполняемых в ходе работы:
  • •
    GetCmdLineParam - данная функция расширяет возможности стандартной GetParamByName и позволяет при отсутствии параметра вернуть значение по умолчанию.
  • •
    SendStatusInfo - отправляет информацию о смене статуса на один или несколько серверов SYSLOG. Данную функцию несложно переписать и реализовать некий иной алгоритм отправки информационных событий.
  • •
    LoadSetup - выполняет загрузку и верификацию настроек. В данном примере функция загружает настройки из параметров командной строки. Для ряда параметров применяются значения по умолчанию, в частности, по умолчанию применяется пассивный режим FTP, а файлы копируются в корневую папку сервера.
  • •
    FSendFile - выполняет отправку файла. Изменив реализацию данной функции можно реализовать некий иной механизм отправки, например, по электронной почте или через сетевые шары.
Логика самого скрипта достаточно простая, и сводится к следующим шагам:
1. Путем чтения параметров реестра с помощью функции RegKeyStrParamRead заполняются переменные WinVersion и WinBuild, содержащие сведения о версии операционной системы. Непосредственно для решения поставленной задачи они не нужны, но их наличие позволяет при необходимости реализовать некую логику настройки, зависящую от версии ОС.
2. При помощи созданной нами функции LoadSetup выполняется загрузка настроек и их верификация. Если настройки не позволяют продолжать исследование системы, процесс прерывается. Важно отметить, что для этого применяется пара функций: ExitAVZ и exit. Первая из них отправляет AVZ указание на то, что при первой возможности необходимо прекратить работу, но она не гарантирует немедленную остановку скрипта на следующей команде, что отличает ее от exit, которая решает обратную задачу - прерывает работу скрипта, но не обеспечивает завершение процесса работы AVZ. Их совместное использование дает гарантию того, что процесс прекратит работу и скрипт не будет выполняться далее.
3. В переменной WorkPath формируется полный путь к папке, применяемой для хранения карантинов и временных файлов. Алгоритм ее формирования может быть любым, в текущей реализации папка размещается в каталоге TEMP. При помощи параметра QuarantineBaseFolder эта папка указывается как базовая для карантинов всех типов. Подобная настройка не обязательна, но очень важна в случае, если AVZ запускается с сетевого диска - если не сделать такую настройку, карантины разных пользователей смещаются друг с другом, или будет сбой по причине нехватки прав для записи на сетевой диск.
4. При помощи ClearQuarantineEx выполняется очистка карантина. Данный шаг необходим на случай, если предыдущий запуск был неуспешен и в карантине что-то осталось.
5. При помощи AddQuarantineFilter выполняется настройка фильтра карантина. Эта операция не обязательна, но при применении в корпоративных сетях может быть полезна для исключения карантина каких либо определенных файлов. В данном примере показано, как исключить попадание в карантин файлов с расширение *.docx и *.xlsx.
6. Настройка AVZ перед сканированием и исследованием ПК. Выполняется при помощи SetupAVZ, причем в качеств примера показаны как общие настройки, так и выполняемые для заданной версии операционной системы или только для x64 версий ОС. Стоит отметить, что один и тот же параметр может меняться SetupAVZ многократно, и используется только последнее значение. Это позволяет сделать общую настройку, а затем скорректировать ее в условных блоках.
7. При помощи ActivateWatchDog настраивается сторожевой таймер, который прервет работу AVZ через 45 минут.
8. Выполняется поиск перехватчиков при помощи SearchRootkit, после чего идет сканирование путем запуска RunScan. Диски для проверки в настройках не заданы, и это сделано умышленно - сигнатурный поиск AVZ против современных malware не эффективен, и основная цель RunScan - изучение запущенных процессов, а также выполнение многочисленных эвристических проверок системы.
9. Если в настройках указана необходимость сборка карантина (режим по умолчанию), то переменная isCreateQr будет равна true и будет выполнен автоматический карантин при помощи вызова ExecuteAutoQuarantine. Закомментированный вызов QuarantineFileF является заготовкой для карантина файлов по заданным критериям. Подобная операция может быть для карантина файлов по неким критериям, определенным администратором. Аналогично может применяться вызов QuarantineFile - для карантина конкретных файлов. После карантина путем вызова CreateQurantineArchive создается архив с стандартным паролем virus.
10. Выполняется исследование системы путем вызова ExecuteSysCheckEX.
11. Выполняется отправка архивов с карантином и протоколами исследования по FTP. В качестве примера перед отправкой карантина может быть выдержана случайная задержка на время от нуля до заданного количества секунд. Эта задержка не обязательна, и полезна в случае массового одновременно запуска исследования на большом количестве ПК - в этом случае исследование системы завершится в примерно одно время, и все ПК попытаются одновременно отправить файлы, перегрузив FTP сервер и сеть. Случайная задержка на 10-20 минут существенно ослабляет данный эффект. Отправляемые файлы имеют уникальные имена, содержащие имя компьютера, отметку времени и суффикс _log для протокола и _qr для карантина.
12. При помощи ClearQuarantineEx выполняется очистка карантина, чтобы в папке TEMP не оставался мусор.
13. На всякий случай вызывается ExecuteStdScr(6) - стандартный скрипт №6, удаляющий следы драйверов AVZ из системы. Он не обязателен.
14. Завершается работа скрипта
В ключевых точках скрипта при помощи декларированной в начале скрипта SendStatusInfo производится отправка информации, позволяющей отслеживать и протоколировать ход процесса.
Пример командной строки для запуска данного скрипта (предполагается, что он хранится в папке AVZ, имя файла scan.txt):
avz5.exe script=scan.txt FtpServer=192.168.0.2 FtpLogin=avz FtpPasswd=avz MonHost=192.168.0.2
В этом случае предполагается, что FTP сервер имеет адрес 192.168.0.2, на него же по протоколу SYSLOG ведется отправка событий.
Пример режима без сбора и передачи карантинов:
avz5.exe script=scan.txt FtpServer=192.168.0.2 FtpLogin=avz FtpPasswd=avz MonHost=192.168.0.2 NoCreateQR=Y
Данный скрипт достаточно универсален, и путем незначительных доработок может быть адаптирован под конкретные задач.