home *** CD-ROM | disk | FTP | other *** search
-
-
- .model small
-
- .stack 100h
-
- .data
-
-
-
- ;******************************************************************************
-
- ; variables for code gen
-
- ;
-
- ;******************************************************************************
-
-
-
-
-
-
-
- header DB ' Hypersnap-DX 3.02 license generator by +SNiKkEL',0ah,0dh,0ah,0dh,'$'
-
- info DB 0ah,0dh,' for some reason they decided to insert a ',027h,'-',027h,' into the code',0ah,0dh
-
- DB ' invalid names are:',0ah,0dh
-
- DB ' xygorf, Saltine, super user, tHATDUDE, ED!SON and hacker... sigh',0ah,0dh
-
- db 0ah,0dh,'enter any name:',0ah,0dh,' $'
-
- notright db 0ah,0dh,' your name must contain at least one letter',0ah,0dh,'$'
-
- should_be DB 'WORDXCJOSEFMENGELEJOSE',0 ;this is the regcode before 'encryption'
-
- ;WOR = world license (SIT = site license) DXC = some check
-
- ;the rest is the name; snikkel will be SNIKKELSNIKKELSN
-
- ;the alphabet will be A t/m F + L t/m o + U t/m Z (over 16 chars)
-
- ;according to this principle: divide total letters in name by 2
-
- ;sub 2 from answer and get 4 chars from beginning of name+answer
-
- ;put those 4 after first 6 chars, then put the last 6 letters in the
-
- ;name at the end (spaces, numbers etc are ignored, all letters must be capitalized)
-
- fifthchar db 0ah,0dh,0ah,0dh,'what would you like to be the 5th letter in your code?',0ah,0dh
-
- db ' enter anything from a to z',0ah,0dh,' $'
-
- wrong db 'anything from a to z, isn',027h,'t that enuff?',0ah,0dh,' $'
-
- wagain db 'why don',027h,'t you just fuck off',0ah,0dh,'$'
-
- whatkind db 0ah,0dh,'would you like a site or a worldwide license? (s or w)',0ah,0dh,' $'
-
- personals db 0ah,0dh,0ah,0dh,' your personal unlimited site license code is:',0ah,0dh,0ah,0dh,' $'
-
- personalw db 0ah,0dh,0ah,0dh,' your personal unlimited world-wide license code is:',0ah,0dh,0ah,0dh,' $'
-
- to_enter DB 'S2345678901234-6789012345',0ah,0dh,0ah,0dh,'$' ;the code will be put here
-
- ;the S is the fifth char on which the 1st letter depends
-
- encodestr DB 'XCFNAKSHIPZUJLDORGVQTEWYBM',0 ;according to this the letters will be 'encoded'
-
- checks Dw 0 ;checksum (last char) will be put here
-
- keyb db 033h,033h,034h dup (0) ;keyboard buffer, place for input
-
-
-
- ;******************************************************************************
-
- ; end of data, begin of code
-
- ;******************************************************************************
-
-
-
- .code
-
- start: JMP begin
-
-
-
- ;******************************************************************************
-
- ; calculate code proc
-
- ;******************************************************************************
-
-
-
- calculate PROC near
-
- mov ax,@data
-
- mov ds,ax
-
- mov es,ax
-
- xor bx,bx
-
- mov cx,00001h
-
- xor dx,dx
-
-
-
- go: mov si,offset should_be
-
- add si,bx
-
- MOV al,byte ptr [si] ;put byte of name you want in al
-
- cmp al,000h
-
- jz done
-
- mov si,offset to_enter
-
- cmp cx,00010h
-
- jnz dont_use_the_2D_for_calculating
-
- inc dx ;make it skip the '-' for calculating next
-
- inc dx
-
- dont_use_the_2D_for_calculating:
-
- add si,bx
-
- add si,dx
-
- mov ah,byte ptr [si] ;put byte in ah for substracting (adding)
-
-
-
- inc al
-
- cmp bx,00000h
-
- jz fifth
-
- jmp continue
-
-
-
- fifth: mov si,offset to_enter
-
- add si,00004h ;put the 1st char in should_be
-
- MOV [si],ah ;in the right place fer output
-
- sub dx,001h
-
-
-
- continue: sub ah,041h
-
- sub al,041h
-
- add al,ah
-
- cmp al,01ah
-
- jge rotate
-
- jmp continue2
-
-
-
- rotate: sub al,01ah
-
-
-
- continue2: mov si,offset encodestr
-
- mov ah,000h
-
- add si,ax
-
- MOV al,byte ptr [si]
-
- cmp cx,0000eh
-
- jnz dont_overwrite_the_2D_check
-
- inc cx
-
- dec dx ; make it read the char before the '-' for calculating
-
- dont_overwrite_the_2D_check:
-
- cmp cx,00005h
-
- jg fifth2
-
- jz incdx
-
- jmp continue3
-
-
-
- incdx: inc dx
-
-
-
- fifth2: mov si,offset to_enter
-
- add si,cx
-
- MOV byte ptr [si],al
-
- inc bx
-
- inc cx
-
- jmp go
-
-
-
- continue3: mov si,offset to_enter
-
- add si,bx
-
- MOV byte ptr [si],al
-
- inc bx
-
- inc cx
-
- jmp go
-
-
-
- done: RET ;return
-
-
-
- calculate ENDP
-
-
-
- ;******************************************************************************
-
- ; this part asks for name
-
- ;******************************************************************************
-
-
-
- input PROC near
-
- mov ax,@data
-
- mov ds,ax
-
- mov es,ax
-
-
-
- MOV ah,09h
-
- mov dx,offset info ;spam info
-
- int 21h
-
- mov dx,offset keyb
-
- mov ah,0ah
-
- int 21h ;and get user name
-
-
-
- MOV AH,09H
-
- MOV DX,offset fifthchar ;display fifth char message
-
- INT 21H
-
- xor cx,cx
-
-
-
- get5char: mov ax,0c07h ;clear keyb buffer & wait for input
-
- int 21h
-
- cmp al,061h ; 'a'
-
- jge letsee
-
- cmp al,041h ; 'A'
-
- jge letsee2
-
- jmp wrongg
-
-
-
- letsee: cmp al,07bh ;'z'
-
- jge wrongg
-
- sub al,020h
-
- jmp putitin
-
-
-
- letsee2: cmp al,05bh ;'Z'
-
- jge wrongg
-
-
-
- putitin: mov si,offset to_enter
-
- MOV byte ptr [si],al
-
-
-
- MOV AH,09H
-
- MOV DX,offset whatkind ;display question
-
- INT 21H
-
-
-
- getregmode: mov ax,0c07h ;clear keyb buffer & wait for input
-
- int 21h
-
- cmp al,073h ; 's'
-
- jz sitelic
-
- cmp al,041h ; 'S'
-
- jz sitelic
-
- cmp al,077h ;'w'
-
- jz worldlic
-
- cmp al,057h ;'W'
-
- jz worldlic
-
- jmp getregmode
-
-
-
- sitelic: mov si,offset should_be
-
- MOV byte ptr [si],'S'
-
- MOV byte ptr [si+1],'I'
-
- MOV byte ptr [si+2],'T'
-
- ret
-
-
-
- worldlic: mov si,offset should_be
-
- MOV byte ptr [si],'W'
-
- MOV byte ptr [si+1],'O'
-
- MOV byte ptr [si+2],'R'
-
- ret
-
-
-
- wrongg: cmp cx,001h
-
- jz wrongagain
-
- mov ah,09h
-
- mov dx,offset wrong
-
- int 21h
-
- inc cx
-
- jmp get5char
-
-
-
- wrongagain: mov ah,09h
-
- mov dx,offset wagain
-
- int 21h
-
- jmp exit
-
-
-
-
-
- ret
-
-
-
- input endp
-
-
-
- ;******************************************************************************
-
- ; calculate checksum
-
- ;******************************************************************************
-
-
-
- checksum PROC near
-
- mov ax,@data
-
- mov ds,ax
-
- mov es,ax
-
- xor cx,cx
-
- mov di,offset checks
-
-
-
- go2: mov si,offset should_be
-
- xor ax,ax
-
- cmp cx,016h
-
- jz cal_char
-
- add si,cx
-
- MOV al,byte ptr [si] ;put byte of calculated in al
-
- sub al,041h
-
- push ax
-
- push cx
-
- mov ax,cx
-
- mov cx,00002h
-
- div cx
-
- pop cx
-
- pop ax
-
- test dx,dx
-
- jz nodouble
-
- add ax,ax
-
-
-
- nodouble: cmp ax,0001ah
-
- jb allrighty
-
- sub ax,00019h
-
-
-
- allrighty: add [di],ax
-
- inc cx
-
- jmp go2
-
-
-
- cal_char: mov ax,[di]
-
- mov cx,01ah
-
- xor dx,dx
-
- div cx
-
- mov bx,dx
-
- inc bl
-
- mov si,offset to_enter+017h ;added one here, made it read the last char
-
- mov bh,byte ptr [si]
-
- sub bh,041h
-
- add bl,bh
-
- cmp bl,01ah
-
- jge rotate2
-
- jmp go_on
-
-
-
- rotate2: sub bl,01ah
-
-
-
- go_on: mov si,offset encodestr
-
- mov bh,000h
-
- add si,bx
-
- MOV bl,byte ptr [si]
-
- mov si,offset to_enter+018h ;added one here cause of the '-'
-
- mov byte ptr [si],bl
-
-
-
- RET
-
-
-
- checksum endp
-
-
-
- ;******************************************************************************
-
- ; check and shape up user input
-
- ;******************************************************************************
-
-
-
- read_input proc near
-
- mov ax,@data
-
- mov ds,ax
-
- mov es,ax
-
- xor dx,dx
-
- xor ax,ax
-
- xor cx,cx
-
- mov si,offset keyb
-
- mov al,byte ptr [si+1] ;get number of chars put in by user
-
- cmp al,000h
-
- jz step_no_input ;number is zero
-
- mov bx,ax
-
- add si,2 ;move si to beginning of input
-
-
-
- loopstart: cmp bx,000h
-
- jnz notalldone
-
- jmp reformat
-
-
-
- step_no_input: jmp no_input
-
-
-
- notalldone: mov al,byte ptr [si]
-
-
-
- cmp al,061h ; 'a' checking for letters or other chars
-
- jge letsee3
-
- cmp al,041h ; 'A'
-
- jge letsee4
-
- jmp nolet
-
-
-
- letsee3: cmp al,07bh ;'z'
-
- jge nolet
-
- sub al,020h ;capitalize
-
- jmp putitinmem
-
-
-
- letsee4: cmp al,05bh ;'Z'
-
- jge nolet
-
-
-
- putitinmem: mov di,si
-
- sub di,dx
-
- mov byte ptr [di],al
-
- dec bx
-
- inc si
-
- jmp loopstart
-
-
-
- nolet: inc dx
-
- dec bx
-
- inc si
-
- jmp loopstart
-
-
-
- reformat: xor bx,bx
-
- mov si,offset keyb
-
- mov bl,byte ptr [si+1] ;get number of chars put in by user
-
- sub bx,dx ;substract number of not-letters
-
- cmp bl,000h
-
- jz no_input
-
- cmp bl,010h
-
- jg strip ;if name is over 16, strip 6th to ...
-
-
-
- mov si,offset keyb ;if name is =< 16 chars, repeat till full
-
- add si,002h
-
- mov di,offset should_be
-
- add di,006h
-
- mov al,010h
-
- div bl ;full times to repeat is in al, remaining is in ah
-
- ;(bl= number of valid letters in code)
-
-
-
- loopje: mov si,offset keyb ;if name is =< 16 chars, repeat till full
-
- add si,002h
-
- mov cl,bl
-
- repz movsb ;put it in once
-
- dec al ;one done
-
- cmp al,000h ;check if needs repeating
-
- jz last_time ;no, go put in remaining
-
- jmp loopje ;yes, do it again
-
-
-
- last_time: mov si,offset keyb
-
- add si,002h
-
- mov cl,ah
-
- repz movsb ;put in the remaining chars
-
- ret
-
-
-
- strip: mov si,offset keyb
-
- add si,002h
-
- mov di,offset should_be
-
- add di,006h
-
- mov cl,006h
-
- repz movsb ;put 1st 6 in place
-
- xor ax,ax
-
- mov al,bl
-
- mov cl,002h
-
- div cl
-
- mov si,offset keyb
-
- xor cx,cx
-
- mov cl,al
-
- add si,cx ;put next 4 in place
-
- mov cl,004h
-
- repz movsb
-
- sub bl,004h ;six from end, the two non chars
-
- ;from beginning 'keyb' counted
-
- mov si,offset keyb
-
- add si,bx
-
- mov cl,006h
-
- repz movsb
-
- ret
-
-
-
- no_input: mov dx,offset notright
-
- mov ah,009h
-
- int 21h
-
- jmp exit
-
-
-
-
-
- read_input endp
-
- ;******************************************************************************
-
- ; spam the code
-
- ;******************************************************************************
-
-
-
- spam PROC near
-
- mov ax,@data
-
- mov ds,ax
-
- mov es,ax
-
- mov di,offset should_be
-
- mov al,byte ptr[di]
-
- cmp al,'S'
-
- MOV AH,09H
-
- jnz wormessage
-
- MOV DX,offset personals ;display personal message
-
- INT 21H
-
- jmp dispcode
-
-
-
- wormessage: MOV DX,offset personalw ;display personal message
-
- INT 21H
-
-
-
- dispcode: MOV AH,09H
-
- MOV DX,offset to_enter ;display right code
-
- INT 21H
-
- RET
-
-
-
- spam endp
-
-
-
-
-
- ;******************************************************************************
-
- ; the main program
-
- ;******************************************************************************
-
-
-
- begin PROC near
-
- mov ax,@data
-
- mov ds,ax
-
- mov es,ax
-
- MOV AH,09H
-
- MOV DX,offset header ;display header
-
- INT 21H
-
- CALL input ;get user input
-
- call read_input
-
-
-
- CALL calculate ;calculate code from input
-
- call checksum ;calculate last char
-
- CALL spam ;spam calculated code
-
-
-
- exit: MOV AX,4C00H ;and exit
-
- INT 21H
-
-
-
- begin ENDP
-
-
-
- END START
-
-