Разработка кроссплатформенного антивирусного сканера

Обнаружение вирусов и создание сигнатур сканером. Выделение последовательности байт соответствующую данному вирусу. Разбор структуры PE файла. Поиск вхождений сигнатуры в сегменты данных. Тестирование антивирусного сканера, пользовательский интерфейс.

Рубрика Программирование, компьютеры и кибернетика
Вид статья
Язык русский
Дата добавления 23.02.2016
Размер файла 63,6 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru//

Алматинская академия экономики и статистики, г. Алматы.

Разработка кроссплатформенного антивирусного сканера

Федосеев И.В.,

студент,

Байсалбаева К.Н., доцент

Мы реализуем антивирусный сканер, который будет значительно упрощен по сравнению с любыми современными вариантами сканера, но в нем присутствуют все необходимые детали для нормального функционирования. В сканере реализованы: база данных, с возможностью добавления новых сигнатур в базу; сканер, который реализует поиск вредоносных сигнатур в PE файлах. Для реализации сканера был выбран язык программирования Java в связи с достаточным объемом проекта и постепенным развитием проекта. Основная сложность данной задачи заключается в написании быстрого сканера, который позволил бы сканировать достаточные объемы информации. Решение данной задачи производится с помощью поиска вирусов только в исполняемых файлах и использования быстрого алгоритма сравнения сигнатуры.

Обнаружение вирусов и создание сигнатур

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

удаляет файл;

перемещает в карантин;

лечит файл, удаляя из него код вируса.

Для достижения результатов при использовании данного метода необходимо своевременно обновлять базу сигнатур, чтобы избежать заражения своего компьютера. Данный процесс осложняется тем, что придуманы полиморфные вирусы, которые изменяют свою сигнатуру, не давая, таким образом, сканеру обнаружить себя. Сигнатуры создаются в процессе длительного анализа несколько копий одного вируса, при этом они должны содержать уникальные строки вредоносной программы, чтобы максимально уменьшить число ложных срабатываний [1].

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

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

Для проверки работоспособности программы решено было создать уникальную сигнатуру. За вирусный код был условно взят следующий код на Delphi:

1

