Как сделать свой антивирус
Перейти к содержимому

Как сделать свой антивирус

Статья Пишем свой сигнатурный антивирус на C#. Часть 1 — Небольшой экскурс в YARA.

Всем доброго времени суток уважаемые участники форума. В этот раз мы напишем свой сигнатурный антивирус(Название можете предложить в комментариях). Возможно также добавиться какой-то функционал. Теперь перейдем к теме, а именно к 1-й части — "Небольшой экскурс в YARA".

  • В первой части мы разберем Yara проект. Разберем как установить инструмент, как получить yara-правила, найдем угрозы.
  • Во второй части научимся сами писать yara-правила.
  • В третьей части напишем антивирус.

Что такое YARA?
Yara — это инструмент, который помогает нам идентифицировать и классифицировать образцы вредоносных программ с помощью правил. Мы можем использовать Yara для классификации файлов или запуска процессов, чтобы определить, к какому семейству относятся вредоносные программы.

Также YARA является мультиплатформенным инструментом, работает на всех популярных ОС и может использоваться через интерфейс командной строки или из ваших собственных скриптов Python с расширением yara-python. Также можно использовать GUI(Рассмотрим далее).

Установка.
Чтобы установить Yara, сначала нужно выполнить следующую команду:
apt install yara

1548226897972.png

После этого мы можем использовать Yara, выполнив команду yara, которая по умолчанию отобразит справку по использованию, как показано ниже:

Мы видим, что для запуска Yara нам нужно предоставить набор правил (RULEFILE), которые мы хотим применить, и путь к файлу (FILE) или pid (PID) процесса, который мы хотим сканировать.

Подготовка правил для тестов.
Правила ClamAV:

Теперь нам нужно получить файл правил, чтобы использовать Yara. В следующей части мы сами напишем файл с правилами, но сейчас будем использовать правила ClamAV. Единственная проблема с правилами ClamAV состоит в том, что мы не можем использовать их непосредственно с Yara, потому что Yara имеет свой собственный способ их описания(свой синтаксис).

Именно здесь вступает в игру скрипт clamav_to_yara.py .

Для этого нам нужно клонировать SVN-репозиторий, который включает скрипт python clamav_to_yara.py .
Ссылка на репозиторий mattulm/volgui

  • wget https://raw.githubusercontent.com/mattulm/volgui/master/tools/clamav_to_yara.py

1548230722465.png

  • python clamav_to_yara.py .

1548230619774.png

  • wget http://database.clamav.net/main.cvd
  • sigtool —unpack main.cvd

1548230935363.png

1548230985274.png

  • python clamav_to_yara.py -f main.ndb -o test.yara
  • yara -r test.yara /myfolder_for_test

Правила PEiD можно скачать с сайта:

Чтобы преобразовать правила PEiD в правила Yara, мы можем просто использовать Python скрипт peid_to_yara.py , который также можно загрузить с jvoisin/yara_rules

1548230802973.png

Затем мы выполняем преобразование, выполнив следующую команду: python peid_to_yara.py -f userdb.txt -o peid.yara
После завершения команды подписи Yara будут содержаться в выходном файле peid.yara.

Тестовый вирус — EICAR
Теперь нам нужен какой-либо вирус для наших тестов, но если у вас нет желания тестировать реальные вирусы, которые также могут принести вред вашему ПК при тесте, вы можете сами создать тестовый вирус, но он будет совершенно безобидным.

EICAR вирус — это небольшой кусок текста, суть которого заключается в том, что все современные AV его обнаруживают.
Мы будем его также тестировать в “полевых условиях”, например, для проверки нашего AV( Если конечно статья вам зайдет ).

1548233263971.png

Но в этой статье мы проверим обнаруживают ли его инструмент Yara.

Теперь давайте сотворим этот “псевдо-вирус”
Для этого создайте файл и вставьте следующий текст: X5O!P%@AP[4\PZX54(P^)7CC)7>$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H* .
После этого вам необходимо сохранить файл под любым расширением(exe, com, bat, asm…)

Где взять реальные вирусы.

Если вам тестовый вирус EICAR чем-то не устраивает, то можно воспользоваться базой для скачивания реальных вирусов.
Для этих целей можно воспользоваться сервисом —

Среди плюшек можно отметить, что у каждого вируса имеется MD5,SHA-1,SHA-256 хэшы, IP-адресса.(Это нам поможет при написание Yara-правил).

