Skip to content

Загрузчик баз вирусных сигнатур Dr.Web

Notifications You must be signed in to change notification settings

vokash3/Dr.Web_Bases_Downloader

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Dr.Web Bases Downloader

Модули для загрузки обновлений БВС Dr.Web

✰✭ ЗБВС Доктора Веба ✭✰

Загрузчик баз вирусных сигнатур антивирусов Dr.Web

Проект загрузчика представляет собой набор созданных на python модулей, которые обращаются к официальным утилитам скачивания антивирусных баз Dr.Web в локальный репозиторий. При использовании ЗБВС Доктора Веба отпадает необходимость в нескольких дополнительных компьютерах, которые служат исключительно для получения баз вирусных сигнатур ДВ. Всё выполняется на одном устройстве!

Разработка и тестирование проводились в среде, использующей программное обеспечение:

Список загружаемых БВС:

    - Dr.Web Enterprise Security Suite 11.00.2 (ФСТЭК)
    - Dr.Web Enterprise Security Suite 11 (ФСТЭК)
    - Dr.Web Enterprise Security Suite 10 (ФСТЭК)
    - Dr.Web Security Space 11.5 (ФСТЭК)
    - Dr.Web Security Space 11
    - Dr.Web Security Space 10 (ФСТЭК)
    - Dr.Web Security Space 9
    - Dr.Web Desktop Security Suite (for Lunux) 11 
    - Dr.Web Desktop Security Suite (for Lunux) 10 (ФСТЭК)
Требования для успешного запуска и выполнения загрузчика:
  • Стабильное интернет соединение
  • Операционная система Windows 7 SP 1
  • Python 3.8
  • Свободное место на накопителе: 6-7 Гб
  • Актуальный ключевой файл agent.key.
  • (GIT)

Также проведено успешное тестирование на Windows 11 (21H2) с Python 3.10

Структура проекта

├──DrWeb_Downloaders

Cодержит директории, где расположены исполняемые модули загрузки локальных репозиториев от DrWeb

│ ├── drw110

│ ├──├────ess11002

│ ├──├────ess11

│ ├──├────ss115

│ ├──├────ss11

│ ├── drw900

│ ├──├────ess10

│ ├──├────ss10

│ ├── drw700

│ ├──├────ss9

│ ├──├──── drw6 (не используется в работе ЗБВС Доктора Веба)

│ ├── drw500 (не используется в работе ЗБВС Доктора Веба)

├──key

В директорию key НЕОБХОДИМО поместить актуальный ключевой файл agent.key! В противном случае ЗБВС Доктора Веба не произведёт загрузку баз.

│ ├── agent.key (ваш файл лицензии)

├──Utils

Директория содержит созданные утилитарные python-классы для ведения логгирования проекта (LoggingUtils.py, общий лог-файл ведётся в корне проекта: logfile.log) и очистки директорий (PathUtils.py). В поддиректории bin помещена внешняя утилита 7zr.exe из состава LZMA SDK, которая позволяет распаковывать архивы .lzma формата.

│ ├── bin

│ ├──├────7zr.exe

│ ├──├────README.txt

│ ├── LoggingUtils.py (класс LoggingUtils)

│ ├── PathUtils.py (класс PathUtils)

├──downloaders

В директории размещены python-классы, содержащие основную логику формирования архивов с БВС. Принцип их работы и взаимодействия описан в разделе "Принцип работы".

│ ├── drweb_ess11_bases_download.py (класс - родитель DrWebESS11Downloader для ESS загрузчиков)

│ ├── drweb_ess10_bases_download.py (класс DrWebESS10Downloader, наследующий DrWebESS11Downloader)

│ ├── drweb_ess11002_bases_download.py (класс DrWebESS11002Downloader, наследующий DrWebESS11Downloader)

│ ├── drweb_ss_bases_download.py (класс DrWebSSDownloader)

│ ├── drweb_linux_bases_creator.py (класс DrWebLinuxBasesCreator)

├──logfile.log

Основной лог программы

├──start_drweb_update.py (ЗАПУСК)

Точка входа в программу. Скрипт с единственной функцией main(), в которой выполняется создание объектов классов загрузчиков из директории downloaders и старт их логики. Создание объектов каждого класса обёрнуто в блок try-except.

Технологии

Установка и запуск

  1. Создать копию этого репозитория в отдельной папке
git clone https://github.com/vokash3/drweb_bases_updater
  1. Приобрести лицензию и поместить ключевой файл agent.key в директорию key

  2. Далее, выполнить start_drweb_update.py в корне проекта, используя python (желательно сразу с правами администратора из командной строки, чтобы исключить подтверждения запуска загрузчиков DrWeb)

python3.8 start_drweb_update.py
  1. Дополнительно: Если имеются ранее загруженные репозитории DrWeb Security Space (обычно скачиваются в папку repo загрузчиков), следует скопировать/переместить каталог repo в директории соответсвующих версий ЗБВС Доктора Веба (.../DrWeb_Downloaders/drw110/ss11 и т.п.). Примерная структура repo:
├──repo
│   ├──90
│   ├──certificate.xml
│   ├──repodb.xml
│   ├──script.lua.lzma
│   ├──versions.xml
├─────────────────────────

Принцип работы

Запуск start_drweb_update.py, в котором инициализируются основные переменные относительных путей к докторвебовским загрузчикам, утилите разархивации, создаётся объект логгирования, формирование текущей даты.

