Модули для загрузки обновлений БВС Dr.Web
Загрузчик баз вирусных сигнатур антивирусов Dr.Web
Проект загрузчика представляет собой набор созданных на python модулей, которые обращаются к официальным утилитам скачивания антивирусных баз Dr.Web в локальный репозиторий. При использовании ЗБВС Доктора Веба отпадает необходимость в нескольких дополнительных компьютерах, которые служат исключительно для получения баз вирусных сигнатур ДВ. Всё выполняется на одном устройстве!
Разработка и тестирование проводились в среде, использующей программное обеспечение:
- Windows 7 Service Pack 1
- Python 3.8
- JetBrains PyCharm Community Edition 2022.1.2
- LZMA SDK
- Отдельные модули продуктов 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
Cодержит директории, где расположены исполняемые модули загрузки локальных репозиториев от DrWeb
│ ├── drw110
│ ├──├────ess11002
│ ├──├────ess11
│ ├──├────ss115
│ ├──├────ss11
│ ├── drw900
│ ├──├────ess10
│ ├──├────ss10
│ ├── drw700
│ ├──├────ss9
│ ├──├──── drw6 (не используется в работе ЗБВС Доктора Веба)
│ ├── drw500 (не используется в работе ЗБВС Доктора Веба)
В директорию key НЕОБХОДИМО поместить актуальный ключевой файл agent.key! В противном случае ЗБВС Доктора Веба не произведёт загрузку баз.
│ ├── agent.key (ваш файл лицензии)
Директория содержит созданные утилитарные python-классы для ведения логгирования проекта (LoggingUtils.py, общий лог-файл ведётся в корне проекта: logfile.log) и очистки директорий (PathUtils.py). В поддиректории bin помещена внешняя утилита 7zr.exe из состава LZMA SDK, которая позволяет распаковывать архивы .lzma формата.
│ ├── bin
│ ├──├────7zr.exe
│ ├──├────README.txt
│ ├── LoggingUtils.py (класс LoggingUtils)
│ ├── PathUtils.py (класс PathUtils)
В директории размещены 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)
Основной лог программы
Точка входа в программу. Скрипт с единственной функцией main(), в которой выполняется создание объектов классов загрузчиков из директории downloaders и старт их логики. Создание объектов каждого класса обёрнуто в блок try-except.
- Python 3.8
- LZMA SDK
- Batch (.bat)
- Работа с файловой системой
- ООП :-)
- Создать копию этого репозитория в отдельной папке
git clone https://github.com/vokash3/drweb_bases_updater
-
Приобрести лицензию и поместить ключевой файл agent.key в директорию key
-
Далее, выполнить start_drweb_update.py в корне проекта, используя python (желательно сразу с правами администратора из командной строки, чтобы исключить подтверждения запуска загрузчиков DrWeb)
python3.8 start_drweb_update.py
- Дополнительно: Если имеются ранее загруженные репозитории 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_Bases (в DrWeb_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 архивы уже не попадают.