Write(`I am virus');

Sleep(1000);

Для выделения последовательности байт соответствующую данному вирусу, было создано два exe файла, которые были «заражены» данными командами, также было создан еще один файл, который не содержал вирусный код. Для создания последовательности байт, соответствующей данному вирусу, была написана программа, которая находила все общие подпоследовательности, т.о. чтобы их множество не пересекалось, и подпоследовательности, которые можно было бы объединить в одну подпоследовательность были объединены, а из этого множества с помощью третьего файла были удалены подпоследовательности, которые присутствовали в нем. Таким образом была получена сигнатура вируса, состоящую из двух команд: вывести сообщение на экран и заснуть [2].

Антивирусные сканеры

Антивирусные программы, выявляющие известные компьютерные вирусы называют сканерами. Сканеры разделяют на транзитные, т.е. запускаемые периодически и резидентные, которые постоянно находятся в оперативной памяти. В данном сканере не были использованы дополнительные методы, ограничившись лишь проверкой последовательности байт. Конечно, такой алгоритм не может претендовать на высокую скорость работы, но является достаточно надежным, и при сканировании относительно небольших объемов данных имеет право на существование. Сканер, реализованный в данной работе, является транзитным, потому что основное внимание уделяется поиску вредоносных программ, а не способу работы сканера. Для реализации обхода файлов, управление загрузки библиотеки, и других управляющих действий был создан класс ScanSystem, который состоит только из статичных методов служащих для управления программой. Основным является метод scan, который осуществляет основную работу сканера. Этот метод принимает на вход файл или папку,а дальше запускается метод run1(), который реализует обход файлов для подсчета общего количества файлов, которые нужно будет просканировать для оценки времени работы сканера. Т.е. если в метод передана папка, то он заходит в нее и рекурсивно запускается от всех ее элементов, если же это файл, то он просто запускает процедуру сканирования файла scanned(). Эта процедура считает количество выполненных процентов, а затем проверяет файл, занося в статистику информацию о нем. Вся статистика по сканированию хранится в статических переменных, открытых для публичного доступа. Из сканера можно узнать, сколько файлов он просканировал, сколько файлов из них не удалось открыть, сколько являлось файлами PE, сколько заражены.

public static void run(File file) {

if (!file.isDirectory()) {

//numberofFile++;

scaning(file);

} else {

if (file.isDirectory()) {

String[] temp = file.list();

if(temp!=null)

if(temp.length!=0)

for (String s : temp) {

//System.out.println(s);

run(new File(file+"\\"+s));

}

}

}

}

База данных

В качестве хранилища базы данных было решено сделать обычный текстовый файл. Данное решение было принято в связи с отсутствием большого количества сигнатур и простоты взаимодействия. В качестве инструмента добавления новых сигнатур вирусов можно использовать непосредственно сам блокнот. Формат базы данных:

количество вирусных сигнатур;

сигнатуры.

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

Разбор структуры PE файла

Весь PE файл можно разбить наследующие части: DOS заголовок, DSTUB- заглушка, PEHeader, Optional Header, Data Directory, Section Table.Т.к. наша цель не считать всю информацию о PE файле, зачастую избыточную, а как можно быстрее найти все сегменты кода, то вся задача сводиться к нахождению нужных смещений, но первым делом необходимо проверить является ли файл, который мы сейчас рассматриваем PE файлом [3]. Для проверки файла, сначала проверяем, является ли бинарный файл DOS совместимым. Для этого проверяю первых два байта на равенство сигнатуре MZ, затем выполняется переход по адресу 0х3с, в котором, если это PE файл должно содержаться смещение до PEHeader. Теперь смещаюсь по этому значению и рассматриваю первых два байта на равенство сигнатуре PE. Теперь эти два байта равны этой сигнатуре, то перед нами PE файл. Зная структуру PE файла, смещаюсь на нужное количество байт и считываю количество секций, теперь перемещаюсь на начало таблицы секций, где содержится вся информация по секциям, из этой информации нас интересует только название секции, ее размер, смещение до ее начала и ее атрибуты. Если секция содержит атрибут секции кода, то параметры этой секции сохраняются [4].

static public long convert(long signedvariable){

long ans=0;

for(int i=0;i<64;i++){

ans+=(int)Math.pow(2,i)*(Math.abs(signedvariable % 2));

signedvariable>>=1;

}

return ans;

}

//функция чтения WORD(unsignedshort)

public long readWord() throws IOException {

byte[] mas = new byte[2];

nameOfFile.readFully(mas,0,2);

return read(mas,2);

}

//функция чтения DWORD(unsignedint)

public long readDWord() throws IOException {

byte[] mas = new byte[4];

nameOfFile.readFully(mas,0,4);

return read(mas, 4);

}

//функция используемая для работы двух верхних функций

private static long read(byte mas[],int numberOfByte) {

long ans = 0;

for (int i = 0; i <numberOfByte; i++) {

for (int j = 0; j < 8; j++) {

//System.out.print(Math.abs(mas[i] % 2));

ans+=(int)Math.pow(2,j+i*8)*(Math.abs(mas[i] % 2));

mas[i] >>= 1;

}

//System.out.print(" ");

}

return ans;

}

//функция чтения 1байтового Char из бинарного файла

public char readChar() throws IOException {

char ans =0;

byte b=nameOfFile.readByte();

ans=(char) b;

return ans;

}

}

Поиск вхождений сигнатуры в сегменты данных

Так как при работе антивируса достаточно важна скорость проверки, то для поиска вхождений подпоследовательности в последовательность байт неразумно было использовать обычный поиск за квадратную асимптотику, поэтому для этой цели был использован алгоритм Кнута-Морисса-Пратта [1].

Написание пользовательского интерфейса

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

кроссплатформенный антивирусный сканер сигнатура

Тестирование антивирусного сканера

Для тестирования данной программы следует проверить качество обнаружения сигнатур вируса и скорость его работы, также при тестировании могут выявиться некоторые ошибки, которые не были устранены при разработке антивирусного сканера. Для тестирования качества обнаружения создадим десять различных файлов, которые будут содержать код вируса, и десять таких же файлов без вируса. Для этого будем располагать сигнатуру следующими образами. Возьмем нормальный код, и поместим сигнатуру в write() в начало файла, а sleep() в середину, затем поместим sleep() в центр и в начало, таким образом, возьмем все возможные перестановки. При всех возможных перестановках выяснилось, что объект все равно определяется как вирус, но если в программе не присутствует либо sleep либо write, то данная программа уже не определяется как вирус, что доказывает корректную работу антивируса и правильность сделанной накануне сигнатуры. Теперь следует провести тест на скорость, для этого папку в которой содержатся файлы, которые были тестированы по отдельности, просканируем полностью. Время сканирования вышло около 1 секунды, увеличивая количество файлов. Увеличивая количество файлов до 780,из них исполняемых до 88, время работы антивируса осталось неизменным. Увеличив размер папки до 5 гигабайт, количество файлов до 15 тысяч, а количество исполняемых до 1500 тысячи файлов антивирус проработал 10 секунд, найдя 561 вирус. Данные тестирования показывают, что при небольших объемах данных или при отсутствии ограничений по времени антивирусный сканер выполнил свою задачу. Понятно, что в базе данных должно быть больше чем одна сигнатура, что может значительно уменьшить скорость работы сканера, потому что сейчас основное время тратиться не на анализ сигнатуры, а на разбор PE файла. Для устранения данных недостатков планируется введение дополнительных параметров в сигнатуру.

Рисунок 1 - Окно выбора файла из компьютера

Заключение

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

Размещено на Allbest.ru

...

Подобные документы

  • Основы антивирусной защиты информации. Проверка компьютера на наличие вирусов, шпионских программ с помощью антивирусного сканера Kaspersky AntiVirus. Портативные антивирусные программы для внешних носителей информации (USB flash и внешние жесткие диски).

    курсовая работа [187,2 K], добавлен 26.10.2013

  • Основна технічна характеристика сканера – розширення. Два типи розширення: інтерполіроване та механічне. Швидкість сканування, щільність зображення та глибина кольору. Порти для підключення сканера. Робота зі сканером. Рекомендовані параметри сканування.

    контрольная работа [22,3 K], добавлен 21.02.2009

  • Телефакс как устройство факсимильной передачи изображения по телефонной сети. Назначение планшетного сканера. Использование листопротяжных сканеров. Принцип работы барабанного сканера. Применение сканера штрих-кода. Оптический сканер отпечатка пальцев.

    реферат [11,6 K], добавлен 19.01.2010

  • Обнаружение компьютерных вирусов и вредоносных программ как основное назначение антивирусной программы (антивируса). Целевые платформы антивирусного программного обеспечения. Классификация антивирусных продуктов по основным параметрам и критериям.

    презентация [3,3 M], добавлен 22.09.2011

  • Пользовательский интерфейс - "лицо" системы, от продуманности которого зависит эффективность работы пользователя с системой. Функциональное тестирование пользовательских интерфейсов. Проверка требований, тестопригодность. Методы проведения тестирования.

    реферат [28,7 K], добавлен 21.01.2010

  • Логическая и физическая структура базы данных. Аппаратное и программное обеспечение системы. Создание представлений, хранимых процедур, пользовательских функций, триггеров. Описание основной структуры ASP.NET документов. Пользовательский интерфейс.

    курсовая работа [4,2 M], добавлен 21.05.2013

  • Разработка сканера, который считывает литеры первоначальной, исходной программы и строит символы, исходной программы. Глобальные переменные и необходимые подпрограммы. Диаграмма состояний. Текст программы. Инструкция пользователю. Тестовый пример.

    курсовая работа [3,4 M], добавлен 05.07.2008

  • Принципы получения электронных копий. История создания сканера, принцип действия. Виды сканеров, их характеристики. Выбор среды программирования: визуальное программирование, среда программирования Delphi, язык С++. Описание разработанной программы.

    курсовая работа [42,9 K], добавлен 25.12.2008

  • Разработка устройств ввода данных. Типичная адаптированная под русский алфавит клавиатура. Графический манипулятор мышь. Устройства вывода данных из компьютера. Сервисные режимы печати на принтерах. Интерфейс для подключения сканера к компьютеру.

    реферат [337,4 K], добавлен 11.01.2011

  • Создание программного продукта на языке Pascal в визуальной среде программирования Borland Developer Studio в консольном приложении. Разработка типизированного файла для записи данных и их вывод на экран, добавление данных в конец файла, поиск информации.

    курсовая работа [1,0 M], добавлен 04.12.2011

  • Классификация баз данных. Создание списковой структуры, просмотр, удаление, сохранение в типизированном файле, восстановление из типизированного файла, поиск нужного элемента, создание отчета. Ввод, отображение и редактирование текстового материала.

    курсовая работа [2,8 M], добавлен 22.12.2016

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

    презентация [1,6 M], добавлен 06.04.2015

  • Описание технологии asp.net. Страницы веб-приложения, тестирование системы. Описание функциональной, динамической модели системы. Диаграммы вариантов использования, последовательности, база данных приложения. Реализация программы, интерфейс, тестирование.

    курсовая работа [3,2 M], добавлен 30.01.2013

  • Поиск вредоносных программ по средствам программ антивирусных. Выбор формата представления данных. Интерфейс программы, ее тестирование и отладка. Список процедур, их назначение. Поиск как средство для облегчения, удобства, надежности работы на ПК.

    курсовая работа [22,4 K], добавлен 17.05.2013

  • Интерфейс и функции виджетов, используемые в разработке программные средства. Элементы: часы, календарь, заметки, сервер. Формирование кроссплатформенного менеджера виджетов рабочего стола, обладающего интерфейсом на нескольких операционных системах.

    дипломная работа [210,4 K], добавлен 06.07.2015

  • Описание разрабатываемой программы с точки зрения пользователя и программиста. Поэтапная разработка программной системы. Создание базы данных в Access. Разработка структуры классов. Создание структуры для хранения данных. Проектирование интерфейса.

    курсовая работа [1,4 M], добавлен 07.08.2013

  • Создание программного обеспечения, организующего базу данных тренажёрного зала. Описание предметной области; предикаты языка Пролог для работы с БД: ввод/вывод, управление окнами. Разработка структуры базы данных, интерфейс; содержание файла "Zal.ddb".

    курсовая работа [821,6 K], добавлен 07.06.2013

  • Инструментальные средства для разработки структуры информационной базы данных "Программа автоматизации учета расчетов с поставщиками", пользовательский интерфейс СУБД Access. Разработка запросов отбора данных и вычислений, экранных форм коррекции данных.

    лабораторная работа [2,4 M], добавлен 15.11.2010

  • Проектирование Windows-приложения, которое позволяет проводить тестирование знаний по разделу математики "Логарифмы". Создание дополнительного класса диалоговых окон, нового пользовательского интерфейса программы. Требования к техническому обеспечению.

    курсовая работа [1,9 M], добавлен 02.07.2011

  • Десять эвристик Якоба Нильсена. Пример непродуманного и продуманного интерфейса интернет-магазина. Интерфейс с возможностью отката совершенного действия. Принципы эстетичного и минималистичного дизайна сайта. Методы оценки внешнего вида web-странички.

    реферат [4,7 M], добавлен 22.03.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.