Следующий сервис для скачивания и исследования вирусов это

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

Создав свой антивирус, а создавать мы будем используя базу Yara-правил. Мы можем автоматически классифицировать вредоносные программы, правда пока только с помощью правил. Это очень полезно, когда нам быстро необходимо просканировать образец вредоносного ПО определенной категории.
Также думаю я добавлю функционал заливки файла на

для точного обнаружения.

Именно на основе Yara правил мы и будем создавать свой сигнатурный AV.

YARA GUI для Windows.
Как я и обещал, для тех кому не нравиться возиться с установкой yara либо с правилами и еще хочется работать в GUI режиме + под платформой Windows можно воспользоватся YARA GUI.
Скачать можно отсюда:

1548231957280.png

Демонстрация.
И так теперь проверим и посмотрим как протестировать файл(папку).
Для тестирование папки мы должны выполнить следующую команду: yara -r <Yara-правило> <Сканируемая папка>
В моем случае я тестирую уязвимый дамп памяти:

1548232351504.png

Как видно помимо различной информации вредоносный дамп был успешно обнаружен как Empire ReflectivePick x64.

Еще пару сканирований:

1548232573490.png

Чтобы убрать лишнюю информацию нужно использовать атрибут -w

1548232656913.png

Теперь рассмотрим как ищет "зловреда" Yara GUI версия для Windows.

1548234414646.png

1548234580256.png

1548667087427.png

Подводим итог.
В этой статье мы рассмотрели, как мы можем использовать продукт Yara с использованием ClamAV, PEiD правил для поиска вредоносных сигнатур в файлах.
Вышеупомянутый подход основан только на проверке сигнатуру(блока информации), что означает, что нетрудно обмануть Yara (с загруженными правилами ClamAV и PEiD).

Честно сказать, данный продукт может обнаруживать только известные вредоносные программы. Но если мы напишем нашу собственный вирус или закодируем его с помощью нашего собственного кодировщика, он, вероятно, не будет обнаружен, поскольку в Yara не загружены соответствующие сигнатуры. Этот пункт касается и нашего будущего антивируса.

Тем не менее, использование Yara для обнаружения вредоносной активности в файлах по-прежнему выгодно, поскольку большинство вредоносных программ в Интернете представляют собой стандартные вредоносные файлы и не содержат дополнительной маскировки, поэтому большинство вредоносных файлов можно обнаружить.

Сигнатурные дела: Анализатор файлов и антивирус — своими руками

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

Слово автора

Сразу хочу сказать, что это статья не про суровый реверсинг. И даже не про анализ малвари. Скорее я хотел бы поделиться опытом, как огромное количество открытых разработок позволяет быстро, буквально на коленке собрать прототипы систем, которые на начальных этапах вполне смогут справляться с поставленной задачей. Такого прототипа вполне может быть достаточно, чтобы оценить состоятельность разработки и понять, нужно ли двигаться в этом направлении вообще. Разработать прототип сигнатурного анализатора, который бы работал онлайн и мог быть дополнен новыми сигнатурами через веб-интерфейс, и стало моей задачей.
Сначала предлагалось найти какие-то открытые базы сигнатур малвари, что оказалось довольно просто. Но обо всем по порядку.

Сигнатурный анализ

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

Тут есть различные методики. Как вариант — использовать сигнатуру, составленную из N байт вредоносного объекта. При этом можно сделать не тупое сравнение, а сравнение по некоторой маске (типа искать байты EB ?? ?? CD 13). Или задавать дополнительные условия вроде «такие-то байты должны находиться у точки входа в программу» и так далее. Сигнатура именно малвари — это частность.

Точно так же описываются некоторые признаки, по которым можно определить, что исполняемый файл упакован тем или иным криптором или упаковщиком (например, банальным ASPack). Если ты внимательно читаешь наш журнал, то точно слышал о такой тулзе как PEiD, способной определять наиболее часто используемые упаковщики, крипторы и компиляторы (в базе есть большое количество сигнатур) для переданного ей PE-файла. Увы, новые версии программы давно не выходят, а недавно на официальном сайте и вовсе появилось сообщение, что дальнейшего развития у проекта не будет. Жаль, потому что возможности PEiD (особенно учитывая систему плагинов) вполне могли оказаться мне полезными. После недолгого анализа все-таки стало ясно, что это не вариант. Но покопавшись в англоязычных блогах, я быстро нашел то, что мне подошло. Проект YARA (code.google.com/p/yara-project).