В основной и единственной функции main() производится поочерёдное создание объектов классов DrWebESS11Downloader--DrWebESS11002Downloader--DrWebESS10Downloader--DrWebSSDownloader--DrWebLinuxBasesCreator. Запуск каждого модуля обёрнут блоком try-except

... ... ...
try:
        if DrWebSSDownloader(bases_directory, weekly_bases_directory, ss115dir, "DRW_SS11.5","DRW_SS11.5_").download_bases() is None:
            raise Exception("Returned None!")
        result_string += format_result_string.format('DrWeb SS 11.5', 'OK!')
except Exception as err:
        log.error(err, exc_info=True)
        result_string += format_result_string.format('DrWeb SS 11.5', 'FAIL')
... ... ...

Если отсутсвует необходимость загрузки БВС какой-либо версий, то соответсвующий блок следует закомментировать (#)

Все классы загрузчиков из downloaders (* за исключением DrWebLinuxBasesCreator) вызывают в соответсвующих директориях скрипты START.bat, в которых описан запуск с параметрами утилит загрузки от Доктор Веб. Далее, во всех классах реализован одинаковый сценарий:

  • Создание zip-архива с актуальными БВС (+ weekly архив, содержащий файлы не старее 7 дней (можно изменить в переменной novelty_period));
  • Формирование контрольной суммы (md5) архива(-ов);
  • Перемещение zip-архива и md5 в директорию DrWeb_BasesDrWeb_Weekly_Bases - для weekly). Директории создаются автоматически при самом первом запуске.

(*) Класс DrWebLinuxBasesCreator использует уже загруженный репозиторий актуальных баз в процессе выполнения метода DrWebSSDownloader.download_bases(). Поэтому вызов DrWebLinuxBasesCreator.create_linux_bases() всегда следует после DrWebSSDownloader.download_bases() для соответсвующих версий (пример из start_drweb_update.py ниже).

... ... ...
try:
    if DrWebSSDownloader(bases_directory, weekly_bases_directory, ss11dir, "DRW_SS11", "DRW_SS11_").download_bases() is None:
        raise Exception("Returned None!")
    result_string += format_result_string.format('DrWeb SS 11', 'OK!')
except Exception as err:
    log.error(err, exc_info=True)
    result_string += format_result_string.format('DrWeb SS 11', 'FAIL')

try:
    if DrWebLinuxBasesCreator(bases_directory, weekly_bases_directory, ss11dir, "DRW_Linux11", "DRW_Linux11_", util_7zr_path).create_linux_bases() is None:
        raise Exception("Returned None!")
    result_string += format_result_string.format('Linux 11', 'OK!')
except Exception as err:
    log.error(err, exc_info=True)
    result_string += format_result_string.format('Linux 11', 'FAIL')
... ... ...

Результат выполнения ЗБВС Доктор Веба можно посмотреть в конце лога logfile.log

2022-07-14 16:05 start_drweb_update.py: INFO : 
DrWeb ESS 11     ======================> [ OK!]
DrWeb ESS 11.00.2 ======================> [ OK!]
DrWeb ESS 10     ======================> [ OK!]
DrWeb SS 11.5    ======================> [ OK!]
DrWeb SS 11      ======================> [ OK!]
Linux 11         ======================> [ OK!]
DrWeb SS 10      ======================> [ OK!]
Linux10          ======================> [ OK!]
DrWeb SS 9       ======================> [ OK!]
2022-07-14 16:05 start_drweb_update.py: INFO : 
ВРЕМЯ ВЫПОЛНЕНИЯ ПРОГРАММЫ:            00:19:57

Предупреждения

  • Приблизительное время выполнения ЗБВС Доктора Веба - 1.5 часа при первоначальном запуске без имеющихся repo.
  • Загрузчики DrWeb SS скачивают актуальные БВС в папки repo, которые "накапливают" последние обновления. Их удалять не рекомендуется, если требуется корректное формирование weekly-архивов. При уже имеющихся repo соответсвующих версий рекомендуется их поместить в директории загрузчиков (ss11, ss10 и т.д.)
  • При старте start_drweb_update.py без прав администратора необходимо подтвержать поочерёдный запуск загрузчиков ESS. В случае длительного отсутствия подтверждения от пользователя базы ESS не будут загружены (ESS [FAIL])
  • В случае обнаружения [FAIL] следует проверить logfile.log, а также логи загрузчиков (drwreploader.log/dwupdater.log) из директории DrWeb_Downloaders и устранить обнаруженные проблемы.
  • Каждый запуск start_drweb_update.py создаёт/очищает от старых загрузок директории DrWeb_Bases и DrWeb_Weekly_Bases перед выполнением основной логики
  • Weekly-архивы после первоначального запуска будут иметь большой объём (по содержанию не отличаются от обычных архивов с БВС), так как все загружаемые файлы на момент первоначальной загрузки не старее 7-ми дней (или указанного периода в переменной novelty_period). Внутри директорий модулей загрузки (ss11, ss10 и т.п.) загрузчиком DrWeb создаётся каталог repo с базами. Каждое последующее обновление скачивает только актуальные/новые файлы с серверов DrWeb. Таким образом, спустя некоторый период времени repo будет содержать как новые файлы сигнатур, так и файлы без изменений, которые в weekly архивы уже не попадают.