 _______             __                _____                __
|   |   |---.-.-----.  |_.-----.----._|     |---.-.--.--.  |  |-----.
|       |  _  |__ --|   _|  -__|   _|       |  _  |_   _|   |_|__ --|
|__|_|__|___._|_____|____|_____|__| |_______|___._|__.__|     |_____|

erstes kleines Tutorial (GERMAN) ! 

Ŀ
 Zu crackende Soft : CD Wizzard 4.61.0084 (liegt bei) oder www.bfmsoft.com   
 Benoetigte Tools  : W32Dasm, Hex-Editor (z.B. Hiew)                         
 Zu loesende Probs : Serial-Abfrage, Nach Neustart net regged, 30 Day Trial  
 Anforderungen     : Anfaenger                                               
 Autor             : MasterJax                                               
 Viele Gruesse an  : Alle GWA-Member, alle die es gerne waeren und alle die  
                     ich nun doch noch vergessen habe (gibs da wen ?) ;o)    
 Danksagungen an   : Smakkker, pCsK8R, PrOf-HaWk, cygn und #cracking4newbies 


Also dann mal los ;)
Dieses Tutorial ist noch sehr ausfhrlich gehalten ! 
Da ich auch gerade erst das Cracken lerne, wei ich das sowas manchmal nicht 
schaden kann ;D
Ich setze allerdings voraus, das W32Dasm und ein Hex-Editor nichts unbekanntes sind !

Der Ablauf des Crackens wird in einzelnen Schritten erfolgen, naja wollen wir
mal sehen.

Schritt 1 : 
------------
Ihr startet das Programm CD Wizzard, dann klickt auf den Menuepunkt "Help"
und darin wiederum auf "About CD Wizzard" !
Drueckt unten rechts auf "Register" und gebt irgendwelche Daten ein.
So dannauf Register druecken, und *zack* eine Fehlermeldung, war ja klar !

              Invalid Password. Please verifiy and reenter.

Dann merkt Euch die hliche Meldung mal !

Schritt 2 :
------------
"Invalid Password. Please verify and reenter." is die schoene Fehlermeldung.
Startet WinDASM, ladet CDW und sucht unter den String References die 
Fehlermeldung heraus. So gefunden und Doppelklick drauf !
Da angekommen scrollt mal etwas hoch und runter, Ihr seht u.a. folgendes :

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041463F(C)
|

* Reference To: USER32.MessageBeep, Ord:0194h
                                  |
:004146A0 FF15F8124300            Call dword ptr [004312F8]
:004146A6 6A30                    push 00000030
:004146A8 57                      push edi

* Possible StringData Ref from Data Obj ->"Invalid Password. Please verify "
                                        ->"and reenter."
                                  |
:004146A9 683C7A4300              push 00437A3C

Man sieht die Fehlermeldung zu der er nicht jumpen soll ! (Merkt Euch das schonmal)
Man sieht auch (ganz oben), da sie durch einen jump von 0041463F ausgelst wurde !
Also gehen wir doch mal dahin von wo gejumped wurde also ab nach 0041463F ! 

Schritt 3 :
-----------
Da steht sowas hier :

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004145F5(C), :004145FA(C)      <--- von diesen Stellen wird hierhin gejumped !
|
:00414634 50                      push eax
:00414635 E8AF0D0000              call 004153E9
:0041463A 59                      pop ecx
:0041463B 85C0                    test eax, eax
:0041463D 6A30                    push 00000030
:0041463F 745F                    je 004146A0    <--- UNSER JUMP !

* Reference To: USER32.MessageBeep, Ord:0194h
                                  |
:00414641 FF15F8124300            Call dword ptr [004312F8]
:00414647 6A30                    push 00000030
:00414649 57                      push edi

* Possible StringData Ref from Data Obj ->"This password is for release 2.xx "
                                        ->"and 3.xx of CD Wizzard.  You will "
                                        ->"need to upgrade to release 4.xx."
                                  |
Nun haben wir diesen Jump, wenn er jumpt kommt die Fehlermeldung, jumpt er nicht, kommt
ne Meldung, da das Passwort nur fr ne alte Version is ("This password is for release...") ! Also bringt uns das ja gar nix, egal ob er jumped oder nicht wir sind gefickt, also sollte er diesen Jump, bei dem wir eh nur verlieren knnen gar nicht erst aufrufen, gell ?
Also guckt man etwas ber den Jump und sieht :

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004145F5(C), :004145FA(C)      <--- von diesen Stellen wird hierhin gejumped !

