home *** CD-ROM | disk | FTP | other *** search
- .model tiny
-
- .386
-
- org 100h
-
- .data
-
- GroupLogo db 13,10
- db ' ▄▄▄▄▄ ',13,10
- db ' █ ▄ █ ',13,10
- db ' █▀▀▀▀▀▀▀▀ ▄ ▀▀▀▀▀ ▀ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█ █▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ▀ ▀▀▀▀█ ',13,10
- db ' █ │░███████ │▓███████▀ │░███▀█▀▀▀▀▀▀▀ ▀ ▀▀▀▀ │░███▀█▀▀▀▀▀▓████▓▄ █ ',13,10
- db ' █ │▒███████ │▓███████ │▒███████ │▓███████▀ │▒███████ │▓███████ █ ',13,10
- db ' █ │▓███████ │▓███████ │▓███████ │▓███████ │▓███████ │▓███████ █ ',13,10
- db ' ▀ │▓███████ │▓███████ │▓███████ │▓███████ │▓███████ │▓███████ █▄▄▄ ',13,10
- db ' ▀ │▓███████ │▓███████ │▓███████ │▓███████ │▓███████ │▓███████▄ ▄ █ ',13,10
- db ' █ │▓███████ │▓███████ │▓███████ │▓███████ │▓███████ █ ',13,10
- db ' █ │▓███████▄▄▄▄▄█▄█▓▀ │▓███████▄▄▄▄▄█▄████ │▓███████▀▀ ▀ ▀ █ ',13,10
- db ' █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▀ █▀▀▀▀▀▀▀▀▀ ▀ ▀▀ ',13,10
- db ' .::[ u n i t e d · c r æ c k i n g · f o r c e ]::. █ ▀ █ Antibody<SAC> ',13,10
- db ' █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▀ █▀▀▀▀▀▀▀▀▀ ▀ ▀▀ ',13,10
- db ' -----=====----- ',13,10
- db ' [■] CSE HTML Validator v3.0x - Key Generator by Quantico [■] ',13,10
- db ' -----=====----- ',13,10
- db ' ',13,10,'$'
-
-
-
- IntroMsgOne db 13,10,'Enter a name please : ','$'
-
-
- ErrorMsg db 13,10,'Need 8-20 digits, try again...',13,10,'$'
-
- ShowCodeMsg db 13,10,'Registration number : '
-
- CodeBuffer db 30 dup(0),13,10,'$'
-
- NameBuffer db 18h, 100h dup(0)
-
- CopyName db 18h, 100h dup(0)
-
- Convert_Digs db '0123456789ABCDEF'
-
- namelength db 0
-
- temp1 db 14 dup(0)
-
- temp2 db 14 dup(0)
-
- .code
-
- .startup
-
- main proc near
- mov ah, 09h ;
- lea edx, GroupLogo ;
- int 21h ; show group logo
-
- mov ah, 09h ;
- lea edx, IntroMsgOne ;
- int 21h ; show intro and ask for input
-
- mov bx, 1408h ; limits for string input
- lea edi, NameBuffer ;
- call getstr ; read user input
- jc @error ;
- xor eax, eax ; clear eax
- call keygen ; create serial number
-
- mov ah, 09h ;
- lea dx, ShowCodeMsg ;
- int 21h ; print serial number
- jmp @exit ; finished, quit
- @error:
- mov ah, 09h
- lea dx, ErrorMsg
- int 21h
- @exit:
- mov al, 00h ;
- mov ah, 4Ch ;
- int 21h ; terminate program
- main endp
-
-
- keygen proc near
-
- mov cl, byte ptr [namelength]
- cmp cl, 0Fh
- jge size_ok
- mov esi, offset NameBuffer+2
- mov edi, offset CopyName
- rep movsb
- mov esi, offset NameBuffer+2
- movzx ecx, byte ptr [namelength]
- mov edi, offset CopyName
- mov edx, ecx
- call cncstr
- mov byte ptr [namelength], cl
- size_ok:
- xor edx, edx
- mov cl, byte ptr [namelength]
- mov byte ptr [temp2], cl
- xor ecx, ecx
- xor edi, edi
- mov esi, offset CodeBuffer
- jmp @00431413
- to_start:
- movsx ebx, byte ptr [NameBuffer+ecx+2]
- inc ecx
- movsx eax, byte ptr [NameBuffer+ecx+2]
- lea edx, dword ptr [eax+2*eax]
- add ebx, edx
- cmp byte ptr [NameBuffer+ecx+2], 00h
- je @004313CB
- inc ecx
- @004313CB:
- mov eax, ebx
- mov ebx, 1Dh
- cdq
- idiv ebx
- mov eax, edx
- add eax, 35h
- mov ebx, 0Ah
- cdq
- idiv ebx
- add dl, 30h
- mov byte ptr [esi+edi], dl
- inc edi
- mov al, byte ptr [temp1]
- cmp al, byte ptr [temp2]
- jge @00431413
- movzx edx, byte ptr [temp1]
- movsx ebx, byte ptr [NameBuffer+2+edx]
- inc byte ptr [temp1]
- movzx eax, byte ptr [temp2]
- movsx edx, byte ptr [NameBuffer+2+eax]
- add ebx, edx
- xor edx, edx
- dec byte ptr [temp2]
- mov eax, ebx
- mov ebx, 0Ah
- cdq
- idiv ebx
- add dl, 30h
- mov byte ptr [esi+edi], dl
- inc edi
- @00431413:
- cmp byte ptr [NameBuffer+2+ecx], 00
- jne to_start
-
- mov byte ptr [esi+edi], 00
-
-
- jmp big_code_done
-
- not_short_enough:
- call make_shorter
-
- big_code_done:
- int 3
-
- mov al, 00h
- call strlngth
- dec ecx
- cmp ecx, 08
- ja not_short_enough
-
-
-
- ret
- keygen endp
-
-
-
- ; get string from user
- ; input :
- ; edi = pointer to buffer
- ; bl = min length
- ; bh = max length
- ; output :
- ; CF error, cx number of bytes read
- getstr proc near
- push dx ; save dx
- mov dx, di ;
- mov ah, 0Ah ;
- int 021h ; get user input
-
- movsx ecx, byte ptr [edi + 1] ; get number of digits
-
- mov byte ptr [edi + ecx + 2], 00h
-
- cmp cl, bh ; check maximum
- jg @@0
- cmp cl, bl ; check minimum
- jl @@0
- mov [namelength], cl ; store length
- xor ch, ch
- clc ; clear CF
- jmp @@1
- @@0:
- stc ; set CF (carry flag)
- @@1:
- pop dx ; restore dx
- ret
- getstr endp
-
-
-
- ; returns ECX= length of String in DS:ESI - terminated by CHAR in AL
- ; registers changed: ECX
- ; Assumes ES=DS
-
- strlngth PROC
- pushf
- push edi
- push esi
- push edx
-
- mov edi,esi
- xor ecx,ecx
- dec ecx
- cld
- repnz scasb
- xor edx,edx
- sub edx,ecx
- dec edx
- mov ecx,edx
-
- pop edx
- pop esi
- pop edi
-
- popf
- Ret
-
- strlngth endp
-
- make_shorter PROC
-
- mov ebx, esi
- mov eax, ecx
- mov byte ptr [namelength], cl
- mov al, byte ptr [ebx+ecx-1]
- movzx edx, byte ptr [ebx]
- add edx, edx
- add eax, edx
- mov esi, 0Ah
- cdq
- idiv esi
- add dl, 30h
- push edx
- mov eax, ecx
- xor ecx, ecx
- mov cl, 05h
- cdq
- idiv ecx
- mov cl, byte ptr [namelength]
- pop eax
- mov byte ptr [ebx+edx], al
- mov byte ptr [ebx+ecx-1],00
- mov esi, ebx
-
- Ret
-
- make_shorter endp
-
-
- ; concatenate 2 strings
- ; input :
- ; esi = string one, ecx = length string one
- ; edi = string two, edx = length string two
- ; output :
- ; esi = string one + string two, edx = new length
- cncstr proc near
- xor eax, eax ;
- xor ebp, ebp ; clear register
-
- push esi ; save esi
-
- add esi, ecx ; set esi at end of string one
- add ecx, edx ; adjust new length
- @cnc:
- mov al, byte ptr [edi + ebp] ; get digit of string two
- mov byte ptr [esi + ebp], al ; place digit after string one
- inc ebp ;
- dec edx ;
- jnz @cnc ; loop for length of string two
-
- pop esi ; restore esi
- mov byte ptr [esi - 1], cl ; update new length
- ret
- cncstr endp
-
- end main