; ======================================================================================
; = WinZip v7.0 Keygenerator - (C) 1999 Teraphy / Phrozen Crew - http://teraphy.cjb.net
; ======================================================================================

.486
.model		flat, stdcall

; -------- Include Files and Libraries -------------------------------------------------
include		windows.inc
include		elib32.inc
includelib	elib32.lib
include		kernel32.inc
includelib	kernel32.lib
include		user32.inc
includelib	user32.lib
; -------- UnInitialised Data ----------------------------------------------------------
.data?
szName		db 32 dup (?)
Save0		dd ?
Save1		dw ?
; -------- Program Code ----------------------------------------------------------------
.code
Start:

	; Print Message
        PrintM  "WinZip v7.0 *Keygen*",CrLf, \
                "(C) 1999 Teraphy",CrLf, \
                "Name  : "

        ; Read Name
        invoke  Input, addr szName, 30

        ; Check user input
        .IF eax == 0
                PrintM  "Error : Name too short"
		Exit	-1
        .ENDIF

        ; Calculate Serial#
	mov	esi,offset szName
	xor	edi,edi
	xor	ebx,ebx
LabelA:
	xor	eax,eax
	lodsb
	or	al,al
	jz	LabelB
	imul	eax,edi
	inc	edi
	add	ebx,eax
	jmp	LabelA
LabelB:
	mov	Save1, bx

	mov	Save0,0
	mov	esi,offset szName
LabelG:
	lodsb
	push	esi
	or	al,al
	jz	LabelC
	xor	ecx,ecx
	mov	cx,ax
	xchg	ch,cl
	mov	eax,Save0
	mov	edx,8
LabelF:
	mov	esi,ecx
	xor	esi,eax
	test	si,8000h
	je	LabelD
	add	eax,eax
	xor	eax,1021h
	jmp	LabelE
LabelD:
	shl	eax,1
LabelE:
	shl	ecx,1
	dec	edx
	jnz	LabelF
	mov	Save0,eax
	pop	esi
	jmp	LabelG
LabelC:
	pop	esi
	mov	eax,Save0
	add	eax,63h
	xor	ecx,ecx
	mov	cx,ax
	shl	ecx,16
	mov	cx,Save1

	; Print Serial
	PrintFM	<"Serial: %.8lX">, ecx

	; Exit
	Exit	0

end Start