Ein Keygenerator erstellen fr Melody v1.4d
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Bentigt wird:

* Melody, welches ich beigefgt habe. Falls es aus welchen Grnden nicht dabei sein sollte,
  knnt Ihr es aber auch unter members.xoom.com/Breuers saugen.
* SoftIce ab v3.0 und wie man damit umgeht (die Tutor'S von Laxity 
  und GCG behandeln dieses Thema). Dort findet Ihr auch SoftIce, wenn Ihr das nicht haben solltet.
  Unter www.crackstore.com. 
* ein bissel Assemblerkenntnis (ein deutsches Assembler-Handbuch findet Ihr bei Laxity),
  und Programmierkenntnisse, wie man anschlieend den Keygen schreibt.
* Zeit, Papier und 'nen Stift



Okay, der Registrierungsalgorithmus von Melody ist so einfach (ideal fr newbies), da ich mich spontan entschied 
einen Tutor schreiben.
Fangen wir also an.

Melody starten und auf das Fragezeichen sowie "Bitte lassen Sie diese Kopie registrieren!" klicken.
Jetzt geben wir unseren Namen und unsere Dummy-Nummer ein.

Name: rubor
Reg#: 121212

SoftIce starten. Breakpoint auf hmemcpy setzen (bpx hmemcpy). Zurck zu Melody und auf "Ok".
Nun sind wir in SoftIce gelandet. Solang auf "F12" drcken (7x) bis wir in Melody sind, erkennbar durch 
"Melody!CODE+000xxxx und PROT32".
Unseren String bzw. Dummy-Nummer suchen mit s 0 l ffffff "121212".
Bei mir erscheint "Pattern found at 017F:00BE190C".
Ok, nun dort auch einen Breakpoint setzen mit "bpm be190c".
Anschlieend folgt ein langer Marsch durch viele unzhlige Befehle 
(wem das zu lstig ist dann gibt Ihr folgendes ein:
"bc *" und anschlieend "g 446e05")
bis wir hier landen:

:00446E05 BA01000000              mov edx, 00000001

:00446E0A 8B4DF8                  mov ecx, dword ptr [ebp-08]       <-------- der User-Name wird in ECX kopiert
:00446E0D 0FB64C11FF              movzx ecx, byte ptr [ecx+edx-01]  <-------- liest jeweils ein Zeichen aus unserem Namen aus, abhngig von EDX ([ecx+edx-01]=EDX)
:00446E12 03F1                    add esi, ecx			    <-------- esi:=esi+ecx 
:00446E14 42                      inc edx			    <-------- edx:=edx+1
:00446E15 48                      dec eax			    <-------- eax:=eax-1
:00446E16 75F2                    jne 00446E0A			    <-------- springt wenn eax<>0

:00446E18 8975EC                  mov dword ptr [ebp-14], esi               / wandelt esi (der errechnete Wert des Namens) in eine temporre  
:00446E1B DB45EC                  fild dword ptr [ebp-14]	    <------/- Real-Zahl, und bringt sie auf die Spitze des Stacks
:00446E1E E8A5BBFBFF              call 004029C8			    <-------- esi=eax
:00446E23 C1E008                  shl eax, 08		      ! ! ! <-------- schiebt eax 8x bitweise nach links und hier ist unsere RICHTIGE Serial# ( "? eax" in SoftIce)
:00446E26 8BF0                    mov esi, eax			    <-------- unsere RICHTIGE Serial# wird nach esi kopiert
:00446E28 3B75FC                  cmp esi, dword ptr [ebp-04]       <-------- Vergleich der eingegebenen Serial# und mit unserer RICHTIGEN Nummer
:00446E2B 0F85C9000000            jne 00446EFA			    <-------- wenn nicht gleich erscheint die Fehlermeldung


Das mal kurz verdauen.

Also, wenn man bei :004460D landet beginnt der Algorithmus fr unseren Keygenerator !

Die Register (die hier entscheident sind) sehen folgendermaen aus:

EAX=000000005 (Zeichenanzahl des Namens; rubor=5)  		EDX=00000001 (unser Counter (FOR-Schleife))
ECX=00BE190C (der eingegebene Name)				ESI=00000000  (Ordinalzahl jedes char-Wertes wird hier addiert)