Ok, also mal der Ursache auf den Grund gehen und ab nach 004145F5 bzw. 004145FA !

Schritt 4 :
-----------
Dort angekommen, sehen wir 2 Jumps nach 00414634, also dahin wo er nicht hin soll !!!

:004145F5 743D                    je 00414634 <-- Jump Nr.1 den er auf keinen Fall nehmen darf
:004145F7 663BC3                  cmp ax, bx      wird geNOPed
:004145FA 7438                    je 00414634 <-- Jump Nr.2 den er auf keinen Fall nehmen darf
:004145FC 50                      push eax        wird geNOPed
:004145FD 56                      push esi

* Reference To: KERNEL32.lstrlenA, Ord:02A1h
                                  |
:004145FE FF15E0104300            Call dword ptr [004310E0]
:00414604 50                      push eax
:00414605 56                      push esi
:00414606 E8AC0D0000              call 004153B7
:0041460B 83C40C                  add esp, 0000000C
:0041460E 85C0                    test eax, eax
:00414610 741C                    je 0041462E <-- mssen wir auch NOPen
:00414612 6A40                    push 00000040
:00414614 C705C0E0430001000000    mov dword ptr [0043E0C0], 00000001

* Reference To: USER32.MessageBeep, Ord:0194h
                                  |
:0041461E FF15F8124300            Call dword ptr [004312F8]
:00414624 6A40                    push 00000040
:00414626 57                      push edi

* Possible StringData Ref from Data Obj ->"Thank you for registering CD Wizzard. "  <-- Das is
                                        ->" The funds will help us produce "         doch was wir
                                        ->"more shareware!"                          wollen !

Ok nun kommt auch der Hex-Editor zum Einsatz !
Da die beiden Jumps nicht ausgefhrt werden sollen, werden sie einfach geNOPed !
Wir ersetzen also die 743D vom ersten Jump durch 9090 und die 7438 vom zweiten Jump auch 
durch 9090 ! Durch das 9090 steht da einfach nix mehr es ist eine leere "Zeile" und das Programm
luft da einfach so weiter !
Dann scrollen wir noch etwas runter um zu sehen, vor was er denn so eifrig weg hpfen will...
oh siehe da, etwas weiter unten steht ... "Thank you for registering...." ok, also schaue ich was mir auf dem Weg von den ersten beiden Jumps bis zu der erwnschten Meldung noch in die Quere kommen knnte ...
oh, da is noch ein jump der mir auf dem Weg zur "Thank you for reg.."-Meldung rger machen knnte und zwar bei 00414610; er wrde auch wieder zur unerwnschten Meldung fhren, da die Serial fr 
Version 2.xx oder so ist, also NOPen wir den auch noch !
Ersetzt also die 741C bei 00414610 durch 9090 !
Nun sind alle Jumps die Trouble machen knnten beseitigt, wir saven das Programm im Hex-Editor
mit unseren Modifikationen ab und starten "unsere" Version !

Schritt 5 :
-----------
Ok, das registrieren geht ... super ;)
Startet man das Programm jedoch neu ist nix mehr gespeichert vonwegen regged, alles wieder
schei Shareware !

Schritt 6 :
-----------
Also ist unser neuer Auftrag das Prog nun so zu patchen, das es auch regged bleibt !
Wenn man das Prog regged und dann aus diesem ganzen About-Men rausgeht und nochmal rein, sieht man unter Help/About  "This Software is regged to..." also nochmal in W32Dasm rein und unter den
String References nach dieser Meldung suchen, denn schlielich verschwindet dieser Satz ja nach dem Neustart wieder, mu also was sein an der Stelle !

Schriit 7 :
-----------
Ok, bei der Stelle angekommen scrollen wir mal etwas hoch und sehen doch tatschlich einen Jump, der ber unsere "This Software is registered to"-Meldung jumpen will !
Seht selbst :

:00413CED 7442                    je 00413D31 <-- Der NASTY Jump ! Der ginge wieder zu "This 
:00413CEF 6840CE4300              push 0043CE40         password is for Version 2.xx blabla" 
:00413CF4 8D45AC                  lea eax, dword ptr [ebp-54]
:00413CF7 6A50                    push 00000050
:00413CF9 50                      push eax