Что такое YARA?

Я был с самого начала убежден, что где-то в Сети уже есть открытые разработки, которая бы взяли на себя задачу определения соответствия между некоторой сигнатурой и исследуемым файлом. Если бы я смог найти такой проект, то его легко можно было бы поставить на рельсы веб-приложения, добавить туда разных сигнатур и получить то, что от меня требовалось. План стал казаться еще более реальным, когда я прочитал описание проекта YARA.

Сами разработчики позиционируют его как инструмент для помощи исследователям малвари в идентификации и классификации вредоносных семплов. Исследователь может создать описания для разного типа зловредов, используя текстовые или бинарные паттерны, в которых описываются формализованные признаки малвари. Таким образом получаются сигнатуры. По сути, каждое описание состоит из набора строк и некоторого логического выражения, на основе которого определяется логика срабатывания анализатора.

Если для исследуемого файла выполняются условия одного из правил, он определяется соответствующим образом (к примеру, червь такой-то). Простой пример правила, чтобы понимать, о чем идет речь:

rule silent_banker : banker
<
meta:
description = «This is just an example»
thread_level = 3
in_the_wild = true
strings:
$a = <6A 40 68 00 30 00 00 6A 14 8D 91>
$b = <8D 4D B0 2B C1 83 C0 27 99 6A 4E 59 F7 F9>
$c = «UVODFRYSIHLNWPEJXQZAKCBGMT»
condition:
$a or $b or $c
>

В этом правиле мы говорим YARA, что любой файл, который содержит хотя бы одну из строк-семплов, описанных в переменных $a, $b, $c, должен классифицироваться как троян silent_banker. И это очень простое правило. На деле рулесы могут быть гораздо сложнее (мы об этом поговорим ниже).
Об авторитете проекта YARA говорит уже даже список проектов, которые его используют, а это:

  • VirusTotal Malware Intelligence Services (vt-mis.com);
  • jsunpack-n (jsunpack.jeek.org);
  • We Watch Your Website (wewatchyourwebsite.com).

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

Немного покопавшись, я довольно быстро разобрался, как писать для YARA правила, а также как прикрутить к нему сигнатуры вирусов от бесплатного авера и упаковщиков от PEiD. Но начнем мы с установки.

Установка

Как я уже сказал, проект написан на Python’е, поэтому легко может быть установлен и на Linux, и на Windows, и на Mac. На первых порах можно просто взять бинарник. Если вызвать приложение в консоли, то получим правила для запуска.

$ yara
usage: yara [OPTION]. [RULEFILE]. FILE | PID

То есть формат вызова программы следующий: сначала идет имя программы, затем список опций, после чего указывается файл с правилами, а в самом конце — имя исследуемого файла (или каталога, содержащего файлы), либо идентификатор процесса. Сейчас бы по-хорошему объяснить, как эти самые правила составляются, но не хочу сразу грузить тебя сухой теорией. Поэтому мы поступим по-другому и позаимствуем чужие сигнатуры, чтобы YARA мог выполнять одну из поставленных нами задач — полноценное определение вирусов по сигнатурам.

Свой антивирус

Самый главный вопрос: где взять базу сигнатур известных вирусов? Антивирусные компании активно делятся такими базами между собой (кто-то более щедро, кто-то — менее). Если честно, я поначалу даже сомневался, что где-то в Сети кто-то открыто выкладывает подобные вещи. Но, как оказалось, есть добрые люди. Подходящая база из популярного антивируса ClamAV доступна всем желающим (clamav.net/lang/en). В разделе «Latest Stable Release» можно найти ссылку на последнюю версию антивирусного продукта, а также ссылки для скачивания вирусных баз ClamAV. Нас прежде всего будут интересовать файлы main.cvd (db.local.clamav.net/main.cvd) и daily.cvd (db.local.clamav.net/daily.cvd).

Первый содержит основную базу сигнатур, второй — самую полную на данный момент базу с различными дополнениями. Для поставленной цели вполне хватит daily.cvd, в котором собрано более 100 000 слепков малвари. Однако база ClamAV — это не база YARA, так что нам необходимо преобразовать ее в нужный формат. Но как? Ведь мы пока ничего не знаем ни о формате ClamAV, ни о формате Yara. Об этой проблеме уже позаботились до нас, подготовив небольшой скриптик, конвертирующий базу вирусных сигнатур ClamAV в набор правил YARA. Сценарий называется clamav_to_ yara.py и написан Мэтью Ричардом (bit.ly/ij5HVs). Скачиваем скрипт и конвертируем базы:

