Курсовая работа: Сравнительный анализ антивирусных пакетов
При написании антивирусной программы выполняется следующая последовательность действий:
1 Для каждого проверяемого файла определяется время его создания.
2 Если число секунд равно шестидесяти, то проверяются три байта по смещению, равному "длина файла минус 8АН". Если они равны соответственно 35Н, 2ЕН, 30Н, то файл заражен.
3 Выполняется декодирование первых 24 байт оригинального кода, которые расположены по смещению "длина файла минус 01CFН плюс 0BAAН". Ключи для декодирования расположены по смещению "длина файла минус 01CFН плюс 0С1AН" и "длина файла минус 01CFН плюс 0С1BН".
4 Раскодированные байты переписываются в начало программы.
5 Файл «усекается» до величины "длина файла минус 0С1F".
Программа создана в среде программирования Turbo Pascal. Текст программы изложен в Приложении А.
Заключение
В данной курсовой работе был проведен сравнительный анализ антивирусных пакетов.
В процессе проведения анализа были успешно решены задачи, поставленные в начале работы. Так были изучены понятия информационной безопасности, компьютерных вирусов и антивирусных средств, определены виды угроз безопасности информации, методы защиты, рассмотрена классификация компьютерных вирусов и антивирусных программ и проведен сравнительный анализ антивирусных пакетов, написана программа, производящая поиск зараженных файлов.
Результаты, полученные в процессе работы могут быть применены при выборе антивирусного средства.
Все полученные результаты отражены в работе с помощью диаграмм, поэтому пользователь может самостоятельно проверить выводы, сделанные в итоговой диаграмме, отражающей синтез выявленных результатов различных тестов антивирусных средств.
Результаты, полученные в процессе работы могут быть применены как основа для самостоятельного сравнения антивирусных программ.
В свете широкого использования IT-технологий, представленная курсовая работа является актуальной и отвечает предъявленным к ней требованиям. В процессе работы были рассмотрены наиболее популярные антивирусные средства.
Список использованной литературы
1 Анин Б. Защита компьютерной информации. – СПб. : БХВ – Санкт – Петербург, 2000. – 368 с.
2 Артюнов В. В. Защита информации: учеб. – метод. пособие. М. : Либерия – Бибинформ, 2008. – 55 с. – (Библиотекарь и время. 21 век; вып. №99 ).
3 Корнеев И. К., Е. А. Степанов Защита информации в офисе: учебник. – М . : Проспект, 2008. – 333 с.
5 Куприянов А. И. Основы защиты информации: учеб. пособие. – 2-е изд. стер. – М.: Академия, 2007. – 254 с. – (Высшее профессиональное образование).
6 Семененко В. А., Н. В. Федоров Программно – аппаратная защита информации: учеб. пособие для студ. вузов. – М. : МГИУ, 2007. – 340 с.
7 Цирлов В. Л. Основы информационной безопасности: краткий курс. – Ростов н/Д: Феникс, 2008. – 254 с. (Профессиональное образование).
Приложение
Листинг программы
Program ANTIVIRUS;
Uses dos,crt,printer;
Type St80 = String[80];
Var
R:Registers;
FileInfection:File Of Byte;
SearchFile:SearchRec;
Mas:Array[0..80] of St80;
MasByte:Array[1..3] of Byte;
Position,I,J,K:Byte;
Num,NumberOfFile,NumberOfInfFile:Word;
St:St80;
Flag,NextDisk,Error:Boolean;
Dt:DateTime;
Key1,Key2,Key3,NumError:Byte;
MasScreen:Array[0..24,0..159] Of Byte Absolute $B800:0000;
Ch,Disk:Char;
Procedure Cure(St : St80);
Var
I: Byte; MasCure: Array[1..24] Of Byte;
Begin
Assign(FileInfection,St); Reset(FileInfection);
NumError:=IOResult;
If (NumError <> 0) Then Begin Error:=True; Exit; End;
Seek(FileInfection,FileSize(FileInfection) - ($0C1F - $0C1A));
NumError:=IOResult;
If (NumError <> 0) Then Begin Error:=True; Exit; End;
Read(FileInfection,Key1);
NumError:=IOResult;
If (NumError <> 0) Then Begin Error:=True; Exit; End;
Read(FileInfection,Key2);
NumError:=IOResult;
If (NumError <> 0) Then Begin Error:=True; Exit; End;
Seek(FileInfection,FileSize(FileInfection) - ($0C1F - $0BAA));
NumError:=IOResult;
If (NumError <> 0) Then Begin Error:=True; Exit; End;
For I:=1 to 24 do
Begin
Read(FileInfection,MasCure[i]);
NumError:=IOResult;
If (NumError <> 0) Then Begin Error:=True; Exit; End;
Key3:=MasCure[i];
InLine($50/
$8A/$26/KEY1/
$30/$26/KEY3/
$A0/KEY2/
$00/$C4/
$88/$26/KEY1/
$58);
MasCure[i]:=Key3;
End;
Seek(FileInfection,0);
NumError:=IOResult;
If (NumError <> 0) Then Begin Error:=True; Exit; End;
For I:=1 to 24 do Write(FileInfection,MasCure[i]);
Seek(FileInfection,FileSize(FileInfection) - $0C1F);
NumError:=IOResult;
If (NumError <> 0) Then Begin Error:=True; Exit; End;
Truncate(FileInfection);
NumError:=IOResult;
If (NumError <> 0) Then Begin Error:=True; Exit; End;
Close(FileInfection); NumError:=IOResult;
If (NumError <> 0) Then Begin Error:=True; Exit; End;
Num:=Num+1;
End;
Procedure F1(St : St80);
Begin
FindFirst(St + '*.*', $3F, SearchFile);
While (SearchFile.Attr = $10) And (DosError = 0) And
((SearchFile.Name = '.') Or (SearchFile.Name = '..')) Do
Begin
FindNext(SearchFile);
End;
While (DosError = 0) Do
Begin
If KeyPressed Then
If (Ord(ReadKey) = 27) Then Halt;
If (SearchFile.Attr = $10) Then
Begin
Mas[k]:=St + SearchFile.Name + '\';
K:=K+1;
End;
If (SearchFile.Attr <> $10) Then
Begin
NumberOfFile:=NumberOfFile + 1;
UnpackTime(SearchFile.Time, DT);
For I:=18 to 70 do MasScreen[6,2*i]:=$20;
GoToXY(18,7);
Write(St + SearchFile.Name,' ');
If (Dt.Sec = 60) Then
Begin
Assign(FileInfection,St + SearchFile.Name);
Reset(FileInfection);
NumError:=IOResult;
If (NumError <> 0) Then Begin Error:=True; Exit; End;
Seek(FileInfection,FileSize(FileInfection) - $8A);
NumError:=IOResult;
If (NumError <> 0) Then Begin Error:=True; Exit; End;
For I:=1 to 3 do Read(FileInfection,MasByte[i]);
Close(FileInfection);
NumError:=IOResult;
If (NumError <> 0) Then Begin Error:=True; Exit; End;
If (MasByte[1] = $35) And (MasByte[2] = $2E) And
(MasByte[3] = $30) Then
Begin
NumberOfInfFile:=NumberOfInfFile + 1;
GoToXY(1,8);
Write( St + SearchFile.Name,' inficirovan. ',
'Udalit? [Y/N] ');
Repeat
Ch:=ReadKey;
If (Ord(Ch) = 27) Then Exit;
Until (Ch = 'Y') Or (Ch = 'y') Or (Ch = 'N')
Or (Ch = 'n');
If (Ch = 'Y') Or (Ch = 'y') Then
Begin
Cure(St + SearchFile.Name);
If (NumError <> 0) Then Exit;
End;
For I:=0 to 79 do MasScreen[7,2*i]:=$20;
End; End; End;
FindNext(SearchFile);
End;
End;
Begin
Repeat
Flag:=True;
TextAttr:=$1F;
Repeat
ClrScr;
GoToXY(29,1); TextAttr:=$1E; GoToXY(20,2); TextAttr:=$17;
Writeln('Programma dlya poiska i lecheniya fajlov,');
GoToXY(28,3);
Writeln('zaragennih SVC50.');
TextAttr:=$4F; GoToXY(1,25);
Write(' ESC - exit ');
TextAttr:=$1F; GoToXY(1,6);
Write('Kakoj disk proverit? ');
Disk:=ReadKey;
If (Ord(Disk) = 27) Then Exit;
R.Ah:=$0E; R.Dl:=Ord(UpCase(Disk))-65;
Intr($21,R); R.Ah:=$19; Intr($21,R);
Flag:=(R.Al = (Ord(UpCase(Disk))-65));
Until Flag;
NextDisk:=True;
Error:=False;
Num:=0;
K:=0;
St:=UpCase(Disk) + ':\';
GoToXY(1,6);
Writeln('Testiruetsya disk ',St,' ');
Writeln('Testiruetsya fajl ');
NumberOfFile:=0;
NumberOfInfFile:=0;
F1(St);
If (k = 0) Or Error Then Flag:=False;
If (k > 0) Then K:=K-1;
While Flag Do
Begin
If (k=0) Then Flag:=False;
F1(Mas[k]);
If (k > 0) Then K:=K-1;
End;
GoToXY(1,10);
Writeln('Provereno fajlov - ',NumberOfFile);
Writeln('Zarageno fajlov - ',NumberOfInfFile);
Writeln('Izlecheno fajlov - ',Num);
Write('Proverit drugoj disk? [Y/N]');
Repeat
Ch:=ReadKey;
If (Ord(Ch) = 27) Then Exit;
Until (Ch = 'Y') Or (Ch = 'y') Or (Ch = 'N') Or (Ch = 'n');
If (Ch = 'N') Or (Ch = 'n') Then NextDisk:=False;
Until Not(NextDisk);
End.