* Possible StringData Ref from Data Obj ->"Not Registered"
                                  |
:00413CFA 6824794300              push 00437924

* Possible StringData Ref from Data Obj ->"UserName"
                                  |
:00413CFF 6858584300              push 00435858

* Possible StringData Ref from Data Obj ->"CD Wizzard"
                                  |
:00413D04 68AC4D4300              push 00434DAC

* Reference To: KERNEL32.GetPrivateProfileStringA, Ord:0112h
                                  |
:00413D09 FF15A0104300            Call dword ptr [004310A0]
:00413D0F 8D45AC                  lea eax, dword ptr [ebp-54]
:00413D12 50                      push eax
:00413D13 8D854CFEFFFF            lea eax, dword ptr [ebp+FFFFFE4C]

* Possible StringData Ref from Data Obj ->"This software is registered to "
                                        ->"%s.  You may NOT let others use "
                                        ->"your password.  This software "
                                        ->"is NOT to be modified in any way."

Der Jump is 00413CED ! Ok also was machen, wenn er net jumpen soll ? richtig ausNOPen !
Und schon macht man per Hex-Editor aus der 7442 ein 9090 ! Ok saven und nochmal das Prog starten!

Schritt 8 :
-----------
Super ! Trotz Neustart bleiben unsere Register-Informationen nun immer gespeichert !

Schritt 9 :
-----------
Was wir nun noch zu berlisten haben, ist eine 30 Tage-Trial Protection !
Stellt doch mal Eure Windoof Uhr/Kalender-Kacke 2-3 Monate vor und startet das Prog !
Was sieht man ? Jo einen schei Nag ! "It has been over 30 days..." naja sowas wollen wir da aber nicht stehen haben, oder ?
Also in W32Dasm in die String References und das suchen ... gefunden und hin da !
Ok wir sehen also die Meldung und etwas weiter oben 2 Jumps :

:00401DE1 394DE8                  cmp dword ptr [ebp-18], ecx
:00401DE4 7F05                    jg 00401DEB  <-- Jump Nr.1 der fhrt zu 00401DEB
:00401DE6 3945E8                  cmp dword ptr [ebp-18], eax
:00401DE9 7D19                    jge 00401E04 <-- Jump Nr.2 fhrt zu 00401E04, also ber die 
                                                   Meldung hinweg, das is doch mal was gutes ;)
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401DE4(C)
|
:00401DEB 6A30                    push 00000030 <-- Hier fhrt Jump Nr.1 hin, da sind wir aber                                                       wieder vor der blden Meldung ! 
* Reference To: USER32.MessageBeep, Ord:0194h
                                  |
:00401DED FF15F8124300            Call dword ptr [004312F8]
:00401DF3 6A30                    push 00000030
:00401DF5 56                      push esi

* Possible StringData Ref from Data Obj ->"It has been over 30 days.  You "
                                        ->"need to register.  By not registering "
                                        ->"software you make it difficult "
                                        ->"for shareware authors to exist. "
                                        ->" Please register."

Schauen wir uns die Jumps genauer an !
Der erste Jump fhrt uns an eine Stelle die auch wieder vor der schei Meldung liegt(00401DEB), also darf er nicht ausgefhrt werden ... mit anderen worten NOPen ! (aus 7F05 wird 9090) 
So der zweite Jump mu aber ausgefhrt werden da er uns hilft ber die 30Tage Meldung zu springen 
Also machen wir es so, da er immer jumpen mu ! (aus 7D19 wird EB19) !
(EB heit immer springen egal, was Sache is !)

Schritt 10 :
------------
Das wars auch schon, das Programm ist gecrackt und alle sind glcklich... bis auf der Autor :o)

Meinen Beispiel-Crack habe ich auch beigelegt, einfach im CDW Dir ausfhren (crack.exe)

Wenn Euch dieses Tutorial zugesagt haben sollte, schickt mir eine E-Mail an MasterJax@gmx.net
bei genug Rckmeldungen, werde ich noch weitere Tutorials machen ;)
Wenn Ihr fragen habt, was ich durchaus nachvollziehen knnte, da ich ja auch erst das Cracken 
lerne, knnt Ihr mir selbstverstndlich "AUCH" E-Mails schicken, oder kontaktiert mich im
EFNET in #GWA ;)

cya all MasterJax




