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

  1. .model  tiny
  2. .386
  3. org 100h
  4. .data
  5.  
  6. GroupLogo       db 13,10
  7.                 db '            ▄▄▄▄▄ ',13,10
  8.                 db '            █ ▄ █  ',13,10
  9.                 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 '    .::[ u n i t e d · c r æ c k i n g · f o r c e ]::. █ ▀ █ Antibody<SAC> ',13,10
  19.                 db '    █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▀ █▀▀▀▀▀▀▀▀▀ ▀ ▀▀ ',13,10
  20.                 db '                                -----=====-----                             ',13,10
  21.                 db '          [■]   All Ilium Software - Key Generator by Quantico   [■]        ',13,10
  22.                 db '                                -----=====-----                             ',13,10
  23.                 db '                                 ',13,10,'$'
  24.  
  25.  
  26. IntroMsgOne     db 13,10,'Enter a name please    : ','$'
  27.  
  28. Whichproduct    db 13,10
  29.                 db '',13,10
  30.                 db '(1)  - eWallet    v1.2.1T  ',13,10
  31.                 db '(2)  - Keep Track v2.0.1T    ',13,10
  32.                 db '(3)  - ListPro    v1.1.0T  ',13,10
  33.                 db '(4)  - Recordian  v1.0.2T  ',13,10
  34.  
  35.  
  36.                 db '',13,10
  37.                 db 'Enter a product (1-4)  : ','$',13,10
  38.                 db ' ',13,10
  39.  
  40.  
  41. ErrorMsg        db 13,10,'Need 5-25 digits, try again...',13,10,'$'
  42.  
  43. ShowCodeMsg     db 13,10,'Registration number    : '
  44.  
  45. CodeBuffer      db 20 dup(0),13,10,'$'
  46.  
  47. NameBuffer      db 18h, 19h dup(0)
  48.  
  49. ProdBuffer      db 18h, 2 dup(0)
  50.  
  51. Convert_Digs    db '0123456789ABCDEF'
  52.  
  53. namelength      db 0
  54.  
  55. ewallet         db 'eWallet95',0
  56.  
  57. keeptrack       db 'KeepTrack95',0
  58.  
  59. listpro         db 'ListPro95',0
  60.  
  61. recordian       db 'Recordian95',0
  62.  
  63. mess            db 13 dup(0)
  64.  
  65. ;----------------------------------------------------------------------
  66.  
  67. .code
  68.  
  69. .startup
  70.  
  71. main    proc    near
  72.         mov     ah, 09h                       ;
  73.         lea     edx, GroupLogo                ;
  74.         int     21h                           ; show group logo
  75.  
  76.         mov     ah, 09h                       ;
  77.         lea     edx, IntroMsgOne              ;
  78.         int     21h                           ; show intro and ask for input 
  79.  
  80.         mov     bx, 1905h                     ; limits for string input
  81.         lea     edi, NameBuffer               ;
  82.         call    getstr                        ; read user input
  83.         jc      @error                        ;
  84.  
  85.         mov    ah, 09h                       ;
  86.         lea     edx, Whichproduct             ;
  87.         int     21h                           ; show product message and ask for input 
  88.  
  89.         xor     edi, edi
  90.         xor     esi, esi
  91.         lea     edi, ProdBuffer               ;
  92.         call    getprod                           ; read user input
  93.  
  94.         xor     eax, eax                      ; clear eax
  95.  
  96.         call    keygen                        ; create serial number
  97.  
  98.         mov     ah, 09h                       ;
  99.         lea     dx, ShowCodeMsg               ;
  100.         int     21h                           ; print serial number
  101.         jmp     @exit                         ; finished, quit
  102. @error:
  103.         mov     ah, 09h
  104.         lea     dx, ErrorMsg
  105.         int     21h        
  106. @exit:
  107.         mov     al, 00h                       ;
  108.         mov     ah, 4Ch                       ;
  109.         int     21h                           ; terminate program
  110. main    endp
  111.  
  112.  
  113. keygen  proc    near
  114.  
  115.         int     3                    ; for debugging
  116.  
  117.         lea    dx, ProdBuffer+2     ; number of product     
  118.         movsx   eax, byte ptr [edx]  ; in eax
  119.  
  120.         cmp     ax, 31h              ; less than 1 ?
  121.         jl      no_code              ; (just some error checking:)
  122.         cmp     ax, 34h              ; greater than 4 ?
  123.         jg      no_code
  124.  
  125.         mov     edi, offset mess     ; area to store string for whatever
  126.                      ; product the user selected
  127.         cmp     ax, 31h                    
  128.         jnz     @keeptrack
  129.         mov     esi, offset ewallet
  130.         mov     ecx, 9
  131.         rep     movsb                ; copy string for whatever product
  132.         jmp     selected
  133. @keeptrack:                     
  134.         cmp     ax, 32h                     
  135.         jnz     @listpro  
  136.         mov     esi, offset keeptrack
  137.         mov     ecx, 0Bh
  138.         rep     movsb
  139.         jmp     selected
  140. @listpro:                  
  141.         cmp     ax, 33h                      
  142.         jnz     @recordian
  143.         mov     esi, offset listpro
  144.         mov     ecx, 9h
  145.         rep     movsb
  146.         jmp     selected
  147. @recordian:                  
  148.         mov     esi, offset recordian
  149.         mov     ecx, 0Bh
  150.         rep     movsb        
  151.         
  152. selected:
  153.  
  154.         mov     ebx, offset NameBuffer+2 ; ebx = start of name
  155.         mov     esi, offset mess         ; esi = product specific string
  156.         mov     al, byte ptr [esi]       ; al = byte of string
  157.         mov     dl, byte ptr [ebx]       ; dl = byte of name
  158.         xor     ecx, ecx                 ; ecx = 0
  159. back_up:
  160.         cmp     al, 20h                  ; does al = ' '
  161.         jz      get_next_letter          ; if so, skip calculation and get next
  162.                      ; letter
  163.         movsx   eax, al                  ; eax = al 
  164.         mov     ebx, ecx                 
  165.         mov     ebp, eax
  166.         and     ebx, 1 
  167.         and     ebp, 0Fh
  168.         shl     ebx, 8
  169.         sub     ebp, ebx
  170.         and     eax, 70h
  171.         shl     ebp, 7
  172.         add     ebp, eax
  173.         mov     ebx, offset NameBuffer+2
  174.         shr     ecx, 1
  175.         shl     ebp, 4
  176.         and     ecx, 7FFFFh
  177.         add     ebp, ecx
  178.         not     ebp
  179.         and     ebp, 0FFFFFh
  180.         mov     ecx, ebp
  181.         mov     ebp, 20h
  182. get_next_letter:
  183.         mov     al, byte ptr [esi+1]
  184.         inc     esi
  185.         test    al, al
  186.         jnz     back_up
  187. back_up_2:        
  188.         cmp     dl, 20h
  189.         jz      next_letter_2
  190.         movsx   eax, dl
  191.         mov     edx, ecx
  192.         mov     esi, eax
  193.         and     edx, 7FFFFh
  194.         and     esi, 0Fh
  195.         shr     ecx, 13h
  196.         lea     edx, [esi*4+edx]
  197.         and     ecx, 1
  198.         sar     eax, 4
  199.         lea     ecx, [edx*2+ecx]
  200.         and     eax, 7
  201.         add     ecx, eax
  202.         not     ecx
  203.         and     ecx, 0FFFFFh
  204. next_letter_2:
  205.         mov     dl, byte ptr [ebx+1]
  206.         inc     ebx
  207.         test    dl, dl
  208.         jnz     back_up_2
  209.  
  210.         test    ecx, ecx
  211.         jz      no_code
  212.  
  213.         mov     edi, offset CodeBuffer
  214. back_up_3:
  215.         cmp     ebp, 1
  216.         jle     finish
  217.         mov     eax, ecx
  218.         xor     edx, edx
  219.         mov     esi, 0Ah
  220.         div     esi
  221.         mov     eax, 0CCCCCCCDh
  222.         add     dl, 30h
  223.         mov     byte ptr [edi], dl
  224.         mul     ecx
  225.         shr     edx, 3
  226.         inc     edi
  227.         mov     ecx, edx
  228.         dec     ebp
  229. finish:
  230.         test    ecx, ecx
  231.         jnz     back_up_3
  232.  
  233.         mov     byte ptr [edi],00
  234.  
  235. no_code:
  236.                          
  237.         ret                        ; end of procedure, return to caller
  238.  
  239. keygen    endp
  240.  
  241.  
  242.  
  243. ; get string from user
  244. ; input :
  245. ;       edi = pointer to buffer
  246. ;       bl  = min length
  247. ;       bh  = max length
  248. ; output :
  249. ;    CF error, cx number of bytes read
  250.  
  251. getstr  proc    near
  252.         push    dx                            ; save dx
  253.         mov     dx, di                        ;
  254.         mov     ah, 0Ah                       ;
  255.         int     21h                           ; get user input
  256.  
  257.         movsx   ecx, byte ptr [edi + 1]       ; get number of digits
  258.  
  259.         mov     byte ptr [edi + ecx + 2], 00h
  260.  
  261.         cmp     cl, bh                        ; check maximum
  262.         jg      @@0
  263.         cmp     cl, bl                        ; check minimum
  264.         jl      @@0
  265.         mov     [namelength], cl              ; store length
  266.         xor     ch, ch
  267.         clc                                   ; clear CF
  268.         jmp     @@1
  269. @@0:
  270.         stc                                   ; set CF (carry flag)        
  271. @@1:
  272.         pop     dx                            ; restore dx
  273.         ret
  274. getstr  endp
  275.  
  276.  
  277. getprod proc    near
  278.         push    dx                            ; save dx
  279.         mov     dx, di                        ;
  280.         mov     ah, 0Ah                       ;
  281.         int     021h                          ; get user input
  282.  
  283.         movsx   ecx, byte ptr [edi + 1]       ; get number of digits
  284.  
  285.         mov     byte ptr [edi + ecx + 2], 00h
  286.  
  287.     xor    ch, ch
  288.         clc                                   ; clear CF
  289.         pop     dx                            ; restore dx
  290.     ret
  291. getprod  endp
  292.  
  293. end    main
  294.