$ python clamav_to_yara.py -f daily.cvd -o clamav.yara

В результате в файле clamav.yara мы получим сигнатурную базу, которая сразу будет готова к использованию. Попробуем теперь комбинацию YARA и базы от ClamAV в действии. Сканирование папки с использованием сигнатуры выполняется одной единственной командой:

$ yara -r clamav.yara /pentest/msf3/data

Опция -r указывает, что сканирование необходимо проводить рекурсивно по всем подпапкам текущей папки. Если в папке /pentest/msf3/data были какие-то тела вирусов (по крайней мере тех, что есть в базе ClamAV), то YARA немедленно об этом сообщит. В принципе, это уже готовый сигнатурный сканер. Для большего удобства я написал простой скрипт, который проверял обновления базы у ClamAV, закачивал новые сигнатуры и преобразовывал их в формат YARA. Но это уже детали. Одна часть задачи выполнена, теперь можно приступать к составлению правил для определения упаковщиков/крипторов. Но для этого пришлось немного с ними разобраться.

Игра по правилам

Итак, правило — это основной механизм программы, позволяющий отнести заданный файл к какой-либо категории. Правила описываются в отдельном файле (или файлах) и по своему виду очень напоминают конструкцию struct<> из языка С/С++.

rule BadBoy
<
strings:
$a = «win.exe»
$b = «http://foo.com/badfi le1.exe»
$c = «http://bar.com/badfi le2.exe»
condition:
$a and ($b or $c)
>

В принципе, ничего сложного в написании правил нет. В рамках этой статьи я коснулся лишь основных моментов, а детали ты найдешь в мануле. Пока же десять самых важных пунктов:

1. Каждое правило начинается с ключевого слова rule, после которого идет идентификатор правила. Идентификаторы могут иметь такие же имена, как и переменные в C/С++, то есть состоять из букв и цифр, причем первый символ не может быть цифрой. Максимальная длина имени идентификатора — 128 символов.

2. Обычно правила состоят из двух секций: секция определений (strings) и секция условия (condition). В секции strings задаются данные, на основе которых в секции condition будет приниматься решение, удовлетворяет ли заданный файл определенным условиям.

3.Каждая строка в разделе strings имеет свой идентификатор, который начинается со знака $ — в общем, как объявление переменной в php. YARA поддерживает обычные строки, заключенные в двойные кавычки (« ») и шестнадцатеричные строки, заключенные в фигурные скобки (<>), а также регулярные выражения:

$my_text_string = «text here»
$my_hex_string =

4.В секции condition содержится вся логика правила. Эта секция должна содержать логическое выражение, определяющее, в каком случае файл или процесс удовлетворяет правилу. Обычно в этой секции идет обращение к ранее объявленным строкам. А идентификатор строки рассматривается в качестве логической переменной, которая возвращает true, если строка была найдена в файле или памяти процесса, и false в противном случае. Вышеуказанное правило определяет, что файлы и процессы, содержащие строку win.exe и один из двух URL, должны быть отнесены к категории BadBoy (по имени правила).

5. Шестнадцатеричные строки позволяют использовать три конструкции, которые делают их более гибкими: подстановки (wildcards), диапазоны (jumps) и альтернативный выбор (alternatives). Подстановки — это места в строке, которые неизвестны, и на их месте может быть любое значение. Обозначаются они символом «?»:

Такой подход очень удобен при задании строк, длина которых известна, а содержимое может меняться. Если же часть строки может быть разной длины, удобно использовать диапазоны:

Данная запись означает, что в средине строки может быть от 4 до 6 различных байт. Можно реализовать также и альтернативный выбор:

Это означает, что на месте третьего байта может быть 62 В4 или 56, такой записи соответствуют строки F42362B445 или F4235645.

6. Чтобы проверить, что заданная строка находится по определенному смещению в файле или адресном пространстве процесса, используется оператор at:

$a at 100 and $b at 200

Если строка может находиться внутри определенного диапазона адресов, используется оператор in:

$a in (0..100) and $b in (100..fi lesize)

Иногда возникают ситуации, когда необходимо указать, что файл должен содержать определенное число из заданного набора. Делается это с помощью оператора of:

rule OfExample1
<
strings:
$foo1 = «dummy1»
$foo2 = «dummy2»
$foo3 = «dummy3»
condition:
2 of ($foo1,$foo2,$foo3)
>

