home *** CD-ROM | disk | FTP | other *** search
/ Reverse Code Engineering RCE CD +sandman 2000 / ReverseCodeEngineeringRceCdsandman2000.iso / RCE / Quantico / km / ucfhtm3x.asm.txt < prev    next >
Encoding:
Text File  |  2000-05-25  |  8.5 KB  |  295 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 '      [■]   CSE HTML Validator v3.0x - 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 8-20 digits, try again...',13,10,'$'
  34.  
  35. ShowCodeMsg     db 13,10,'Registration number    : '
  36.  
  37. CodeBuffer      db 30 dup(0),13,10,'$'
  38.  
  39. NameBuffer      db 18h, 100h dup(0)
  40.  
  41. CopyName        db 18h, 100h dup(0)
  42.  
  43. Convert_Digs     db '0123456789ABCDEF'
  44.  
  45. namelength      db 0
  46.  
  47. temp1           db 14 dup(0)
  48.  
  49. temp2           db 14 dup(0)
  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, 1408h                     ; 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.         mov     cl, byte ptr [namelength]
  89.         cmp     cl, 0Fh
  90.         jge     size_ok
  91.         mov     esi, offset NameBuffer+2
  92.         mov     edi, offset CopyName
  93.         rep     movsb
  94.         mov     esi, offset NameBuffer+2
  95.         movzx   ecx, byte ptr [namelength]
  96.         mov     edi, offset CopyName
  97.         mov     edx, ecx
  98.         call    cncstr
  99.         mov     byte ptr [namelength], cl
  100. size_ok:
  101.         xor     edx, edx
  102.         mov     cl, byte ptr [namelength]
  103.         mov     byte ptr [temp2], cl
  104.         xor     ecx, ecx
  105.         xor     edi, edi
  106.         mov     esi, offset CodeBuffer
  107.         jmp     @00431413
  108. to_start:
  109.         movsx   ebx, byte ptr [NameBuffer+ecx+2]
  110.         inc     ecx
  111.         movsx   eax, byte ptr [NameBuffer+ecx+2]
  112.         lea     edx, dword ptr [eax+2*eax]
  113.         add     ebx, edx
  114.         cmp     byte ptr [NameBuffer+ecx+2], 00h
  115.         je      @004313CB
  116.         inc     ecx
  117. @004313CB:
  118.         mov     eax, ebx
  119.         mov     ebx, 1Dh
  120.         cdq
  121.         idiv    ebx
  122.         mov     eax, edx
  123.         add     eax, 35h
  124.         mov     ebx, 0Ah
  125.         cdq
  126.         idiv    ebx
  127.         add     dl, 30h
  128.         mov     byte ptr [esi+edi], dl
  129.         inc     edi
  130.         mov     al, byte ptr [temp1]
  131.         cmp     al, byte ptr [temp2]
  132.         jge     @00431413
  133.         movzx   edx, byte ptr [temp1]
  134.         movsx   ebx, byte ptr [NameBuffer+2+edx]
  135.         inc     byte ptr [temp1]
  136.         movzx   eax, byte ptr [temp2]
  137.         movsx   edx, byte ptr [NameBuffer+2+eax]
  138.         add     ebx, edx
  139.         xor     edx, edx
  140.         dec     byte ptr [temp2]
  141.         mov     eax, ebx
  142.         mov     ebx, 0Ah
  143.         cdq
  144.         idiv    ebx
  145.         add     dl, 30h
  146.         mov     byte ptr [esi+edi], dl
  147.         inc     edi
  148. @00431413:
  149.         cmp     byte ptr [NameBuffer+2+ecx], 00
  150.         jne     to_start
  151.  
  152.         mov     byte ptr [esi+edi], 00
  153.  
  154.  
  155.         jmp     big_code_done
  156.  
  157. not_short_enough:
  158.         call    make_shorter
  159.  
  160. big_code_done:
  161.         int     3
  162.  
  163.         mov     al, 00h
  164.         call    strlngth
  165.         dec     ecx
  166.         cmp     ecx, 08
  167.         ja      not_short_enough
  168.  
  169.  
  170.  
  171.     ret
  172. keygen    endp
  173.  
  174.  
  175.  
  176. ; get string from user
  177. ; input :
  178. ;       edi = pointer to buffer
  179. ;       bl  = min length
  180. ;       bh  = max length
  181. ; output :
  182. ;    CF error, cx number of bytes read
  183. getstr  proc    near
  184.         push    dx                            ; save dx
  185.         mov     dx, di                        ;
  186.         mov     ah, 0Ah                       ;
  187.         int     021h                          ; get user input
  188.  
  189.         movsx   ecx, byte ptr [edi + 1]       ; get number of digits
  190.  
  191.         mov     byte ptr [edi + ecx + 2], 00h
  192.  
  193.         cmp     cl, bh                        ; check maximum
  194.         jg      @@0
  195.         cmp     cl, bl                        ; check minimum
  196.         jl      @@0
  197.         mov     [namelength], cl              ; store length
  198.     xor    ch, ch
  199.         clc                                   ; clear CF
  200.         jmp     @@1
  201. @@0:
  202.         stc                                   ; set CF (carry flag)        
  203. @@1:
  204.         pop     dx                            ; restore dx
  205.     ret
  206. getstr  endp
  207.  
  208.  
  209.  
  210. ; returns ECX= length of String in DS:ESI - terminated by CHAR in AL
  211. ; registers changed: ECX
  212. ; Assumes ES=DS
  213.  
  214. strlngth  PROC
  215.     pushf
  216.     push edi
  217.     push esi
  218.     push edx
  219.  
  220.     mov edi,esi
  221.     xor ecx,ecx
  222.     dec ecx
  223.     cld
  224.     repnz scasb
  225.     xor edx,edx
  226.     sub edx,ecx
  227.     dec edx
  228.     mov ecx,edx
  229.  
  230.     pop edx
  231.     pop esi
  232.     pop edi
  233.  
  234.     popf
  235.     Ret
  236.  
  237. strlngth endp
  238.  
  239. make_shorter  PROC
  240.  
  241.         mov    ebx, esi
  242.         mov    eax, ecx
  243.         mov    byte ptr [namelength], cl
  244.         mov    al, byte ptr [ebx+ecx-1]
  245.         movzx  edx, byte ptr [ebx]
  246.         add    edx, edx
  247.         add    eax, edx
  248.         mov    esi, 0Ah
  249.         cdq
  250.         idiv   esi
  251.         add    dl, 30h
  252.         push   edx
  253.         mov    eax, ecx
  254.         xor    ecx, ecx
  255.         mov    cl, 05h
  256.         cdq
  257.         idiv   ecx
  258.         mov    cl, byte ptr [namelength]
  259.         pop    eax
  260.         mov    byte ptr [ebx+edx], al
  261.         mov    byte ptr [ebx+ecx-1],00 
  262.         mov    esi, ebx
  263.  
  264.     Ret
  265.  
  266. make_shorter endp
  267.  
  268.  
  269. ; concatenate 2 strings
  270. ; input :
  271. ;       esi = string one, ecx = length string one
  272. ;       edi = string two, edx = length string two
  273. ; output :
  274. ;       esi = string one + string two, edx = new length
  275. cncstr  proc    near
  276.         xor     eax, eax                     ;
  277.         xor     ebp, ebp                     ; clear register
  278.  
  279.         push    esi                          ; save esi
  280.  
  281.         add     esi, ecx                     ; set esi at end of string one
  282.         add     ecx, edx                     ; adjust new length
  283. @cnc:
  284.         mov     al, byte ptr [edi + ebp]     ; get digit of string two
  285.         mov     byte ptr [esi + ebp], al     ; place digit after string one 
  286.         inc     ebp                          ;
  287.         dec     edx                          ;
  288.         jnz @cnc                             ; loop for length of string two
  289.  
  290.         pop     esi                          ; restore esi
  291.         mov     byte ptr [esi - 1], cl       ; update new length
  292.         ret
  293. cncstr  endp
  294.  
  295. end    main