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

  1. .model tiny
  2. .386
  3.  
  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 '  ░ ░░ ░ ▄███▓███ ▄██▄ ░▐██▓██ ▐█▓███  ██▓█▓█▌ ░░░ ▄████▓██ ▄█▓██▄ ░░░ ░ ░░',13,10
  19.                 db '     ░    ▀▀██▓█▌ █▓██▀ ▀████▌ █▓██▀  ▐█▓▓███▀▀      ▀▀███▌ █▓██▀       ░',13,10
  20.                 db '         ▄▄   ▀▀█▄██▀ ds   ▀▀█▄██▀    █▀▀▀       ▀▀▄▄   ▀▀█▄██▀  ▄',13,10
  21.                 db '           ▀▀▄▄   ▀     ▀▓▄▄   ▀   ▄     ▄▓▄▀▀▀      ▀▀▄▄   ▀  ▄▓ ▀▄',13,10
  22.                 db '               ▀▀▄▓▄   ▄ ▓  ▀▀   ▄▀  ▄▄▀▀ ▓              ▀▀   ▀ ▒',13,10
  23.                 db '                  ▓  ▄▀         ▀',13,10,'$'
  24.  
  25. IntroMsgOne     db 13,10,'            [■]    GlobeTime v1.21 - Key Generator by Vizion    [■]',13,10
  26.                 db 13,10,'                   Enter name (2-20 digits) : ','$'
  27.  
  28. Err1buffer      db 13,10,'                   Wrong name input... try again.',13,10,'$'
  29. Err2Buffer      db 13,10,'                   Error creating output file...',13,10,'$'
  30. Err3Buffer      db 13,10,'                   Error writing the output file...',13,10,'$'
  31.  
  32. DoneBuffer      db 13,10,'                   Key file created (REG.KEY)...'
  33.                 db 13,10,'                   Move it to directory the program is located in.',13,10,'$'
  34.  
  35. fName           db 'REG.KEY'                  ; file name
  36. fHandle         dw 0
  37.  
  38. NameBuffer      db 18h, 21 dup(0)             ; user name               
  39. TempBuffer      db 40 dup(0)                  ; extra space
  40. XtraBuffer      db 0,0,0,0,0,0,0,0,0
  41.  
  42. .code
  43.  
  44. .startup
  45.  
  46. main    proc    near
  47.         mov     ah, 09h                       ;
  48.         lea     dx, GroupLogo                 ;
  49.         int     21h                           ; show logo 
  50.  
  51.         mov     ah, 09h                       ;
  52.         lea     dx, IntroMsgOne               ;
  53.         int     21h                           ; show intro and ask for input 
  54.  
  55.         mov     bl, 02h
  56.         mov     bh, 14h        
  57.         lea     di, NameBuffer                ;
  58.         call    getstr                        ; read user information
  59.         jc      @err1
  60.  
  61.         call    keygen                        ; create serial number
  62.  
  63.         push    eax
  64.  
  65.         mov     esi, 02EF77BEh
  66.         lea     edi, TempBuffer + 1
  67.         push    edi
  68.         call    num2str
  69.  
  70.         mov     byte ptr [edi], 13
  71.         mov     byte ptr [edi+1], 10
  72.         add     cl, 2                         ; add return and update lenght      
  73.  
  74.         pop     edi
  75.         mov     byte ptr [edi - 1], cl
  76.  
  77.         lea     esi, TempBuffer + 1
  78.         lea     edi, NameBuffer + 2
  79.         movsx   ecx, byte ptr [esi - 1]
  80.         movsx   edx, byte ptr [edi - 1]
  81.         call    cncstr                        ; concatenate 2 strings
  82.  
  83.         mov     byte ptr [esi + ecx], 13
  84.         mov     byte ptr [esi + ecx + 1], 10
  85.         add     cl, 2
  86.         mov     byte ptr [esi - 1], cl        ; add return and update length
  87.  
  88.         pop     eax
  89.  
  90.         mov     esi, eax
  91.         lea     edi, XtraBuffer + 1
  92.         push    edi
  93.         call    num2str                      
  94.         pop     edi
  95.         mov     byte ptr [edi - 1], cl
  96.  
  97.         lea     esi, TempBuffer + 1
  98.         lea     edi, XtraBuffer + 1
  99.         movsx   ecx, byte ptr [esi - 1]
  100.         movsx   edx, byte ptr [edi - 1]
  101.         call    cncstr                        ; concatenate 2 strings
  102.  
  103.         push    cx
  104.  
  105.         xor     cx, cx
  106.         lea     dx, fName                     ; load file name
  107.         mov     ah, 3Ch
  108.         int     21h                           ; create new file
  109.         jc      @err2                         ; get out if error
  110.         mov     [fHandle], ax                 ; store file handle
  111.  
  112. ;        int     3                             ; debug purpose
  113.  
  114.         lea     edx, TempBuffer + 1           ; stuff to write
  115.         mov     cl, byte ptr [edx - 1]        ; number of bytes
  116.         mov     bx, [fHandle]                 ;
  117.         mov     ah, 40h
  118.         int     21h                           ; write to file
  119.         jc      @err3
  120.  
  121.         jmp     @done
  122.  
  123. @err1:
  124.         lea     dx, Err1Buffer                ;
  125.         mov     ah, 09h                       ;
  126.         int     21h                           ; wrong user input
  127.         jmp     @exit
  128.  
  129. @err2:
  130.         lea     dx, Err2Buffer                ;
  131.         mov     ah, 09h                       ;
  132.         int     21h                           ; error : create file
  133.         jmp     @exit
  134.  
  135. @err3:
  136.         lea     dx, Err3Buffer                ;
  137.         mov     ah, 09h                       ;
  138.         int     21h                           ; error : create file
  139.         jmp     @exit
  140.  
  141. @done:
  142.         lea     dx, DoneBuffer                ;
  143.         mov     ah, 09h                       ;
  144.         int     21h                           ; error : create file
  145.  
  146. @exit:
  147.         mov     al, 00h                       ;
  148.         mov     ah, 4Ch                       ;
  149.         int     21h                           ; terminate program
  150. main    endp
  151.  
  152. keygen  proc    near
  153. ;        int     3                             ; debug purpose
  154.  
  155.         mov     ebx, 0000001h
  156.  
  157.         lea     eax, NameBuffer + 2
  158.         movsx   edx, byte ptr [eax - 1]
  159. @kyg:
  160.         xor     ecx, ecx
  161.         mov     cl, byte ptr [eax]
  162.         xor     ebx, ecx
  163.         inc     eax
  164.         dec     edx
  165.         jnz     @kyg
  166.  
  167.         mov     eax, 02EF77BEh 
  168.         cdq
  169.         idiv    ebx
  170.         ret
  171. keygen    endp
  172.  
  173. ; get string from user
  174. ; input :
  175. ;       edi = pointer to buffer
  176. ;       bl  = min length
  177. ;       bh  = max length
  178. ; output :
  179. ;    CF error, cx number of bytes read
  180. getstr  proc near
  181.         push    dx                            ; save dx
  182.         mov     dx, di                        ;
  183.         mov     ah, 0Ah                       ;
  184.         int     021h                          ; get user input
  185.  
  186.         mov     cl, [di + 1]                  ; get number of digits
  187.         cmp     cl, bh                        ; check maximum
  188.         jg      @@0
  189.         cmp     cl, bl                        ; check minimum
  190.         jle     @@0
  191.     xor    ch, ch
  192.     add    di, 2
  193.         clc                                   ; clear CF
  194.         jmp     @@1
  195. @@0:
  196.         stc                                   ; set CF (carry flag)        
  197. @@1:
  198.         pop     dx                            ; restore dx
  199.     ret
  200. getstr  endp
  201.  
  202. ; convert dword to string
  203. ; input :
  204. ;       esi = dword
  205. ;       edi = pointer to buffer
  206. ; output :
  207. ;       edi = buffer filled
  208. ;       ecx = length of string
  209. num2str proc    near
  210.     push    bp
  211.     push    dx
  212.     push    bx
  213.     push    esi
  214.     pop    ax
  215.     pop    dx
  216.     xor    bp, bp
  217.     
  218.         or      dx,dx
  219.         jns     @l0
  220.         not     ax
  221.         not     dx
  222.         add     ax, 0001
  223.         adc     dx,+00
  224. @l0:
  225.         mov     si, 10
  226.         mov     cx, ax
  227.         mov     ax, dx
  228.         xor     dx, dx
  229.         div     si
  230.         mov     bx, ax
  231.         mov     ax, cx
  232.         div     si
  233.         xchg    dx, bx
  234.         add     bl, 30h
  235.         push    bx
  236.         inc     bp
  237.         mov     bx, ax
  238.         or      bx, dx
  239.         jnz     @l0
  240.         mov     cx, bp
  241.     cld
  242. @l1:
  243.     pop    ax
  244.     stosb
  245.         loop    @l1
  246.         or      cx, bp
  247.     pop    bx
  248.     pop    dx
  249.     pop    bp
  250.     ret
  251. num2str endp
  252.  
  253. ; concatenate 2 strings
  254. ; input :
  255. ;       esi = string one, ecx = length string one
  256. ;       edi = string two, edx = length string two
  257. ; output :
  258. ;       esi = string one + string two, edx = new length
  259. cncstr  proc    near
  260.         xor     eax, eax                     ;
  261.         xor     ebp, ebp                     ; clear register
  262.  
  263.         push    esi                          ; save esi
  264.  
  265.         add     esi, ecx                     ; set esi at end of string one
  266.         add     ecx, edx                     ; adjust new length
  267. @cnc:
  268.         mov     al, byte ptr [edi + ebp]     ; get digit of string two
  269.         mov     byte ptr [esi + ebp], al     ; place digit after string one 
  270.         inc     ebp                          ;
  271.         dec     edx                          ;
  272.         jnz @cnc                             ; loop for length of string two
  273.  
  274.         pop     esi                          ; restore esi
  275.         mov     byte ptr [esi - 1], cl       ; update new length
  276.         ret
  277. cncstr  endp
  278.  
  279. end    main
  280.