type
TVirus = record
Name: Array [1..10] of Char;
Signature: Array [1..100] of Char;
Body: Array [1..128] of Byte;
end;
помогите написать антивирус
помогите написать антивирус
требования к нему следуещие
-имена вируса не более 20 символов
-длина сигнатуры вируса не более 100 символов :???:
-длина анализируемого файла не более 128 байт
-воводить вручную имя файла
хотябя как реализуется 2 требование
зарание БОЛШОЕ СПАСИБО:???:
Цитата:
Originally posted by xcf
Здраствуйте!
помогите написать антивирус
требования к нему следуещие
-имена вируса не более 20 символов
-длина сигнатуры вируса не более 100 символов :???:
-длина анализируемого файла не более 128 байт
-воводить вручную имя файла
хотябя как реализуется 2 требование
зарание БОЛШОЕ СПАСИБО:???:
Здраствуйте!
помогите написать антивирус
требования к нему следуещие
-имена вируса не более 20 символов
-длина сигнатуры вируса не более 100 символов :???:
-длина анализируемого файла не более 128 байт
-воводить вручную имя файла
хотябя как реализуется 2 требование
зарание БОЛШОЕ СПАСИБО:???:
Что, собственно, надо сделать? Сохранять и загружать структуру, что описана выше, в файл? Или еще что-то?
P.S. Касперского хочешь убить? :)
сохранять и загружать структуру.
зачем касперского уивать пусть живет:)
Цитата:
Originally posted by xcf
P.S. Касперского хочешь убить? :)
P.S. Касперского хочешь убить? :)
сохранять и загружать структуру.
зачем касперского уивать пусть живет:) [/QUOTE]
Опиши новый тип данных (если я тебя правильно понял):
Код:
Опиши типизированный файл, который работает с такой структурой:
Код:
Var
FBase: File of TVirus;
FBase: File of TVirus;
Ну а дальше читай, записывай, etc.
:) А ты как вообще с массивами дружишь? С помощью массивов реализуются обе функции.
Код:
Program Antivir;
{Задание: Написать антивирус.
Требования к нему следующие:
- имена вирусов не более 20 символов;
- длина сигнатуры вируса не более 100 символов;
- длина анализируемого файла не более 128 байт;
- вводить вручную имя файла.}
Uses
Crt;
Type
Virus1=Record
Name_Virus: String[20]; {имя вируса}
Signat: String[100]; {его сигнатура}
End;
Const
Dlina_File=128; {128 байт}
Base_Data='data.dat';
Var
i: Byte;
{----------Меню----------}
Procedure Menu(Var i: Byte);
Var
Erorr, Erorr1: Integer;
Simbol: Char;
Base_dat: File of Virus1;
Stroka: Virus1;
Name_F1: File of Byte;
Zapros_Name_F: String;
Data_File: String[128];
Size: LongInt; {размер файла}
Dan, j: Byte;
Cikl: LongInt;
Obn_Virus: Boolean;
Begin
Obn_Virus:=False;
{Чистим экран}
ClrScr;
{Выводим меню}
GotoXY(38,9);
Write('Меню');
GotoXY(24,11);
Write('1. Редактирование базы данных');
GotoXY(24,12);
Write('2. Поиск вирусов');
GotoXY(24,13);
Write('3. Выход');
GotoXY(24,15);
Write('Введите номер пункта[.]');
GotoXY(45,15);
i:=0;
{Ждем выбор пользователя}
Repeat
Simbol:=ReadKey;
{Определяем номер пункта}
If (Simbol='1') or (Simbol='2') or (Simbol='3') then
Begin
{Выводим на экран номер пункта}
Write(Simbol);
{Определяем номер пункта}
i:=Ord(Simbol)-48;
GotoXY(45,15);
End
Else {Если нажата отличная от номера пункта клавиша,
за исключением: Enter}
If Simbol<>#13 then
Begin
GotoXY(45,15);
Write('.');
GotoXY(45,15);
i:=0;
End;
Until (Simbol=#13) and (i<>0);
{Выбор пункта}
Case i of
1: {Редактирование базы данных}
Begin
{Чистим экран}
ClrScr;
{Связываем переменную с файлом}
Assign(Base_dat, 'Base.dat');
{$I-}{отключение автоматического контроля за вводом/выводом}
{Попытки открыть файл}
Reset(Base_Dat);
Erorr:=IOResult;
If Erorr=2 then
Begin
Rewrite(Base_Dat);
Erorr:=IOResult;
End;
If Erorr<>0 then
Begin
Write('Не удалось открыть файл...', Erorr);
ReadKey;
End;
{Если удалось открыть файл}
If Erorr=0 then
Begin
WriteLn('Файл с баззой данных открыт успешно...');
WriteLn;
{Определяем всего количество записей}
WriteLn('Обнаружено: ',FileSize(Base_Dat),' записей...');
{Запрос что делать}
Repeat
WriteLn('Хотите внести новую запись(1-да,2-нет)?');
Simbol:=ReadKey;
Until (Simbol='1') or (Simbol='2');
If Simbol='1' then
Begin
{Переход на последнюю запись}
Seek(Base_Dat, FileSize(Base_Dat));
{Запрос имени вируса}
WriteLn;
Repeat
Write('Введите имя вируса: ');
ReadLn(Stroka.Name_Virus);
Until Length(Stroka.Name_Virus)>0;
{Запрос сигнатуры вируса}
Repeat
Write('Введите его сигнатуру: ');
ReadLn(Stroka.Signat);
Until Length(Stroka.Signat)>0;
{Запись в файл}
Write(Base_Dat, Stroka);
End;
Close(Base_Dat);
End;
{$I+}{включение автоматического контроля за вводом/выводом}
End;
2: {Поиск вирусов}
Begin
{Чистим экран}
ClrScr;
{Сообщение}
WriteLn('Поиск вирусов...');
WriteLn;
{Запрашиваем имя исследуемого файла}
Repeat
Write('Введите имя файла: ');
ReadLn(Zapros_Name_F);
Until Length(Zapros_Name_F)>0;
{Связываем переменную с файлом}
Assign(Name_F1, Zapros_Name_F); {файл, в котором ищется вирус}
{Связываем переменную с файлом}
Assign(Base_dat, 'Base.dat'); {файл с антивирусной базой}
{$I-}{отключение автоматического контроля за вводом/выводом}
{Пытаемся открыть файл}
Reset(Name_F1);
Erorr:=IOResult;
Reset(Base_dat);
Erorr1:=IOResult;
If (Erorr<>0) or (Erorr1<>0) then
Begin {Файл не удалось открыть}
WriteLn('Файл не удалось открыть.');
WriteLn('Повторите попытку...');
ReadKey;
End
Else {Файл удалось открыть}
Begin
{Определяем размер файла}
Size:=FileSize(Name_F1);
{Выводим размер файла}
WriteLn;
WriteLn('Размер файла: ', Size, ' байт');
{Если файл меньше 128 байт, проверяем его на наличие вирусов}
If Size<129 then
Begin
Data_File[0]:=#0;
{Читаем из файла}
While not Eof(Name_F1) do
Begin
Read(Name_F1, Dan);
Data_File:=Data_File+Chr(Dan);
End;
{Вывод содержимого файла}
WriteLn('Текст файла: ', Data_File);
{Проверяем наличие вируса в базе}
If FileSize(Base_Dat)>0 then
Begin
{Перевод курсора в начало файла}
Seek(Base_Dat,0);
While FilePos(Base_Dat)<FileSize(Base_Dat) do
Begin
{Читаем запись}
Read(Base_Dat, Stroka);
{Cравниваем ее с текущим файлом}
If Pos(Stroka.Signat, Data_File)<>0 then
Begin
Obn_Virus:=True;
WriteLn('ВНИМАНИЕ!!!');
WriteLn;
WriteLn('Обнаружен вирус: ', Stroka.Name_Virus);
WriteLn;
{Запрос действия}
Repeat
WriteLn('Выберите действие:');
WriteLn('1 - Лечить');
WriteLn('2 - Удалить файл');
WriteLn('3 - Отмена ');
Simbol:=ReadKey;
Until (Simbol='1') or (Simbol='2') or (Simbol='3');
{Закрываем файл}
Close(Name_F1);
{Действие по выбору пользователя}
Case Simbol of
'1': {удаление тела вируса}
Begin
{Изменяем содержимое файла}
If Pos(Stroka.Signat, Data_File)<>0 then
Delete(Data_File, Pos(Stroka.Signat, Data_File), Length(Stroka.Signat));
{Попытка перезаписать файл}
Rewrite(Name_F1);
{Проверка открытия файла}
If IOResult=0 then
Begin {если файл открыт}
{Записываем и закрываем}
For j:=1 to Length(Data_File) do
Begin
Dan:=Ord(Data_File[j]);
Write(Name_F1, Dan);
End;
Close(Name_F1);
If IOResult=0 then
WriteLn('Файл удалось вылечить');
End
Else
Begin
Write('Не удалось вылечить файл...');
ReadKey;
End;
End;
'2': {удаление файла с вирусом}
Begin
{Удаление файла}
Erase(Name_F1);
{Проверка удаления файла}
If IOResult=0 then
WriteLn('Файл успешно удален')
Else
WriteLn('Файл не удалось удалить');
End;
'3': WriteLn('Отмена действий');
End;
Break;
End;
End;
If Obn_Virus=False then
Begin
WriteLn('Вирус не обнаружен...');
Close(Name_F1);
End;
End
Else {если нет ни единого вируса в базе}
WriteLn('В антивирусной базе нет ни единого вируса...');
ReadKey;
{Закрываем файл}
Close(Base_dat);
End;
End;
{$I+}{включение автоматического контроля за вводом/выводом}
End;
End;
End;
{---------------------------------------------}
Begin
{Загружаем меню и ждем выбора 3-го пункта}
Repeat
Menu(i);
Until i=3;
{Очищаем экран перед завершением программы}
ClrScr;
End.
{Задание: Написать антивирус.
Требования к нему следующие:
- имена вирусов не более 20 символов;
- длина сигнатуры вируса не более 100 символов;
- длина анализируемого файла не более 128 байт;
- вводить вручную имя файла.}
Uses
Crt;
Type
Virus1=Record
Name_Virus: String[20]; {имя вируса}
Signat: String[100]; {его сигнатура}
End;
Const
Dlina_File=128; {128 байт}
Base_Data='data.dat';
Var
i: Byte;
{----------Меню----------}
Procedure Menu(Var i: Byte);
Var
Erorr, Erorr1: Integer;
Simbol: Char;
Base_dat: File of Virus1;
Stroka: Virus1;
Name_F1: File of Byte;
Zapros_Name_F: String;
Data_File: String[128];
Size: LongInt; {размер файла}
Dan, j: Byte;
Cikl: LongInt;
Obn_Virus: Boolean;
Begin
Obn_Virus:=False;
{Чистим экран}
ClrScr;
{Выводим меню}
GotoXY(38,9);
Write('Меню');
GotoXY(24,11);
Write('1. Редактирование базы данных');
GotoXY(24,12);
Write('2. Поиск вирусов');
GotoXY(24,13);
Write('3. Выход');
GotoXY(24,15);
Write('Введите номер пункта[.]');
GotoXY(45,15);
i:=0;
{Ждем выбор пользователя}
Repeat
Simbol:=ReadKey;
{Определяем номер пункта}
If (Simbol='1') or (Simbol='2') or (Simbol='3') then
Begin
{Выводим на экран номер пункта}
Write(Simbol);
{Определяем номер пункта}
i:=Ord(Simbol)-48;
GotoXY(45,15);
End
Else {Если нажата отличная от номера пункта клавиша,
за исключением: Enter}
If Simbol<>#13 then
Begin
GotoXY(45,15);
Write('.');
GotoXY(45,15);
i:=0;
End;
Until (Simbol=#13) and (i<>0);
{Выбор пункта}
Case i of
1: {Редактирование базы данных}
Begin
{Чистим экран}
ClrScr;
{Связываем переменную с файлом}
Assign(Base_dat, 'Base.dat');
{$I-}{отключение автоматического контроля за вводом/выводом}
{Попытки открыть файл}
Reset(Base_Dat);
Erorr:=IOResult;
If Erorr=2 then
Begin
Rewrite(Base_Dat);
Erorr:=IOResult;
End;
If Erorr<>0 then
Begin
Write('Не удалось открыть файл...', Erorr);
ReadKey;
End;
{Если удалось открыть файл}
If Erorr=0 then
Begin
WriteLn('Файл с баззой данных открыт успешно...');
WriteLn;
{Определяем всего количество записей}
WriteLn('Обнаружено: ',FileSize(Base_Dat),' записей...');
{Запрос что делать}
Repeat
WriteLn('Хотите внести новую запись(1-да,2-нет)?');
Simbol:=ReadKey;
Until (Simbol='1') or (Simbol='2');
If Simbol='1' then
Begin
{Переход на последнюю запись}
Seek(Base_Dat, FileSize(Base_Dat));
{Запрос имени вируса}
WriteLn;
Repeat
Write('Введите имя вируса: ');
ReadLn(Stroka.Name_Virus);
Until Length(Stroka.Name_Virus)>0;
{Запрос сигнатуры вируса}
Repeat
Write('Введите его сигнатуру: ');
ReadLn(Stroka.Signat);
Until Length(Stroka.Signat)>0;
{Запись в файл}
Write(Base_Dat, Stroka);
End;
Close(Base_Dat);
End;
{$I+}{включение автоматического контроля за вводом/выводом}
End;
2: {Поиск вирусов}
Begin
{Чистим экран}
ClrScr;
{Сообщение}
WriteLn('Поиск вирусов...');
WriteLn;
{Запрашиваем имя исследуемого файла}
Repeat
Write('Введите имя файла: ');
ReadLn(Zapros_Name_F);
Until Length(Zapros_Name_F)>0;
{Связываем переменную с файлом}
Assign(Name_F1, Zapros_Name_F); {файл, в котором ищется вирус}
{Связываем переменную с файлом}
Assign(Base_dat, 'Base.dat'); {файл с антивирусной базой}
{$I-}{отключение автоматического контроля за вводом/выводом}
{Пытаемся открыть файл}
Reset(Name_F1);
Erorr:=IOResult;
Reset(Base_dat);
Erorr1:=IOResult;
If (Erorr<>0) or (Erorr1<>0) then
Begin {Файл не удалось открыть}
WriteLn('Файл не удалось открыть.');
WriteLn('Повторите попытку...');
ReadKey;
End
Else {Файл удалось открыть}
Begin
{Определяем размер файла}
Size:=FileSize(Name_F1);
{Выводим размер файла}
WriteLn;
WriteLn('Размер файла: ', Size, ' байт');
{Если файл меньше 128 байт, проверяем его на наличие вирусов}
If Size<129 then
Begin
Data_File[0]:=#0;
{Читаем из файла}
While not Eof(Name_F1) do
Begin
Read(Name_F1, Dan);
Data_File:=Data_File+Chr(Dan);
End;
{Вывод содержимого файла}
WriteLn('Текст файла: ', Data_File);
{Проверяем наличие вируса в базе}
If FileSize(Base_Dat)>0 then
Begin
{Перевод курсора в начало файла}
Seek(Base_Dat,0);
While FilePos(Base_Dat)<FileSize(Base_Dat) do
Begin
{Читаем запись}
Read(Base_Dat, Stroka);
{Cравниваем ее с текущим файлом}
If Pos(Stroka.Signat, Data_File)<>0 then
Begin
Obn_Virus:=True;
WriteLn('ВНИМАНИЕ!!!');
WriteLn;
WriteLn('Обнаружен вирус: ', Stroka.Name_Virus);
WriteLn;
{Запрос действия}
Repeat
WriteLn('Выберите действие:');
WriteLn('1 - Лечить');
WriteLn('2 - Удалить файл');
WriteLn('3 - Отмена ');
Simbol:=ReadKey;
Until (Simbol='1') or (Simbol='2') or (Simbol='3');
{Закрываем файл}
Close(Name_F1);
{Действие по выбору пользователя}
Case Simbol of
'1': {удаление тела вируса}
Begin
{Изменяем содержимое файла}
If Pos(Stroka.Signat, Data_File)<>0 then
Delete(Data_File, Pos(Stroka.Signat, Data_File), Length(Stroka.Signat));
{Попытка перезаписать файл}
Rewrite(Name_F1);
{Проверка открытия файла}
If IOResult=0 then
Begin {если файл открыт}
{Записываем и закрываем}
For j:=1 to Length(Data_File) do
Begin
Dan:=Ord(Data_File[j]);
Write(Name_F1, Dan);
End;
Close(Name_F1);
If IOResult=0 then
WriteLn('Файл удалось вылечить');
End
Else
Begin
Write('Не удалось вылечить файл...');
ReadKey;
End;
End;
'2': {удаление файла с вирусом}
Begin
{Удаление файла}
Erase(Name_F1);
{Проверка удаления файла}
If IOResult=0 then
WriteLn('Файл успешно удален')
Else
WriteLn('Файл не удалось удалить');
End;
'3': WriteLn('Отмена действий');
End;
Break;
End;
End;
If Obn_Virus=False then
Begin
WriteLn('Вирус не обнаружен...');
Close(Name_F1);
End;
End
Else {если нет ни единого вируса в базе}
WriteLn('В антивирусной базе нет ни единого вируса...');
ReadKey;
{Закрываем файл}
Close(Base_dat);
End;
End;
{$I+}{включение автоматического контроля за вводом/выводом}
End;
End;
End;
{---------------------------------------------}
Begin
{Загружаем меню и ждем выбора 3-го пункта}
Repeat
Menu(i);
Until i=3;
{Очищаем экран перед завершением программы}
ClrScr;
End.
Смотрите, млин, дату последнего поста, некромансеры!
Может и поздно ответ дал, зато интересное заданице было :)