1.Runde:
Bei Adresse:
:00446E12	ECX=00000072    
 schreib in SoftICE "? ecx" dann erhlst Du = 72h(ex) = "r"=  ASCII "114"
Bei Adresse:
:00446E14       ESI=00000072
Bei Adresse:  
:00446E15       EDX=00000002 
Bei Adresse:
:00446E16       EAX=00000004   EAX <>0 also springt zurck, da noch Zeichen zu verwerten sind

2. Runde:
Bei Adresse:
:00446E12	ECX=00000075    
 schreib in SoftICE "? ecx" dann erhlst Du = 75h(ex) = "u"=  ASCII "117"
Bei Adresse:
:00446E14       ESI=000000E7   "? esi" = ASCII"231"= 'r'+'u'= '114'+'117' 
Bei Adresse:  
:00446E15       EDX=00000003
Bei Adresse:
:00446E16       EAX=00000003   EAX <>0 also springt zurck, da noch Zeichen zu verwerten sind

und so weiter bis zur 
"5.ten Runde" bzw."6.ten Runde":

Bei Adresse:
:00446E12	ECX=00000072    
 schreib in SoftICE "? ecx" dann erhlst Du = 75h(ex) = "r"=  ASCII "114"
Bei Adresse:
:00446E14       ESI=000000E7   "? esi" = ASCII "554" = 'r'+'u'+'b'+'o'+'r'= '114'+'117'+'98'+'111'+'114' 
Bei Adresse:  
:00446E15       EDX=00000006
Bei Adresse:
:00446E16       EAX=00000000   EAX = 0 also kein Jump
Bei Adresse:
:00446E26       schreibt Ihr " ? eax" und Ihr habt Eure RICHTIGE Serial#, bei mir is es 141824.


Ich hoffe Ihr habt das verstanden.
bt das so oft wie mglich, denn mit Melody ist es einfach !

Und wie schreib ich jetzt denn Keygen ?
Also, eigentlich solltet Ihr das nun wissen, ich hab ja Euch soviele Tips gegeben, wenn nicht, verfgt
Ihr nicht ber die ntigen Programmierkentnisse :)

Damit Ihr aber sowas wie ein Erfolgserlebnis haben sollt ist hier der Quellcode in Turbo-Pascal fr Windows:



program melodyKEYGEN ;
uses wincrt;

var     i, serial, esi : longint ;
        regname : string ;
begin
     esi:=0 ;                                   {unser esi :)     		       			      	   }
     serial:=0 ;			     	{und serial initialisieren 					   }
     writeln ;
     writeln ('Melody 1.4de Keygenerator written by rubor[Syntax2oo1]') ;
     writeln ;
     write   ('Enter your Name : ') ;
     readln (regname) ;				{Einlesen des Namens  			                           }
     for i:=1 to length(regname) do		{Schleife durchlaufen bis zum letzten eingegebenen Zeichen	   }
     esi  := esi + ord(regname[i]) ;		{esi tut, das was ich oben erklrt hab, addieren :)		   }
     serial := esi shl 8;			{schiebt esi 8x bitweise nach links und wir haben anschlieend     }
     writeln ('Your RegKey is : ', serial) ;    {unsere richtige Serialnumber, hehe				   }
end.


So, ich hoffe Ihr habt was gelernt und wnsch Euch noch viel Spa, beim generieren.
Ach so, wer mir nett glaubt, kann in die Registry (win9x) bei HKEY_CURRENT_USER\Software\Akatoma\Melody gehen und
entweder Username oder Usercode lschen und immer wieder sich einen Neuen Schlssel generieren :)


PS: Es gibt eine englische Version von Melody 1.4, vielleicht ist es genauso 
einfach wie mit der deutschen Fassung, probiert es aus ! Ihr knnt mir kurz 
eine message schreiben, wenn 'S so ist :)

Kritik oder Anregungen bitte an:
rubor_quest@gmx.net 


Special greets:

Bismarck, WkMaster, $$$Michael$$$, Pasi, Biggy, Bonnie, NSC, all Syntax[2oo1] members
		AND
Laxity, 	GCG,	  UCT2000