                                                                                              09.05.99

                                   WiLKOMMEN ZU

                            jak's Cracking Tutorial #1

 Hi!
 Also, heute schreibe ich mal ein Tut :-]
 Ich werde euch zeigen, wie man mit SoftIce (rulez!) Serials aus Shareware-Proggies
 ziehen kann!
 Warum?
 Was sind die Vorteile von Serials gegenber Cracks?
 
 - Serials gehen meitens auch fr sptere Versionen
 - Serials kann man nicht klauen
 - Serials hacken ist eine grere Herrausforderung als "normales" cracken

 Na denn wolln wir mal :-]

 STOP! Achtung, ich empfehle dir, dass du Ed!son's Tutorial liet, bevor du dir
 meins reinziehst! (Wenn du dich schon ein bisschen mit SoftIce / ASM auskennst,
 dann kannst du auch weiterlesen.

 Aufbau
 ~~~~~~
 1. URLs, Toolz
 2. Was cracken wir/was crackst du ? 
 3. Cracken <lechz>
 4. Abschliessende Worte


 1. Also SoftIce, Ed!son's Cracking Tut und andere Cracking Files findest du
 natrlich auf meiner Homepage
 http://come.to/crackingHQ

 2. Tja, was cracken wir....
 Nehmen wir mal HexDecCharEdit 1.02  - das gibbet bei www.beyersdorf.com
 Warum? Ist ganz nett, und leicht zu cracken!

 3. So, SoftIce geladen, HCDEdit 1.02 geladen?
 Nein? Na gut, wenn SoftIce geladen ist gehts weiter:
 Starten wir mal HDCEdit 1.02
 Aha, da ist ein Nag-Screen (Nag = nrgeln) der uns sagt,
 dass HDCEdit Shareware ist, und man es doch bitte registrieren muss!
 Das wollen wir doch gleich mal machen, oder?
 Also klicken wir auf "Schlssel eingeben"
 Hmm, ja, achso... Wir haben ja gar keinen, und einen zu Bestellen kostet
 17$ (ungefhr 29 DM). Also wir haben jetzt 3 Mglichkeiten

 A - Dieses Prog benutzen (Shareware)
 B - Nen Key bestellen
 C - Nen Key HACKEN/ICEN/SNATCHEN - was auch immer

 So, wenn du Lsung A oder B in Erwgung ziehst, darfst du auf ALT+F4 gleichzeitig
 drcken <g>
 Hmm, das Fenster ist ja immer noch da... WAS WILLST DU ETWA LSUNG C BENUTZEN?
 Gut, dann los!

 Also wir haben jetzt den Registrier Dialog, da sind 2 Text Felder.. gut!
 Im 1. Text Feld steht unser Name.. nee noch gar nix! Geben wir mal ein:
 cracked
 Und als serial:
 1122334455
 OK! Wenn wir auf OK klicken wrden, wrde (Konjunktiv rulez <g>) sicherlich
 eine Message Box aufpoppen (Bhh, Buh, Falsche Serial etc.)
 Deswegen lassen wir das erstmal bleiben. Nun setzten wir in SoftIce ein Breakpoint
 auf die Funktion "hmemcpy" (High Memory Copy)
 Diese Funktion Kopiert etwas (in diesem Falle den Inhalt der Text Boxen) in den 
 Speicher. Na und das ist (fast) immer der Ideale Breakpoint (meiner Meinung nach)!
 Also Breakpoint setzen (in SoftIce): BPX HMEMCPY und ENTER drcken!
 So jetzt haben wir den Breakpoint gesetzt, jetzt drcken wir F5 um aus SoftIce wieder
 rauszukommen. Wir klicken jetzt auf "OK" im HDCEdit Registrier Dialog....
 **BOOM** Pltzlich sind wir in SoftIce, die HMEMCPY Funktion wurde aufgerufen,
 genau: von HDCEdit und zwar mit der Absicht die 1. Text Box auszulesen!
 Achtung: Nun drcken wir F5! H? Warum? Wir wollen doch nicht aus SoftIce raus?
 Doch, weil eben gerade nur die 1. Text Box ausgelesen wurde! Wenn wir nun F5 drcken
 wird SoftIce gleich wieder erscheinen, weil wieder HMEMCPY aufgerufen wurde, diesmal
 UM DIE 2. TEXT BOX auszulesen! Genau! Das ist die, wo unsere Serial eingegeben wurde!
 Genau das wollen wir ja! Irgentwo da muss die Serial ja mit der ECHTEN verglichen werden!
 Also F5 drcken, und wir sind wieder in SoftIce!
 
 Nun sind wir aber in SoftIce noch im 16-Bit Bereich! Das erkennen wir daran, dass
 die Addressen (links im Bild) etwa so aussehen:
 012F:9E71
 Eine 32-Bit Addresse sieht so aus:
 0157:01765858
 Da wir nun im 16-Bit Bereich sind, drcken wir solange auf F12 bis wir in den
 32-Bit Bereich kommen!
 Jetzt steht da sowas wie:
 
 --hier stehen wir nun--
 MOV EAX, EAX
 MOV ECX, EDX
 RET

 Wenn wir nun mit F10 durch den Code tracen, arbeiten wir soviele RET's (Return's)
 ab, bis wir im HDCEdit Code sind! Das sieht man daran das der Name der Anwendung
 in der unteren SoftIce-Fenster-Hlfte steht!
 So jetzt sind wir auch an der richtigen Stelle!

 :00435846 8B4DF8                  mov ecx, dword ptr [ebp-08]       <- ecx bekommt ein Wert
 :00435849 8B93E0010000            mov edx, dword ptr [ebx+000001E0] <- edx auch
 :0043584F 8B83DC010000            mov eax, dword ptr [ebx+000001DC] <- eax auch
 :00435855 E8EEC2FFFF              call 00431B48                     <- interessanter Call
 :0043585A 84C0                    test al, al                       <- Rckgabewert des Calls testen
 :0043585C 7432                    je 00435890                       <- Wenn er 0 ist dann Springen

 Wenn so ein Rckgabewert eines Calls 0 ist kann das zum Beispiel heissen,
 dass etwas bereinstimmt (z.B. Serial ?). Hmm tracen wir mit F10 weiter,
 bis wir auf dem Call stehen! Nun gehen wir in den Call rein (F8), denn das
 knnte eine Serial-berprfung sein :-]
 Jetzt sind wir im Call drin :-] Wir wissen ja, das 2 Werte immer mit einem CMP Wert1, Wert2
 verglichen werden (z.B. CMP EAX, EDX) Also suchen wir mal ein CMP in diesem Call.
 Das finden wir auch irgentwo unten:
 
 :00431BD2 8BF0                    mov esi, eax                 <- esi = eax
 :00431BD4 8B4508                  mov eax, dword ptr [ebp+08]  <- eax bekommt nen neuen Wert (unser Name)
 :00431BD7 E8EC3EFDFF              call 00405AC8                <- intressant
 :00431BDC 3BF0                    cmp esi, eax                 <- DA! EIN CMP
 :00431BDE 0F8533010000            jne 00431D17                 <- Aha wenn die Werte nicht bereinstimmen
                                                                   zu 00431D17 springen
 :00431BE4 8B45F8                  mov eax, dword ptr [ebp-08]  <- eax bekommt nen Wert (unser Name)
 :00431BE7 E8A819FDFF              call 00403594                <- auch intressant
 :00431BEC 83F80A                  cmp eax, 0000000A            <- eax = 10 ?
 :00431BEF 0F8C22010000            jl 00431D17                  <- wenn eax < 10 dann zu 00431D17 springen

 Sehr intressant :-] Drcken wir doch mal solange F10, bis wir auf dem CMP sind....
 Jetzt checken wir mal die zuvergleichenden Werte: 
 ? EAX   - unsere Serial steht da pltzlich <g>
 ? ESI   - Eine Andere Zahl (die RICHTIGE Serial)

 AUFSCHREIBEN! Jetzt sehen wir, dass das Prog zu 00431D17 jumpt, wenn die eingegebene Serial
 nicht mit der korrekten bereinstimmt. Darunter sehen wir nochmal einen Jump zu dieser Addresse.
 Davor steht:

 :00431BEC 83F80A                  cmp eax, 0000000A   <- vergleiche eax mit 0000000A (Hex-Wert fr 10)
 :00431BEF 0F8C22010000            jl 00431D17         <- wenn eax kleiner als 10 ist, zu 00431D17 jumpen

 OK ich sags euch: Der Call vor diesem CMP berechnet die Lnge von dem eingegebenem Name
 (in unserem Fall: "cracked") Da "cracked" nur eine Lnge von 7 hat, wrde er selbst bei richtiger Serial
 zur Fehler MessageBox springen ("Falsche Serial")
 Also mssen wir leider F5 drcken, um wieder aus SoftIce rauszukommen, klicken die Fehler MessageBox weg,
 tippen einen Namen der MINDESTENS 10 Zeichen lang ist ein, und wiederholen alles (aber, nun wissen wir ja
 wo der CMP ist, also ist es ja leicht). Wenn du alles wie vorher beschrieben gemacht hast, halte wieder
 beim CMP an, und notiere dir den Wert fr ESI (? ESI)! Jetzt noch schnell alle Breakpoints lschen (BC *),
 SoftIce beenden (F5), die Fehler MessageBox wegklicken, und fr den Namen die aufgeschriebene Serial
 eintippen! Auf OK klicken... *BOOM* "Vielen Dank fr ihre Registrierung...."
 WIR HABEN ES GESCHAFFT

 NOTE: Mit dem "CMP EAX, 0000000A" Problem wollte ich nur einmal zeigen, dass nicht alles beim Cracken
 immer so einfach geht wie in manchen Tutorials beschrieben!

 4. Ich hoffe ich konnte mit diesem Tut einigen das Cracken beibringen/besser beibringen und ich freue
 mich auf jede eMail, ob negativ oder positiv :-]
 Mailt einfach an: da_jak@gmx.net
 Und besucht meine Homepage: http://come.to/crackingHQ

 Cya,
 jak [TbC]


 TuBeRCuLoSiS Cracking Group: http://TbC.tsx.org
 jak's cracking HQ:           http://come.to/crackingHQ  