Analyst's 1st keygenme, solution by _Nordic_/TMG
------------------------------------------------
Not much to say about this algo, the bytes of the
name letters are xor'ed with their position in the
username string, added together, multiplied with
128(dec), and the last letter (xor'ed) is multiplied
with 6, and added to the first number.

The original asm algo works like this:

0040110C:
        movsx eax, byte ptr [ebp+ecx-000000B8] 	; letters from the name to al
        inc ecx					; next letter
        xor eax, ecx				; xor the letter with its position
        add ebx, eax				; add the value to ebx
        cmp ecx, dword ptr [ebp-28]		; see if it's the last letter
        jne 0040110C				; no - jump to loop
        imul eax, 00000006			; multiply last letter with 6
        shl ebx, 07				; multiply ebx with 80h (128 dec)			
        add eax, ebx				; add the two
        mov dword ptr [ebp-38], eax
        push [ebp-38]

I slightly modified it in the keygen,
just used other registers & commands,
to this:

	lea	esi, nimi	; esi points to the beginning of use input
	mov 	ecx, nlen	; ecx = length of user input
_lp1:
	lodsb			; move byte to al
	inc	edx		; edx = a counter, 0 at the start of the loop
	xor	eax, edx	; xor with the counter
	add	ebx, eax	; add to ebx
	loop	_lp1		; get next byte (name letter)
	imul	eax, 06h	; multiply last letter with 6	
	shl	ebx, 07h	; multiply the sum with 80h (128 dec)
	add	eax, ebx	; add the two

then wsprintf writes out the serial
as a hex number - that's about it.

_Nordic_/TMG