Приведенное правило требует, чтобы файл содержал любые две строки из множества ($foo1,$foo2,$foo3). Вместо указания конкретного числа строк в файле можно использовать переменные any (хотя бы одна строка из заданного множества) и all (все строки из заданного множества).

7. Ну и последняя интересная возможность, которую надо рассмотреть — применение одного условия ко многим строкам. Эта возможность очень похожа на оператор of, только более мощная — это оператор for..of:

for expression of string_set : ( boolean_expression )

Данную запись надо читать так: из строк, заданных в string_ set, по крайней мере expression штук должно удовлетворять условию boolean_expression. Или, другими словами: выражение boolean_expression вычисляется для каждой строки из string_set, и expression из них должны возвратить значение True. Далее мы рассмотрим эту конструкцию на конкретном примере.

Делаем PEiD

Итак, когда с правилами все стало более менее ясно, можно приступать к реализации в нашем проекте детектора упаковщиков и крипторов. В качестве исходного материала на первых порах я позаимствовал сигнатуры известных упаковщиков у все того же PEiD. В папке plugins находится файл userdb.txt, который и содержит то, что нам нужно. В моей базе оказалось 1850 сигнатур.

Немало, так что для того, чтобы полностью импортировать их, советую написать какой-нибудь скриптик. Формат этой базы прост — используется обычный текстовый файл, в котором хранятся записи вида:

[Name of the Packer v1.0]
signature = 50 E8 ?? ?? ?? ?? 58 25 ?? F0 FF FF 8B C8 83 C1 60 51 83 C0 40 83 EA 06 52 FF 20 9D C3
ep_only = true

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

Ну что, попробуем создать правило, скажем, для ASPack? Как оказалось, в этом нет ничего сложного. Сначала создадим файл для хранения правил и назовем его, например, packers.yara. Затем ищем в базе PEiD все сигнатуры, в названии которых фигурирует ASPack, и переносим их в правило:

У всех найденных записей флаг ep_only установлен в true, то есть эти строки должны располагаться по адресу точки входа. Поэтому мы пишем следующее условие: «for any of them : ($ at entrypoint)».

Таким образом, наличие хоть одной из заданных строк по адресу точки входа будет означать, что файл упакован ASPack’ом. Обрати также внимание, что в данном правиле все строки заданы просто с помощью знака $, без идентификатора. Это возможно, так как в condition-секции мы не обращаемся к каким-то конкретным из них, а используем весь набор.

Чтобы проверить работоспособность полученной системы, достаточно выполнить в консоли команду:

$ yara -r packers.yara somefi le.exe

Скормив туда пару приложений, упакованных ASPack’ом, я убедился, что все работает!

Готовый прототип

YARA оказался на редкость понятным и прозрачным инструментом. Мне не составило большого труда написать для него вебадминку и наладить работу в качестве веб-сервиса. Немного креатива, и сухие результаты анализатора уже раскрашиваются разными цветами, обозначая степень опасности найденного зловреда. Небольшое обновление базы, и для многих из крипторов доступно краткое описание, а иногда даже и инструкция по распаковке. Прототип создан и работает отменно, а начальство пляшет от восторга!

Пишем свою антивирусную утилиту. Часть 1 — Подготовка

Скажите, а не хотелось бы вам написать свой собственный антивирус? Если да, то это статья для вас.

Компьютерные вирусы – бич современного айти общества. Еще с далекого 1983 года, когда Оуен продемонстрировал широкой публике вредоносный код, который прозвали вирусом, стало ясно, что компьютерные системы весьма уязвимы. С тех пор прошло почти 30 лет, за которые компьютерные вирусы постоянно эволюционировали. Нет смысла писать о том, сколько вреда нанесли эти вредоносные программы (малварь или зловред на компьютерном лексиконе) экономике. В СМИ то и дело появляется об этом очередная заметка.

Что же такое компьютерный вирус в широком смысле этого термина? Зловредом принят считать код, так или иначе вредящей нормальной работе компьютера. Наверняка вы и сами неоднократно сталкивались с подхваченным вирусом. Нормальный вирус должен уметь заражать обычные файлы, размножаться, иметь полиморфную структуру (чтобы его не детектили антивирусы) и т.д. К компьютерным вирусам также относят троянцев, червей и различные вредоносные скрипты. Также к ним в какой то мере можно отнести и руткиты, но это не совсем верно. Просто сам руткит даже по своему названию подразумевает уже не вирусную природу, хотя они и очень опасны, особенно для систем, пользователи которых пренебрегают обновлением (всегда обновляйте свою систему в целях повышения безопасности!).

