?? hprsndx.asm
字號:
.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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -