home *** CD-ROM | disk | FTP | other *** search
/ Reverse Code Engineering RCE CD +sandman 2000 / ReverseCodeEngineeringRceCdsandman2000.iso / RCE / Quantico / km / keym1.pas.txt < prev    next >
Encoding:
Text File  |  2000-05-25  |  10.6 KB  |  235 lines

  1. Program Keymaker1;
  2. uses crt,palette,dos;
  3.  
  4. {$L ULONGS.OBJ}                         { link in the assembly code }
  5. FUNCTION LongADD (Addend1,Addend2:LONGINT):LONGINT;   EXTERNAL;
  6. FUNCTION LongSUB (LongWord,Subtrahend:LONGINT):LONGINT;  EXTERNAL;
  7. FUNCTION LongMUL (Multiplicand,Multiplier:LONGINT):LONGINT; EXTERNAL;
  8. FUNCTION LongDIV (Dividend,Divisor:LONGINT):LONGINT;  EXTERNAL;
  9. FUNCTION LongMOD (Dividend,Divisor:LONGINT):LONGINT;  EXTERNAL;
  10. PROCEDURE WriteULong (LongWord:LONGINT;     { the longword          }
  11.                       Width:BYTE;           { _minimum_ field width }
  12.                       FillChar:CHAR;        { leading space char    }
  13.                       Base:BYTE); EXTERNAL; { number base 2..26     }
  14.  
  15. const Base: array[0..1023] of byte = (
  16.     $00, $00, $00, $00, $96, $30, $07, $77, $2C, $61, $0E, $EE, $BA, $51, $09, $99,
  17.     $19, $C4, $6D, $07, $8F, $F4, $6A, $70, $35, $A5, $63, $E9, $A3, $95, $64, $9E,
  18.     $32, $88, $DB, $0E, $A4, $B8, $DC, $79, $1E, $E9, $D5, $E0, $88, $D9, $D2, $97,
  19.     $2B, $4C, $B6, $09, $BD, $7C, $B1, $7E, $07, $2D, $B8, $E7, $91, $1D, $BF, $90,
  20.     $64, $10, $B7, $1D, $F2, $20, $B0, $6A, $48, $71, $B9, $F3, $DE, $41, $BE, $84,
  21.     $7D, $D4, $DA, $1A, $EB, $E4, $DD, $6D, $51, $B5, $D4, $F4, $C7, $85, $D3, $83,
  22.     $56, $98, $6C, $13, $C0, $A8, $6B, $64, $7A, $F9, $62, $FD, $EC, $C9, $65, $8A,
  23.     $4F, $5C, $01, $14, $D9, $6C, $06, $63, $63, $3D, $0F, $FA, $F5, $0D, $08, $8D,
  24.     $C8, $20, $6E, $3B, $5E, $10, $69, $4C, $E4, $41, $60, $D5, $72, $71, $67, $A2,
  25.     $D1, $E4, $03, $3C, $47, $D4, $04, $4B, $FD, $85, $0D, $D2, $6B, $B5, $0A, $A5,
  26.     $FA, $A8, $B5, $35, $6C, $98, $B2, $42, $D6, $C9, $BB, $DB, $40, $F9, $BC, $AC,
  27.     $E3, $6C, $D8, $32, $75, $5C, $DF, $45, $CF, $0D, $D6, $DC, $59, $3D, $D1, $AB,
  28.     $AC, $30, $D9, $26, $3A, $00, $DE, $51, $80, $51, $D7, $C8, $16, $61, $D0, $BF,
  29.     $B5, $F4, $B4, $21, $23, $C4, $B3, $56, $99, $95, $BA, $CF, $0F, $A5, $BD, $B8,
  30.     $9E, $B8, $02, $28, $08, $88, $05, $5F, $B2, $D9, $0C, $C6, $24, $E9, $0B, $B1,
  31.     $87, $7C, $6F, $2F, $11, $4C, $68, $58, $AB, $1D, $61, $C1, $3D, $2D, $66, $B6,
  32.     $90, $41, $DC, $76, $06, $71, $DB, $01, $BC, $20, $D2, $98, $2A, $10, $D5, $EF,
  33.     $89, $85, $B1, $71, $1F, $B5, $B6, $06, $A5, $E4, $BF, $9F, $33, $D4, $B8, $E8,
  34.     $A2, $C9, $07, $78, $34, $F9, $00, $0F, $8E, $A8, $09, $96, $18, $98, $0E, $E1,
  35.     $BB, $0D, $6A, $7F, $2D, $3D, $6D, $08, $97, $6C, $64, $91, $01, $5C, $63, $E6,
  36.     $F4, $51, $6B, $6B, $62, $61, $6C, $1C, $D8, $30, $65, $85, $4E, $00, $62, $F2,
  37.     $ED, $95, $06, $6C, $7B, $A5, $01, $1B, $C1, $F4, $08, $82, $57, $C4, $0F, $F5,
  38.     $C6, $D9, $B0, $65, $50, $E9, $B7, $12, $EA, $B8, $BE, $8B, $7C, $88, $B9, $FC,
  39.     $DF, $1D, $DD, $62, $49, $2D, $DA, $15, $F3, $7C, $D3, $8C, $65, $4C, $D4, $FB,
  40.     $58, $61, $B2, $4D, $CE, $51, $B5, $3A, $74, $00, $BC, $A3, $E2, $30, $BB, $D4,
  41.     $41, $A5, $DF, $4A, $D7, $95, $D8, $3D, $6D, $C4, $D1, $A4, $FB, $F4, $D6, $D3,
  42.     $6A, $E9, $69, $43, $FC, $D9, $6E, $34, $46, $88, $67, $AD, $D0, $B8, $60, $DA,
  43.     $73, $2D, $04, $44, $E5, $1D, $03, $33, $5F, $4C, $0A, $AA, $C9, $7C, $0D, $DD,
  44.     $3C, $71, $05, $50, $AA, $41, $02, $27, $10, $10, $0B, $BE, $86, $20, $0C, $C9,
  45.     $25, $B5, $68, $57, $B3, $85, $6F, $20, $09, $D4, $66, $B9, $9F, $E4, $61, $CE,
  46.     $0E, $F9, $DE, $5E, $98, $C9, $D9, $29, $22, $98, $D0, $B0, $B4, $A8, $D7, $C7,
  47.     $17, $3D, $B3, $59, $81, $0D, $B4, $2E, $3B, $5C, $BD, $B7, $AD, $6C, $BA, $C0,
  48.     $20, $83, $B8, $ED, $B6, $B3, $BF, $9A, $0C, $E2, $B6, $03, $9A, $D2, $B1, $74,
  49.     $39, $47, $D5, $EA, $AF, $77, $D2, $9D, $15, $26, $DB, $04, $83, $16, $DC, $73,
  50.     $12, $0B, $63, $E3, $84, $3B, $64, $94, $3E, $6A, $6D, $0D, $A8, $5A, $6A, $7A,
  51.     $0B, $CF, $0E, $E4, $9D, $FF, $09, $93, $27, $AE, $00, $0A, $B1, $9E, $07, $7D,
  52.     $44, $93, $0F, $F0, $D2, $A3, $08, $87, $68, $F2, $01, $1E, $FE, $C2, $06, $69,
  53.     $5D, $57, $62, $F7, $CB, $67, $65, $80, $71, $36, $6C, $19, $E7, $06, $6B, $6E,
  54.     $76, $1B, $D4, $FE, $E0, $2B, $D3, $89, $5A, $7A, $DA, $10, $CC, $4A, $DD, $67,
  55.     $6F, $DF, $B9, $F9, $F9, $EF, $BE, $8E, $43, $BE, $B7, $17, $D5, $8E, $B0, $60,
  56.     $E8, $A3, $D6, $D6, $7E, $93, $D1, $A1, $C4, $C2, $D8, $38, $52, $F2, $DF, $4F,
  57.     $F1, $67, $BB, $D1, $67, $57, $BC, $A6, $DD, $06, $B5, $3F, $4B, $36, $B2, $48,
  58.     $DA, $2B, $0D, $D8, $4C, $1B, $0A, $AF, $F6, $4A, $03, $36, $60, $7A, $04, $41,
  59.     $C3, $EF, $60, $DF, $55, $DF, $67, $A8, $EF, $8E, $6E, $31, $79, $BE, $69, $46,
  60.     $8C, $B3, $61, $CB, $1A, $83, $66, $BC, $A0, $D2, $6F, $25, $36, $E2, $68, $52,
  61.     $95, $77, $0C, $CC, $03, $47, $0B, $BB, $B9, $16, $02, $22, $2F, $26, $05, $55,
  62.     $BE, $3B, $BA, $C5, $28, $0B, $BD, $B2, $92, $5A, $B4, $2B, $04, $6A, $B3, $5C,
  63.     $A7, $FF, $D7, $C2, $31, $CF, $D0, $B5, $8B, $9E, $D9, $2C, $1D, $AE, $DE, $5B,
  64.     $B0, $C2, $64, $9B, $26, $F2, $63, $EC, $9C, $A3, $6A, $75, $0A, $93, $6D, $02,
  65.     $A9, $06, $09, $9C, $3F, $36, $0E, $EB, $85, $67, $07, $72, $13, $57, $00, $05,
  66.     $82, $4A, $BF, $95, $14, $7A, $B8, $E2, $AE, $2B, $B1, $7B, $38, $1B, $B6, $0C,
  67.     $9B, $8E, $D2, $92, $0D, $BE, $D5, $E5, $B7, $EF, $DC, $7C, $21, $DF, $DB, $0B,
  68.     $D4, $D2, $D3, $86, $42, $E2, $D4, $F1, $F8, $B3, $DD, $68, $6E, $83, $DA, $1F,
  69.     $CD, $16, $BE, $81, $5B, $26, $B9, $F6, $E1, $77, $B0, $6F, $77, $47, $B7, $18,
  70.     $E6, $5A, $08, $88, $70, $6A, $0F, $FF, $CA, $3B, $06, $66, $5C, $0B, $01, $11,
  71.     $FF, $9E, $65, $8F, $69, $AE, $62, $F8, $D3, $FF, $6B, $61, $45, $CF, $6C, $16,
  72.     $78, $E2, $0A, $A0, $EE, $D2, $0D, $D7, $54, $83, $04, $4E, $C2, $B3, $03, $39,
  73.     $61, $26, $67, $A7, $F7, $16, $60, $D0, $4D, $47, $69, $49, $DB, $77, $6E, $3E,
  74.     $4A, $6A, $D1, $AE, $DC, $5A, $D6, $D9, $66, $0B, $DF, $40, $F0, $3B, $D8, $37,
  75.     $53, $AE, $BC, $A9, $C5, $9E, $BB, $DE, $7F, $CF, $B2, $47, $E9, $FF, $B5, $30,
  76.     $1C, $F2, $BD, $BD, $8A, $C2, $BA, $CA, $30, $93, $B3, $53, $A6, $A3, $B4, $24,
  77.     $05, $36, $D0, $BA, $93, $06, $D7, $CD, $29, $57, $DE, $54, $BF, $67, $D9, $23,
  78.     $2E, $7A, $66, $B3, $B8, $4A, $61, $C4, $02, $1B, $68, $5D, $94, $2B, $6F, $2A,
  79.     $37, $BE, $0B, $B4, $A1, $8E, $0C, $C3, $1B, $DF, $05, $5A, $8D, $EF, $02, $2D);
  80.  
  81. Type u32 = array[1..4] of byte; { no 32-bit unsigned integers in TP7.1 :( }
  82.  
  83. var edx,esi,ebx,eax,ecx : u32;
  84.     RegName,Licenses,CombinedRegName : String;
  85.     i,j : word;
  86.     dummy:byte;
  87.     eeax,eecx:longint;
  88.     flag:boolean;
  89. const
  90.  hex : array[0..$F] of Char = '0123456789ABCDEF';
  91.  
  92.  
  93.  
  94. function B( B : Byte) : String; assembler;
  95. asm
  96.  les di,@Result
  97.  mov al,2
  98.  stosb
  99.  mov bl,B
  100.  xor bh,bh
  101.  mov dl,bl
  102.  shr bl,1
  103.  shr bl,1
  104.  shr bl,1
  105.  shr bl,1
  106.  mov al,byte ptr hex[bx]
  107.  mov bl,dl
  108.  and bl,$F
  109.  mov ah,byte ptr hex[bx]
  110.  stosw
  111. end;
  112.  
  113. Procedure Output;
  114.  
  115. Begin
  116.   writeln('EAX=',B(eax[1]),B(eax[2]),B(eax[3]),B(eax[4]),'  ',
  117.           'EBX=',B(ebx[1]),B(ebx[2]),B(ebx[3]),B(ebx[4]),'  ',
  118.           'EdX=',B(edx[1]),B(edx[2]),B(edx[3]),B(edx[4]),'  ');
  119. end;
  120.  
  121.  
  122. Procedure Keymaker;
  123.  
  124. begin
  125.    for i:=1 to 4 do edx[i]:=255;                  { mov edx,$ffffffff }
  126.    for i:=1 to 4 do eax[i]:=255;                  { mov eax,$ffffffff }
  127.  
  128.  
  129.    for i:=1 to 3 do esi[i]:=0;                    { mov esi,length(Combined..) }
  130.    esi[4]:=length(CombinedRegName);
  131.  
  132.    for i:=1 to esi[4] do begin
  133.      for j:=1 to 4 do edx[j]:=eax[j];             { mov edx,eax }
  134.      for j:=1 to 4 do ebx[j]:=0;                  { xor ebx,ebx }
  135.      for j:=1 to 3 do ebx[j]:=0;                  { mov bl,[ecx] }
  136.      ebx[4]:=ord(CombinedRegName[i]);
  137.      for j:=1 to 3 do edx[j]:=0;                  { and edx,$ff }
  138.  
  139.      for j:=1 to 4 do edx[j]:=edx[j] xor ebx[j];
  140.  
  141.      for j:=3 downto 1 do eax[j+1]:=eax[j];       { shr eax,8 }
  142.      eax[1]:=0;
  143.  
  144.      dummy:=edx[4];
  145.      for j:=1 to 4 do edx[j]:=Base[dummy*4+(4-j)];{ mov edx,[edx*4+c] }
  146.      for j:=1 to 4 do eax[j]:=eax[j] xor edx[j];
  147. {     output;}
  148.    end;
  149.    eecx:=LongADD(
  150.          LongADD( LongMUL(eax[1],$1000000),LongMUL(eax[2],$10000) ),
  151.          LongADD( LongMUL(eax[3],$100),LongMUL(eax[4],1) )
  152.          );
  153.    eeax:=$47961B7;
  154.    eeax:=LongMUL(EEAX,(EECX));
  155.    eecx:=$2c041e0;
  156.    eeax:=LongMUL(eeax,$2c041e0);
  157. end;
  158.  
  159.  
  160. Procedure Curs(n:integer);
  161.  
  162. Var regs : registers;
  163.  
  164. Begin
  165.   regs.ah:=1;
  166.   case n of
  167.   0 : begin
  168.         regs.cl:=32;
  169.         regs.ch:=32;
  170.       end;
  171.   1 : begin
  172.         regs.cl:=8;
  173.         regs.ch:=7;
  174.       end;
  175.   end;
  176.   intr($10,regs);
  177. End;
  178.  
  179. begin
  180.   curs(0);
  181.   FadeDown;
  182.   Clrscr;
  183.   textcolor(white);
  184.   writeln('      T  ·  H  ·  E     F  ·  O  ·  R  ·  C  ·  E     T  ·  E  ·  A  ·  M');
  185.   textcolor(blue);
  186.   writeln('');
  187.   writeln('         S²²²²²²²²²Ss.          .sS2²²²²²²²²²²²²²2Ss.sS²²²²²²²²²Ss. ');
  188.   writeln('         $ $$$$$$$! $$         $²~.sS$$$$$$$$$$$Ss.~²$$ $$$$$$$! $$');
  189.   writeln('         $ I$$$$$$$,²$         $ I$$$$$$$;^:$$$$$$$$ $$ $$$$$$$$,²$');
  190.   writeln('      .sS$ $$$$$$$$: $Ss.      $ $$$$$$$$: l$$$$$$$$ $$ $$$$$$$$: $Ss.');
  191.   writeln('      $ sss$$$$$$$$lsss $   .sS$ $$$$$$$$l :$$$$$$$I sss$$$$$$$$lsss $');
  192.   writeln('      $sss $$$$$$$$; sss$   $ sss$$$$$$$$;sss ...... ss $$$$$$$$; sss$');
  193.   writeln('         $ $$$$$$$$. ²²²²²²²²··s $$$$$$$$, sss$$$$$$$$$ I$$$$$$$. ²²²²²²²²²²S');
  194.   writeln('         $ $$$$$$$$: .$$$$$$$! $ $$$$$$$$l $          $ $$$$$$$$: .$$$$$$$! $');
  195.   writeln('         $ $$$$$$$$I :$$$$$$$$ $ $$$$$$$$. $          $ $$$$$$$$I :$$$$$$$$ $');
  196.   writeln('         $ :$$$$$$$: :$$$$$$$; $ $$$$$$$$; $          $ :$$$$$$$: :$$$$$$$; $');
  197.   writeln('         :$.`~²2$$$$s$$$$$2²~∩,$ !$$$$$$!  $          $$ `~²2$$$$s$$$$$2²~∩.;');
  198.   writeln('         `~²2$Ss..........sS2²∩`²ssssssss2²∩          `~²2$Ss..........sS2²~∩');
  199.   writeln;
  200.   writeln;
  201.   textcolor(white);
  202.   writeln('               · Get Time Server v.2.1, Keymaker by MiRaMaX ·');
  203.   textcolor(lightgray);
  204.   writeln;
  205.   writeln;
  206.   gotoxy(1,19);
  207.   write('             Enter Registration name   : ');
  208.   fadeup;
  209.   curs(1);
  210.   readln(RegName);
  211.   write('             Number of licenses        : ');
  212.   curs(1);
  213.   readln(Licenses);
  214.   curs(0);
  215.   flag:=true;
  216.   for i:=1 to length(licenses) do if not((licenses[i]>='0')and(licenses[i]<='9')) then flag:=false;
  217.   if flag then begin
  218.     for i:=1 to length(RegName) do Regname[i]:=upcase(Regname[i]);
  219.     CombinedRegName:=RegName+Licenses;
  220.     keymaker;
  221.     gotoxy(1,19);
  222.     Writeln('             Registration name         : ',regname);
  223.     Writeln('             Number of licenses        : ',licenses);
  224.     Write('             Your registration code is : ');
  225.     WriteULong ( eeax,10,' ',10);
  226.   end else begin
  227.     writeln;
  228.     writeln('             You may only enter numbers... try again...');
  229.   end;
  230.   readkey;
  231.   fadedown;
  232.   clrscr;
  233.   fadeup;
  234. end.
  235.