Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2011, 11:04   #1
Rydj
Пользователь
 
Регистрация: 22.01.2011
Сообщений: 17
Лампочка [c][linux] Антивирус

Доброго времени стуток. Взял себе на курсовую написать простенький антивирус . Задача такова: Условный антивирусный файловый сканер.
Сканировать рекурсивно папку, заданную пользователем.
Осуществлять поиск сигнатур, известных сканеру.
Выводить инфицированные объекты на экран в формате:
путь к файлу: название сигнатуры условного вируса.
Каждая сигнатура - это запись в файле сигнатур, который
хранится в папке антивируса (база).
Сигнатура состоит из нескольких полей:
1) Название, срока. Пример: Worm.LoveSan
2) Длина тела, целое число.
3) Собственно тело, последовательность байт.
Основу я уже сделал, у меня антивирус проходит рекурсивно папку и ищет название условного вируса, но пока я это название задаю программно. Можете мне помочь сделать сравнение не только по названию но и по пункту 2 и 3 и желательно чтобы эти данные брались из файла base

Код:
#include <sys/stat.h>
#include <ftw.h>
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <sys/dir.h>
#include <sys/stat.h>
#include <string.h>

int rek (const char *name, const struct stat *status, int type) //Функция которая вызывается для каждого файла или каталога, найденого в поддереве. (нужна для рекурсивного обхода)
{
	FILE *f1;
	f1 = fopen("Buf.txt", "a+");
	if (type == FTW_F)
		fprintf(f1 ,"%s %ld\n", name, status->st_size);
	fclose(f1);
	return 0;
}

int main (int argc, char *argv)
{

	int rek (const char *, const struct stat *, int); 
	FILE *f1, *f2, *f3, *f4;
	char filename[256];
	int i, sch, k;
	char b[1024];

	f2 = fopen("Buf.txt", "w");
	fprintf(f3, "");

	printf("Введите точку отчета!\n");
	scanf("%s", filename);

	if ((f1 = fopen(filename, "r")) == NULL)
	{
		printf("Не верно указана точка отсчета!");
		return 0;
	}
	else
		ftw(filename, rek, 1);
	fclose(f1);
	fclose(f2);
	
	if ((f3 = fopen("Base.txt", "r")) == NULL)
	{
		printf("Антивирусная база не найдена!");
		return 0;
	}
	if ((f4 = fopen("Buf.txt", "r")) == NULL)
	{
		printf("Не найден отчет сканирования!");
		return 0;
	}
	i = 0;
	sch = 1;
	k = 0;
	while(1) {
		int c = getc(f4);
		if (c == EOF)
			break;
		b[i] = c;
		
		if (b[i] == '\n' || b[i] == '/' || b[i] == ' ')
		{
			b[i] = '\0';
			sch = strcmp(b, "Worm.Love");
			if ( sch == 0 )
			{
				printf("Обнаружен вирус! %s\n", b);
				k++;
			}
			i = 0;
		}		
		else
			++i;
		}
	if (sch != 0 && k == 0)
	{
		printf("Вирусы не обнаружены!\n");
	}
	printf("Обнаруженно вирусов: %d\n", k);

	fclose(f3);
	fclose(f4);
}
f1-указываем путь к директории
f2- обнулить старые значения в buf
f3- открытие антивирусной базы
f4-открытие результата сканирования

Сам файл с базой открываю но как теперь сравнивать значения от туда с проверяемым файлом я не знаю. Сенсей сказал что сравнение с базой должно проходить в функции rek.

Файлы программы:
Buf.txt - результат сканирования
base.txt- вирусная база
Worm.Love -наш злой условный вирус=)
r.c -прога
Вложения
Тип файла: rar OSAV.rar (1.2 Кб, 7 просмотров)
Rydj вне форума Ответить с цитированием
Старый 25.05.2011, 15:44   #2
rustx88
Пользователь
 
Регистрация: 08.05.2011
Сообщений: 42
По умолчанию

3 пункт могу сделать за плату
rustx88 вне форума Ответить с цитированием
Старый 25.05.2011, 15:54   #3
Rydj
Пользователь
 
Регистрация: 22.01.2011
Сообщений: 17
По умолчанию

Не спс такой вариант мне не нужен, со временем я и сам сделаю просто хотел немного времени сэкономить
Rydj вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Антивирус Дима77 Помощь студентам 3 22.05.2011 17:58
антивирус ulito4ka Безопасность, Шифрование 50 26.03.2011 23:15
c++ в Linux (Межпроцессорный обмен в Linux) RusLotus Помощь студентам 0 13.10.2009 16:59
антивирус Вета_907 Помощь студентам 4 24.07.2009 20:15
Linux на VMware....... WinXP <-> Linux DMUTPUU Операционные системы общие вопросы 1 24.09.2008 12:03