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

  1. .model  tiny
  2.  
  3. .386
  4.  
  5.         org 100h
  6.  
  7. .data
  8.  
  9. GroupLogo       db 13,10
  10.                 db '            ▄▄▄▄▄ ',13,10
  11.                 db '            █ ▄ █  ',13,10
  12.                 db '    █▀▀▀▀▀▀▀▀ ▄ ▀▀▀▀▀ ▀ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█  █▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ▀ ▀▀▀▀█ ',13,10
  13.                 db '    █ │░███████  │▓███████▀ │░███▀█▀▀▀▀▀▀▀ ▀ ▀▀▀▀ │░███▀█▀▀▀▀▀▓████▓▄  █ ',13,10
  14.                 db '    █ │▒███████  │▓███████  │▒███████  │▓███████▀ │▒███████  │▓███████ █ ',13,10
  15.                 db '    █ │▓███████  │▓███████  │▓███████  │▓███████  │▓███████  │▓███████ █ ',13,10
  16.                 db '    ▀ │▓███████  │▓███████  │▓███████  │▓███████  │▓███████  │▓███████ █▄▄▄ ',13,10
  17.                 db '    ▀ │▓███████  │▓███████  │▓███████  │▓███████  │▓███████  │▓███████▄ ▄ █ ',13,10
  18.                 db '    █ │▓███████  │▓███████  │▓███████  │▓███████  │▓███████               █ ',13,10
  19.                 db '    █ │▓███████▄▄▄▄▄█▄█▓▀   │▓███████▄▄▄▄▄█▄████  │▓███████▀▀ ▀    ▀      █ ',13,10
  20.                 db '    █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▀ █▀▀▀▀▀▀▀▀▀ ▀ ▀▀ ',13,10
  21.                 db '    .::[ u n i t e d · c r æ c k i n g · f o r c e ]::. █ ▀ █ Antibody<SAC> ',13,10
  22.                 db '    █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▀ █▀▀▀▀▀▀▀▀▀ ▀ ▀▀ ',13,10
  23.                 db '                                -----=====-----                             ',13,10
  24.                 db '     [■] All PACT 12 Ghosts Software v9x.x - Key Generator by Quantico [■]  ',13,10
  25.                 db '                                -----=====-----                             ',13,10
  26.                 db '                                 ',13,10,'$'
  27.  
  28.  
  29.  
  30. IntroMsgOne     db 13,10,'Enter a name please    : ','$'
  31.            
  32.  
  33. ErrorMsg        db 13,10,'Need 3-20 digits, try again...',13,10,'$'
  34.  
  35. ShowCodeMsg     db 13,10,13,10,'--=[Valid registration number]=-- ',13,10,'           '
  36.  
  37. Code2Buffer     db 0,0,0,0,0,0,0,0,0,0,13,10,'$'
  38.  
  39. oneletter       db 0
  40.  
  41. CodeBuffer      db 20 dup(0),13,10,'$'
  42.  
  43. NameBuffer      db 18h, 19h dup(0)
  44.  
  45. Convert_Digs     db '0123456789ABCDEF'
  46.  
  47. namelength      db 0
  48.  
  49.  
  50.  
  51. .code
  52.  
  53. .startup
  54.  
  55. main    proc    near
  56.         mov     ah, 09h                       ;
  57.         lea     edx, GroupLogo                ;
  58.         int     21h                           ; show group logo
  59.  
  60.         mov     ah, 09h                       ;
  61.         lea     edx, IntroMsgOne              ;
  62.         int     21h                           ; show intro and ask for input 
  63.  
  64.         mov     bx, 1403h                     ; limits for string input
  65.         lea     edi, NameBuffer               ;
  66.         call    getstr                        ; read user input
  67.         jc      @error                        ;
  68.         xor     eax, eax                      ; clear eax
  69.         call    keygen                        ; create serial number
  70.  
  71.         mov     ah, 09h                       ;
  72.         lea     dx, ShowCodeMsg               ;
  73.         int     21h                           ; print serial number
  74.         jmp     @exit                         ; finished, quit
  75. @error:
  76.         mov     ah, 09h
  77.         lea     dx, ErrorMsg
  78.         int     21h        
  79. @exit:
  80.         mov     al, 00h                       ;
  81.         mov     ah, 4Ch                       ;
  82.         int     21h                           ; terminate program
  83. main    endp
  84.  
  85.  
  86. keygen  proc    near
  87.  
  88.  
  89.         mov     eax, 0CC3233D6h
  90.         mov     esi, 0D1E98EF9h
  91.         xor     ecx, ecx
  92.         xor     edx, edx
  93.  
  94. generate_code_2: 
  95.         movzx   ebx, byte ptr [NameBuffer+2+ecx]
  96.         imul    ebx, eax
  97.         add     ebx, edx
  98.         inc     ecx
  99.         add     edx, esi
  100.         cmp     cl, byte ptr [namelength]
  101.         mov     eax, ebx
  102.         jb      generate_code_2
  103.  
  104.         cmp     eax, 3B9ACA00h
  105.         jae     skip_code_2_add
  106.         add     eax, 4B2A1792h
  107. skip_code_2_add:
  108.         xor    edx, edx
  109.     mov    ecx, 0000000Ah        
  110.     lea    edi, Code2Buffer
  111.     call    convert_num
  112.  
  113.     ret
  114. keygen    endp
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121. ; get string from user
  122. ; input :
  123. ;       edi = pointer to buffer
  124. ;       bl  = min length
  125. ;       bh  = max length
  126. ; output :
  127. ;    CF error, cx number of bytes read
  128. getstr  proc    near
  129.         push    dx                            ; save dx
  130.         mov     dx, di                        ;
  131.         mov     ah, 0Ah                       ;
  132.         int     021h                          ; get user input
  133.  
  134.         movsx   ecx, byte ptr [edi + 1]       ; get number of digits
  135.  
  136.         mov     byte ptr [edi + ecx + 2], 00h
  137.  
  138.         cmp     cl, bh                        ; check maximum
  139.         jg      @@0
  140.         cmp     cl, bl                        ; check minimum
  141.         jl      @@0
  142.         mov     [namelength], cl              ; store length
  143.     xor    ch, ch
  144.         clc                                   ; clear CF
  145.         jmp     @@1
  146. @@0:
  147.         stc                                   ; set CF (carry flag)        
  148. @@1:
  149.         pop     dx                            ; restore dx
  150.     ret
  151. getstr  endp
  152.  
  153. Convert_Num proc near
  154.         pushf
  155.     pushAD
  156.  
  157.         sub     esp, 4
  158.         mov     ebp,esp
  159.  
  160.         cld
  161.         mov     esi, edi
  162.         push    esi
  163.  
  164. ;--- loop for each digit
  165.  
  166.         sub     bh, bh
  167.         mov     dword ptr [ebp], eax               ;save low word
  168.         mov     dword ptr [ebp+4], edx             ;save high word
  169.         sub     esi, esi                          ;count digits
  170.  
  171. Connum1:
  172.         inc     esi
  173.         mov     eax, dword ptr [ebp+4]             ;high word of value
  174.         sub     edx, edx                          ;clear for divide
  175.         sub    ebx, ebx
  176.         div     ecx                              ;divide, DX gets remainder
  177.         mov     dword ptr [ebp+4],eax             ;save quotient (new high word)
  178.  
  179.         mov     eax, dword ptr [ebp]               ;low word of value
  180.         div     ecx                              ;divide, DX gets remainder
  181.                                                 ;  (the digit)
  182.         mov     dword ptr [ebp], eax               ;save quotient (new low word)
  183.  
  184.         mov     bl, dl
  185.         mov     al, byte ptr [Convert_Digs+ebx]  ;get the digit
  186.         stosb                                   ;store
  187.  
  188.         cmp     dword ptr [ebp], 0                ;check if low word zero
  189.         jne     Connum1                         ;jump if not
  190.         cmp     dword ptr [ebp+4], 0              ;check if high word zero
  191.         jne     Connum1                         ;jump if not
  192.  
  193.         sub     al, al
  194.         stosb                                   ;store the terminator
  195.  
  196. ;--- reverse digits
  197.  
  198.         pop     ecx                              ;restore start of string
  199.         xchg    ecx, esi
  200.         shr     ecx, 1                           ;number of reverses
  201.         jz      Connum3                         ;jump if none
  202.  
  203.         xchg    edi, esi
  204.         sub     esi, 2                           ;point to last digit
  205.  
  206. Connum2 :
  207.         mov     al, byte ptr [edi]               ;load front character
  208.         xchg    al, byte ptr [esi]               ;swap with end character
  209.         stosb                                   ;store new front character
  210.         dec     esi                              ;back up
  211.         loopd   Connum2                         ;loop back for each digit
  212.  
  213. ;--- finished
  214.  
  215. Connum3  :
  216.         add     esp, 4
  217.  
  218.     popad
  219.         popf
  220.         ret
  221.  endp           ;Convert_Num
  222.  
  223.  
  224.  
  225. end    main