Можно написать о структуре PE-файла или ELF, показать, как вирус заражает систему, но в рамках данной статьи это будет лишним. Возможно, что я коснусь более углубленно данной темы в других статьях.

Естественно, что для противоборства вирусам смекалистыми программистами были разработаты антивирусные системы. Например, Евгений Касперский, разработчик знаменитого антивируса Касперского, начинал с безобидного хобби по собиранию этих вирусов и их программной нейтрализации. Как видите, это хобби принесло ему в последствии славу и сотни миллионов долларов состояния. Заманчиво, не так ли?

К сожалению, на рынке антивирусных систем рядовому программисту делать нечего. Конкуренция здесь очень большая. Я даже не сомневаюсь, что в ближайшем будущем многие такие компании просто разорятся в силу падения спроса на свою продукцию. Вспомните пресловутый антивирус AVZ от Олега Зайцева – сейчас Олег работает в структуре лаборатории Касперского, хотя начинал как инди -разработчик. Это пример того, как даже самому распрекрасному антивирусному продукту заказан вход в большую игру под названием бизнес.

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

Мы напишем с вами сканер зловредов, которые являются относительно постоянными по своей структуре (не буду загружать вас умными словами, можете почитать о них в моей книге). В качестве языка разработки я буду использовать C++, как наиболее быстрый и умеющий работать на низком уровне. Как вариант, можно использовать Делфи, однако учтите, что программа будет сильно уступать в скорости сишной.

Учите, что я буду использовать также классы из MFC, так что вам понадобиться полноценная Visual Studio, а на VC++ Express.

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

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

Итак, прежде чем приступить к кодированию, давайте пройдемся по небольшому ТЗ, что должен уметь делать наш сканер. А он должен выполнять:

  • хэширование файлов и проверку хэша со списком в базе данных. Чтобы не городить огород, будем использовать MD5.
  • Как нормальный антивирус, наш сканер должен просканировать все загруженные процессы в памяти (малварь то сразу же загружается в оперативную память) и при обнаружении зловреда нейтрализовать его.
  • Как бы не наивно звучало, но наш сканер должен определять тип операционной системы, на которой запущен. Дело в том, что он должен сканировать еще и системный реестр, а в разных версиях Windows пути будут разными.
  • Собственно, сканирование веток реестра Start Menu \ Programs \ Startup и HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run. Эти ветки отвечают за автозапуск различных программ, а малварь, это, прежде всего, программа. Не стоит забывать и о сканировании папки автозагрузки.
  • Наш сканер будет сканировать относительно небольшие файлы (до 50 МВ), но мы всегда сможем расширить это ограничение. Кроме того, сканер будет пропускать те файлы, которые априори невозможно заразить – это txt, rtf и некоторые им подобные. Тем не менее, не стоит забывать и о том, что вирусы часто внедряются посредством джойнеров, поэтому нужно учесть различные сигнатуры.
  • Сканер должен просканировать весь жесткий диск (а в перспективе и все съемные диски) в поисках малвари и удалить ее.

Вот таков наш план. Как видите, наш простой сканер будет выполнять много того, что положено сканеру антивирусника. Тем не менее, не стоит забывать, что сейчас практически все вирусы криптуются и упаковываются различными пакерами или протекторами. Это сделано для того, чтобы антивирусная система не смогла проанализировать сигнатуру Pe файла. Однако наш сканер пока не умеет этого делать. Но ведь мы же будем его улучшать, не так ли?

Думаю, что план работы вам ясен. Пока приготовьте все нужные инструменты для работы – это Visual Studio 2008/2010 или 2012 (у меня просто лицензионная 2008 студия, я буду писать в ней) , установите себе виртуальную машину (Virtual Box, Virtual PC 2007 – бесплатные или VMWare Workstation –платная, но можно вполне легально использовать ее бесплатно), на которую нужно будет установить какую-нибудь тестовую Windows (можно и XP). Кроме того, нам понадобятся вирусы, которые мы будем истреблять. Для этого нужно будет найти какой-нибудь вирген, который нужно будет запускать на виртуальной машине. На этих вирусах мы и будем тестить нашу простую антивирусную систему. Пока на этом все. В следующей части мы приступим к разработке кода.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *