Содержание статьи
- Распаковка баз
- Форматы сигнатур
- Простые текстовые паттерны (.db)
- Расширенные паттерны (.ndb, .ndu)
- Хеш-сигнатуры (.hdb, .hsb, .mdb, .msb, .imp)
- Логические сигнатуры (.ldb)
- Определение типа файла (.ftm)
- Сигнатуры иконок PE-файлов (.idb)
- Байт-кодные сигнатуры (.cbc)
- Прочие форматы
- Иерархия проверок
- Алгоритмы поиска сигнатур
- Матчер Бойера — Мура
- Автомат Ахо — Корасик
- Распаковщики
- Поддерживаемые упаковщики
- Частичная эмуляция
- Что лежит в реальных базах
- Заключение
Важно понимать место ClamAV в экосистеме. Это не конкурент десктопным антивирусам вроде Kaspersky или Windows Defender — у него нет поведенческого анализа, нет облачной репутации файлов, нет проактивной защиты, кроме ограниченного on-access-сканирования на Linux.
Книга «Обход антивирусов на практике»
Это вторая глава из книги «Обход антивирусов на практике».

В книге рассмотрен реальный обход современных антивирусных технологий, включая облака, сканирование в памяти, песочницы, эмуляторы и многое другое. Центральная тема — как сделать малварь полностью невидимой для антивирусов.
К релизу цена вырастет в два раза, поэтому автор советует предзаказать книгу уже сейчас, пока она продается по себестоимости.
Распаковка баз
Официальные сигнатуры поставляются не россыпью отдельных файлов, а в контейнерах CVD (ClamAV Virus Database). Основная база хранится в main., часто обновляемые сигнатуры — в daily., байт‑код — в bytecode.. CVD — это подписанный контейнер. В его начале находится заголовок длиной 512 байт с версией базы, количеством сигнатур, требуемым уровнем возможностей движка, контрольной суммой и цифровой подписью. Следом идет сжатый архив с файлами сигнатур: хешами, байтовыми паттернами, логическими правилами, сертификатами и другими служебными данными.
Посмотреть информацию о контейнере можно с помощью встроенной утилиты sigtool:
sigtool --info main.cvd
Команда покажет версию базы, время сборки, количество сигнатур и результат проверки подписи. sigtool извлекает файлы в текущий каталог, поэтому для них лучше заранее создать отдельную папку:
mkdir main-unpacked
cd main-unpacked
sigtool --unpack ../main.cvd
Если база установлена системным пакетом Linux, из созданного каталога ее можно распаковать по абсолютному пути:
sigtool --unpack /var/lib/clamav/main.cvd
После распаковки появятся файлы main., main., main., main., main. и main.. Большинство из них текстовые: их можно открыть в редакторе и искать нужную сигнатуру обычным поиском. Примеры ниже приведены из официальных main. версии 63 и daily. версии 28107, актуальных на 30 августа 2026 года.
Форматы сигнатур
Все форматы (кроме байт‑кода и бинарных каталогов) — текстовые файлы, где каждая строка — одна сигнатура. Поля разделяются двоеточием или точкой с запятой. Рассмотрим основные форматы сигнатур.
Простые текстовые паттерны (.db)
Файлы .db имеют устаревший формат первого поколения. Каждая строка состоит из имени сигнатуры и шестнадцатеричного паттерна, разделенных знаком равенства. После знака равенства используется общий синтаксис байтовых паттернов ClamAV.
| Конструкция | Что означает |
|---|---|
AB | Точный байт 0xAB |
?? | Один произвольный байт |
* | Любое количество произвольных байтов, включая ноль |
{ | Ровно пять произвольных байтов |
{ | Не более пяти произвольных байтов |
{ | Не менее пяти произвольных байтов |
4142{ | Найти байты 4142, пропустить от двух до пяти любых байтов, затем найти 4344. Фигурные скобки используются, когда по обе стороны пропуска есть фиксированные блоки минимум по два байта |
( | Один из перечисленных байтов или последовательностей |
Общий парсер движка поддерживает и более сложные конструкции: маски половины байта, диапазоны в квадратных скобках, отрицательные альтернативы и классы границ. Однако в официальных файлах .db они не встречаются, поэтому здесь не рассматриваются.
При стандартных настройках паттерн с масками должен содержать хотя бы два последовательных точных байта: 41??42 будет отклонен, а 4142??4344 — принят. * и переменные пропуски, например {, делят паттерн на части, и такой двухбайтовый фрагмент нужен в каждой части.
Это требование связано с реализацией автомата Ахо — Корасик. Для добавления каждой части паттерна в дерево поиска нужен непрерывный фрагмент минимум из двух точных байтов. Сам алгоритм будет рассмотрен ниже.
Фиксированный пропуск {, где N — от 1 до 127, обрабатывается иначе: например, { превращается в пять ??.
June7=018ccb81c33f005350cb
Паттерн состоит только из точных байтов и не содержит подстановочных конструкций.
VCL-II3=01b9????8135????4747e2f8c3
Каждая последовательность ???? заменяет два произвольных байта.
DOS.Dead=b9ac01{9-11}8d7c14{2-3}2e300547e2f8
Между фиксированными частями допускаются сначала от 9 до 11, а затем от 2 до 3 произвольных байтов.
W98.Hybris.E=10400081*75f16800104000c300000000
Звездочка разрешает промежуток любой длины между двумя фиксированными частями.
SymbOS.Trojan.Doombot=2e0064006c006c00??003a005c00(45|65)00(54|74)0065006c002e0064006c006c00
Конструкция ?? заменяет один байт, а ( и ( допускают прописные или строчные ASCII-буквы E/e и T/t.
DOS.Kasiunia=bb1400baad0e2e3007434a{-4}75f5
Конструкция { допускает от нуля до четырех произвольных байтов.
Загрузчик .db передает паттерн общему механизму поиска с позицией *, поэтому совпадение ищется во всем сканируемом объекте. Обычные фиксированные последовательности могут обрабатываться алгоритмом Бойера — Мура, а конструкции с масками, пропусками и альтернативами — автоматом Ахо — Корасик.
Расширенные паттерны (.ndb, .ndu)
В файлах .ndb хранятся расширенные байтовые сигнатуры ClamAV: все конструкции hex-паттернов из формата .db действуют и здесь. Сигнатуры в контейнере .ndu используют тот же синтаксис, но предназначены для обнаружения потенциально нежелательного ПО (PUA — Potentially Unwanted Applications).
Win.Ransomware.BlackCat-9974801-0:1:*:6c6f636b65723a3a636f72653a3a:90:255
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
