So,

hier noch nen Keygen Tutorial meinerseits.
Ich werde in diesem Tutor nicht alles haarklein erklaeren...es waere
besser, wenn ihr schon ein wenig ahnung von der materie habt.

Starte MisterPix und geh zur Registrierung.
Ich hab als name 'viny [GWA]' eingeben und als PrivateKey '12121'.
So, BPX auf HMEMCPY setzen.
Jetzt nen paar mal F12 druecken bis unten das hier stehen sollte :
MRPIX!CODE+00112F55
So sollte der asm-code aussehen :

:00513F55 E80614F2FF          call 00435360
:00513F5A 8B45FC              mov eax, dword ptr [ebp-04]
:00513F5D 33D2                xor edx, edx
:00513F5F E8D44CEFFF          call 00408C38
:00513F64 8B15247F5300        mov edx, dword ptr [00537F24]
:00513F6A 8902                mov dword ptr [edx], eax
:00513F6C 8D85FCFEFFFF        lea eax, dword ptr [ebp+FFFFFEFC]
:00513F72 8B15387D5300        mov edx, dword ptr [00537D38]
:00513F78 8B12                mov edx, dword ptr [edx]
:00513F7A B9FF000000          mov ecx, 000000FF
:00513F7F E814FFEEFF          call 00403E98
:00513F84 8D85FCFEFFFF        lea eax, dword ptr [ebp+FFFFFEFC]
:00513F8A 8B15247F5300        mov edx, dword ptr [00537F24]
:00513F90 668B12              mov dx, word ptr [edx]
:00513F93 E8B064FFFF          call 0050A448     <- mal naeher angucken
:00513F98 84C0                test al, al
:00513F9A 7446                je 00513FE2       <- hmm..was is das wohl ;)

Jetzt steht da unten was von nem JE und darueber is nen call.
Das sieht doch sehr interresant aus.
Also mal in den call 0050A448 reingehen.
Jetzt nochmal kurz tracen und wir kommen hierhin :

:0050A45E 880F                mov byte ptr [edi], cl
:0050A460 46                  inc esi
:0050A461 47                  inc edi
:0050A462 F3                  repz
:0050A463 A4                  movsb
:0050A464 8BDA                mov ebx, edx
:0050A466 E8D1FFFFFF          call 0050A43C
:0050A46B 8BD0                mov edx, eax      <- PublicKey in EDX
:0050A46D 8BC4                mov eax, esp      <- der Name in EAX
:0050A46F E810000000          call 0050A484
:0050A474 663BD8              cmp bx, ax        <- stimmt der code ?

Also in den zeilen :0050A46B und :0050A46D wird unser name und der pubkey
in die jeweiligen register geschrieben. Also mal in den folgenden call
reingehen. Wieder nen bissle tracen und das sehen wir :

:0050A4A0 8BDA                mov ebx, edx      <- PublicKey in EDX
:0050A4A2 8BC4                mov eax, esp      <- der Name in EAX
:0050A4A4 E813FFFFFF          call 0050A3BC     <- code calculation
:0050A4A9 6681F382DE          xor bx, DE82      <- mit 56962 XORen
:0050A4AE 6633C3              xor ax, bx        <- bx mit ax xor

Also in den call reingehen. Wieder nen bissle tracen.

:0050A406 0FB7C6       movzx eax, si          <- eax:=si (si=esi)
:0050A409 40           inc eax                <- eax:=eax+1
:0050A40A 33D2         xor edx, edx
:0050A40C 8A11         mov dl, byte ptr [ecx] <- naechster buchstabe
:0050A40E F7EA         imul edx               <- eax:=eax * edx (dl=edx)
:0050A410 F7EF         imul edi               <- eax:=eax * edi
:0050A412 BEFFFF0000   mov esi, 0000FFFF      <- esi:=65535
:0050A417 33D2         xor edx, edx
:0050A419 F7F6         div esi                <- eax:= eax div esi (edx:=eax mod esi)
:0050A41B 8BF2         mov esi, edx           <- esi:=edx
:0050A41D 47           inc edi                <- edi:=edi+1
:0050A41E 41           inc ecx                <- ecx:=ecx+1
:0050A41F 4B           dec ebx                <- ebx:=ebx-1
:0050A420 75E4         jne 0050A406           <- wenn ebx<> 0 dann hoch

Nun kann es nicht mehr schwer sein, das hier zusammenzusetzen und nen keygen
zu schreiben. Aber wenn wir nochmal in ECX gucken, dann steht da ja nur noch
vinygwa und nicht viny [GWA].
Was schliessen wir daraus ? Also erstmal alles zu kleinbuchstaben machen und dann alle
sonderzeichen raus. Das muessen wir also noch im keygen dazufuegen.

Wers net alleine packt hier der code in vb
----------------------------------------------------------------
name1 = LCase(txtF1.Text)
For i = 1 To Len(name1)
  zeichen = Asc(Mid(name1, i, 1))
  If (zeichen) > 96 And (zeichen) < 123 Then
    name2 = name2 + (Mid(name1, i, 1))
  End If
Next i

eax = 1
For edi = 1 To Len(name2)
  dl = Asc(Mid(name2, edi, 1))
  eax = eax + 1
  eax = (eax * dl) * edi
  eax = eax Mod 65535
Next edi

bx = val(txtF2.Text)    'hier wird der pubkey eingelesen
bx = bx Xor 56962
ax = eax Xor bx
----------------------------------------------------------------

Das wars auch schon wieder.
Greets gehen diesmal an : prof.x,BerSerkA,{Gizmo} und alle in GWA,CUG

viny