     
# Am besten auf Fullscreen
# mit Zeilenumbruch!                       fRACTUs`99 proudly presents:
                                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
                                               cI[ERos Tutorial IV
                                               

I)   Vorwort + Einleitung

II)  Was wir brauchen

III) Was wir machen werden

IV)  Zeit zu cracken!



I) Vorwort:

Herzlich willkommen zu meinen inziwischen vierten Cracking-Tutorial. Meine Name ist cI[ERo und ich bin pREzIdeNt der deutschen Crackergruppe fRACTUs`99 ( http://surf.to/fractus99 ). Ich habe bisher lediglich Tutoren zum cracken mit dem W32dasm geschrieben, und auch dieser Tutor wird diese Serie nicht abbrechen. Das liegt wahrscheinlich daran das ich selbst Softice nicht perfekt kann, und deshalb werde ich einen SI Tutor vielleicht zu einem spteren Zeitpunkt verwirklichen. 
Ich habe zu meinen ersten drei Tutoren lediglich positive Resonanz bekommen ( Vielleicht haben die, denen er nicht gefallen hat sich garnicht die Arbeit gemacht mir die Probleme mitzuteilen... Wen interessiert das zum Teufel?), aber ich hoffe auf jeden Fall das ich diesen Tutor so leicht verstndlich wie mglich zu machen!

II)

Wie bereits oben angekndigt werden wir wieder mal den schnen W32dasm zu cracken verwenden, ich finde ihn einfach viel bersichtlicher als Softice oder andere Dissasambler! Wie auch immer wir verwenden ihn halt. Ihr knnt natrlich auch versuchen euch eine gltige Serial zu hacken, dann aallerdings auf eigene Faust. ;-D 
Wir brauchen jetzt natrlich noch einen Hexeditor: In vielen Tutoren werdet ihr lesen das die Leute von diesem ominsen HIEV schwrmen...Also ich weiss nicht wieso ich unter Win98 dissasambeln und unter DOS hexediten sollte ??? Macht was ihr denkt, ich benutze jedenfalls den Hex Workshop v.2.45. 
Ihr bekommt diese Tools entweder unter www.crackstore.com  oder auf unserer Homepage s.o.!

III)

Wir werden uns heute einmal dem Programm Turbo Edit 97 1.4 widmen. "Warum???", mgen da manche fragen. Zu Recht, denn das Programm ist wirklich nicht besonders hilfreich. Man kann damit drei Textformat betrachten und editieren, TOLL, und warum cracken wir es dann? Ganz einfach, weil es a) Ein Evaluation Period hat und b) Eine RegKey-Eingabe c) Zwei Nagscreens !
Also es ist nicht so ganz einfach. 
Bentigte Zeit: Mit berlegen und ausprobieren ca 20min+
                Ohne berlegen (Mit dem Tutor) ca 5-10min+
Download: http://www.porlande.pt/TurboEdit97/

IV)

Das Programm habe ich bei mir auf dem PC schon gecrackt, aber ich schreibe jetzt erst den Tutor, das heisst wenn ich das Programm neu installiere dann kommt die Meldung "The system Clock has been moved back". Diese Meldung sollte aber erst erscheinen wenn die Evaluation vorbei ist und der besonders schlaue PC-User den uralten Trick versucht und die Systemuhr um 1 Monat zurckstellt. Das dumme ist nur das sich das Programm das merkt und eben diese Meldung bringt. Wir werden das Programm jetzt praktisch rckwrts cracken (Rckwrts cracken, hrt sich fast an wie rckwrts berdimensionale Zigaretten drehen!). Also msst ihr den Tutor etwas durcheinender lesen, deshalb teile ich die einzelnen Schritte die ich mache genau auf. Dann solltet ihr es leichter haben den fr euch wichtigen Schritt zu finden!
Ihr knnt natrlich auf erst die Systemzeit vorstellen -> Trial Period has ended -> dann stellt ihr die Zeit wieder zurck und *schwupp* da ist die Meldung "The system Clock...<bla>.."

1) "The system clock has been moved back"
Als erstes erstellt ihr mal eine Kopie von der "TurboEdit97.exe", und nennt sie wie ihr wollt. Standardmssig heisst die Datei jetzt "Kopie von TurboEdit97.exe" und genau so lasse ich sie. Die Kopie der Datei ladet ihr jetzt in den W32dasm und die Original Exe-datei ladet ihr in den Hexworkshop <mecker> OKAY ,dann halt in den HIEV. 
Wenn der W32dasm fertig ist habt ihr einen netten Code vor euch, wenn ihr statt Schriftzeichen eher sowas wie Wingdings seht schaut in meinem Tutor I nach da seht ihr was zu tun ist, das passiert aber eigentlich nur wenn ihr den W32dasm zu ersten mal benutzt. Jetzt ffnet ihr die "StringDataReferences" und sucht mal unter "The system clock..." Jepp, das ist die Reference ein Doppelklick und wir landen an dieser Stelle im Code:(Klick am besten nochmals auf den String denn fters gibt es mehrere References fr einen String!) Hier aber nicht!  

* Referenced by a CALL at Address:
|:00454C09   
|
:00453CB8 53                      push ebx
:00453CB9 8BD8                    mov ebx, eax
:00453CBB 80BB0801000000          cmp byte ptr [ebx+00000108], 00  <- Hier wird geschaut ob die Zeit zurckgestellt wurde 
:00453CC2 741F                    je 00453CE3            !WICHTIG! <- Wenn Nicht dann springt er ber diesen Eintrag hinweg!
:00453CC4 6A00                    push 00000000                                   |
:00453CC6 668B0DF43C4500          mov cx, word ptr [00453CF4]                     |  
:00453CC6 668B0DF43C4500          mov cx, word ptr [00453CF4]                     |
                                                                                  |
* Possible StringData Ref from Code Obj ->"The system clock has been moved "      | Und hier springt er hin!
                                        ->"back. Please reset system clock "      |
                                        ->"to correct time before re-running "    |
                                                                                  |
:00453CCF B8003D4500              mov eax, 00453D00                               |
:00453CD4 E8ABE4FDFF              call 00432184                                   |
:00453CD9 A16C654700              mov eax, dword ptr [0047656C]                   |
:00453CDE E82545FCFF              call 00418208                                   |
                                                                                  |
* Referenced by a (U)nconditional or (C)onditional Jump at Address:               |
|:00453CC2(C)                                                          <-----------
|
:00453CE3 66837B4200              cmp word ptr [ebx+42], 0000
:00453CE8 7408                    je 00453CF2

Wir mssen diesen je "Jump if equal" also mal wieder mit EB patchen "Uncondicional Jump". Schnell den Hex-Offset rausgeschreiben: "00530C2h" (Das h bedeutet Hex und gehrt nicht zum Offset!)
Wir wechseln in den Hexworkshop und gehen an die Addresse 00530C2 dort sehen wir den Hexwert "741F" den patchen wir in "EB1F"
und speichern die Datei ab.
Jetzt starten wir mal die Original Exe-Datei die wir gerade gendert haben und wir sehen das dies Meldung nichtmehr erscheint! COOL War ja klar!
Aber was stelle ich fest bei mir kommt jetzt die Meldung " The Trial period has ended please register"

2) "The Trialperiod has ended please register this software"
Nachdem wir den Check ob das Sytemdatum gendert wurde umgangen haben kommt eben diese Meldung und es erscheint ein Fenster wo wir Username,Company,Unlockcode eingeben sollen. Das machen wir doch glatt: cI[ERo,fRACTUs`99,98765432 -> *bamm* "You have entered an invalid unlock code" NEIN, wer htte das gedacht..."Please obtain a correct unlock code. Ending application" Wir werden so nett darauf hingewiesen einen korrekten code zu besorgen, wer knnte da schon nein sagen. Auch wenn die Art diesen Key zu bekommen nicht genau die Art und Weise ist die sich der Programmierer vorstellt.
Wir wechseln in den W32dasm und suchen nach der StringDataReferennce "The Trialperiod has ended..." Und siehe da sie steht genau unter der Refernce von Schritt 1) !!! Was fr ein Glck. Nach einem Doppelklick auf den String (Zweimal klicken bringt auch hier nichts!) landen wir hier:

* Referenced by a CALL at Address:
|:0045557A                         <- Dazu spter mehr!!!
|
:004539F8 53                      push ebx
:004539F9 8BD8                    mov ebx, eax
:004539FB 80BB0801000000          cmp byte ptr [ebx+00000108], 00    <- Evaluationzeit wird berprft!
:00453A02 741C                    je 00453A20                        <- Ein "Conditional Jump" -------------
:00453A04 6A00                    push 00000000                                                            |
                                                                                                           |
* Referenced by a (U)nconditional or (C)onditional Jump at Address:                                        |
|:0045399F(C)                                                                                              |
|                                                                                                          |
:00453A06 668B0D343A4500          mov cx, word ptr [00453A34]                                              |
:00453A0D B202                    mov dl, 02                                                               |
                                                                                                           |
* Possible StringData Ref from Code Obj ->"The trial period has ended. Please " <- Unser gesuchter String! |
                                        ->"register this software!"                                        |
                                                                                                           |
:00453A0F B8403A4500              mov eax, 00453A40                                                        |
:00453A14 E86BE7FDFF              call 00432184                                                            |
:00453A19 8BC3                    mov eax, ebx                                                             |
:00453A1B E8BC2F0000              call 004569DC                                                            |
                                                                                                           |
* Referenced by a (U)nconditional or (C)onditional Jump at Address:  <--------------------------------------
|:00453A02(C)                                                         Hier geht der Jump hin! Wieder wird die Meldung ber-                                                                        sprungen!
|
:00453A20 66837B2200              cmp word ptr [ebx+22], 0000
:00453A25 7408                    je 00453A2F
:00453A27 8BD3                    mov edx, ebx

Es ist eigentlich wieder das gleiche wie in Schritt eins, wir mssen diesen Sprung unconditional machen! Also wieder mit EB patchen! Dr Offset ist diesmal:0052E02h. Wir wechseln fluchs mal in den Hexworks und ndern den Hexwert: 741C in EB1C !!!
Speichern und Programm starten! JEPP, die Meldung ist weg und wir kommen in das Programm rein!
Eine kleine Anmerkung noch: Es gibt einen zweiten Weg diese Meldung zu killen. Ihr seht doch sicher das "Referenced by a CALL at Address" ganz oben im Code. Das heisst das diese Routine mit dem Check der Evaluationzeit und dem je durch einen Call aufgerufen wurde. Und dieser CALL sitzt an der Addresse 0045557A. "GotoCodeLocation" + 004557A -> Das bringt uns hierher:

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00455567(C)
|
:00455570 0390FC000000            add edx, dword ptr [eax+000000FC]  
:00455576 85D2                    test edx, edx                     <- Ohh, ein Test, hchst verdchtig!
:00455578 7F07                    jg 00455581                       <- "Jump if greater"
:0045557A E879E4FFFF              call 004539F8                     <- Das ist der bse CALL!
:0045557F EB05                    jmp 00455586                      <- Unwichtig!

So, der Test scheint zu berprfen ob die Evaluationzeit abgelaufen ist oder nicht, und wenn nicht dann wid der "jg" ausgefhrt. Wenn sie abgelaufen ist wird der CALL ausgefhrt. Das heisst ihr knnt entweder den "jg" unconditional machen ,wie gehabt, oder den CALL wegNOPPEN! Ich habe den CALL genoppt weil das etwas besonderes ist. Auer SIN sind mir erst wenige Programme oder Games untergekommen die nach dem Noppen eines CALLs noch funktioniert haben. Meistens verursacht das "Runtime Fehler" oder "Schwere Ausnahmefehler" (gR33tZ t0 M$). Wie auch immer, ihr knnt es euch aussuchen: Den "je" oder den "jg" mit EB patchen oder den CALL Noppen.
Der CALL hat den Hexwert "E879E4FFFF" und den Offset:005497Ah. -> Der CALL hat nachher den Hexwert "9090909090"

3) Regkey-Eingabe
Jetzt, da ich endlich in das Programm reinkomme knnen wir uns getrost der Regkey-Eingabe widmen. Im Men Help klick ihr auf 
"Register Turbo Edit 97". Jetzt kommt wieder das Fenster wo wir Usernam,Company,Unlock Code angeben sollen. Gebt einfach irgendeinen Scheiss ein und ihr bekommt folgende Meldung: "You have entered an invalid Unlockcode.Please try again. 2 more tries remaining."
Hui, jetzt wird es aber gefhrlich, jetzt hat der bse Programmierer doch tatschlich die Key-Eingabe auf drei Versuche beschrnkt, NEIN, WIR SIND VERLOREN,..! Ich glaube der Programmierer kam sich ganz toll vor mit diesem "Hinderniss" soweit man es als solches Bezeichnen kann.
Zurck in den W32dasm und mal nach You have entered..." suchen. Die vorletzte StringData ist in diesem Fall die gesuchte.
Ein Doppelklick und wir kommen an eine Stelle die so aussieht.(!VORSICHT! Es gibt diesmal zwei References, wenn ihr nochmal klickt kommt ihr an eine andere Stelle, dazu spter mehr.)

1.Stelle:

* Referenced by a (U)nconditional or (C)onditional Jump at Address: 
|:00453B7A(C)                                                          <- Da kommt der Jump her der diese Meldung aufruft!
|
:00453BC0 6A00                    push 00000000
:00453BC2 668B0D803C4500          mov cx, word ptr [00453C80]
:00453BC9 B201                    mov dl, 01

* Possible StringData Ref from Code Obj ->"You have entered an invalid unlock "  <- Der gesuchte String
                                        ->"code."

Jetz kommt ein Teil des Codes der oberhalb unserer Meldung steht (Beinhaltet 1. + 2. Stelle des Strings!)

* Referenced by a CALL at Addresses:
|:004564C5   , :004565C3   
|
:00453B48 55                      push ebp
:00453B49 8BEC                    mov ebp, esp
:00453B4B 6A00                    push 00000000
:00453B4D 6A00                    push 00000000
:00453B4F 53                      push ebx
:00453B50 56                      push esi
:00453B51 57                      push edi
:00453B52 8BD8                    mov ebx, eax
:00453B54 33C0                    xor eax, eax
:00453B56 55                      push ebp
:00453B57 68FF3B4500              push 00453BFF
:00453B5C 64FF30                  push dword ptr fs:[eax]
:00453B5F 648920                  mov dword ptr fs:[eax], esp
:00453B62 80BB0801000000          cmp byte ptr [ebx+00000108], 00  <- Compare, Interessant!!!
:00453B69 746A                    je 00453BD5                      <- AHA, ein "je"---------------------
:00453B6B 8BB30C010000            mov esi, dword ptr [ebx+0000010C]                                    |
:00453B71 2BB310010000            sub esi, dword ptr [ebx+00000110]                                    |
:00453B77 4E                      dec esi                                                              |
:00453B78 85F6                    test esi, esi  <- Test, klar!                                        |
:00453B7A 7E44                    jle 00453BC0   <- jump geht dort hin:------------------------------  |
:00453B7C 6A00                    push 00000000                                                     |  |
                                                                                                    | Wir sehen das die erste
* Possible StringData Ref from Code Obj ->"You have entered an invalid unlock " <- Die erste Stelle | Meldung hier ber-
                                        ->"code."                                                   | sprungen wird!
                                                                                                    |  |
:00453B7E BA183C4500              mov edx, 00453C18                                                 | Aber er springt genau
:00453B83 8D45FC                  lea eax, dword ptr [ebp-04]                                       | zur zweiten Meldung!
:00453B86 E869F9FAFF              call 004034F4                                                     | Schonwieder wollte der
:00453B8B 8D55F8                  lea edx, dword ptr [ebp-08]                                       | Programmierer den 
:00453B8E 8BC6                    mov eax, esi                                                      | Cracker verarschen! :-D
:00453B90 E8A329FBFF              call 00406538                                                     |  |
:00453B95 8B55F8                  mov edx, dword ptr [ebp-08]                                       |  |
:00453B98 8D45FC                  lea eax, dword ptr [ebp-04]                                       |  |
:00453B9B E83CFAFAFF              call 004035DC                                                     |  |
:00453BA0 8D45FC                  lea eax, dword ptr [ebp-04]                                       |  |
                                                                                                    |  |
* Possible StringData Ref from Code Obj ->" more tries remaining."  <- Hui, die tolle Beschrnkung auf drei Versuche!
                                                                                                    |  |
:00453BA3 BA683C4500              mov edx, 00453C68                                                 |  |
:00453BA8 E82FFAFAFF              call 004035DC                                                     |  |
:00453BAD 8B45FC                  mov eax, dword ptr [ebp-04]                                       |  |
:00453BB0 668B0D803C4500          mov cx, word ptr [00453C80]                                       |  |
:00453BB7 B201                    mov dl, 01                                                        |  |
:00453BB9 E8C6E5FDFF              call 00432184                                                     |  |Bei dem "je" werden 
:00453BBE EB15                    jmp 00453BD5                                                      |  |beide Stellen ber-
                                                                                                    |  |sprungen. Und das ist
* Referenced by a (U)nconditional or (C)onditional Jump at Address: <--------------------------------  |was wir wollen! 
|:00453B7A(C)                                                                                          |
|                                                                                                      |
:00453BC0 6A00                    push 00000000                                                        |
:00453BC2 668B0D803C4500          mov cx, word ptr [00453C80]                                          |
:00453BC9 B201                    mov dl, 01                                                           |
                                                                                                       |
* Possible StringData Ref from Code Obj ->"You have entered an invalid unlock "  <- Die 2. Stelle      |
                                        ->"code."                                                      |
                                                                                                       |
:00453BCB B88C3C4500              mov eax, 00453C8C                                                    |
:00453BD0 E8AFE5FDFF              call 00432184                                                        |
                                                                                                       |
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:                                  |
|:00453B69(C), :00453BBE(U)         <-------------------------------------------------------------------
                                                        
:00453BD5 66837B3A00              cmp word ptr [ebx+3A], 0000
:00453BDA 7408                    je 00453BE4

Also mssen wir den "je" in einen "jmp" umwandeln. Dann ist der "jle" vllig schnurz piep egal. Der Offset des "je": 0052F69h
Wir ndern also die Original-Bytes 746A in EB6A umschreiben. Und was sehen wir, die Meldung erscheint nichtmehr aber leider speichert das Programm den von uns eingegebenen Name nicht und deshalb steht unter "About Turbo Edit 97" immernoch: "Shareware" und "unregistered evaluation copy". Und das wollen wir nicht, deshalb kommen wir zum letzten Punkt unseres Cracks.

4) Der Nag in der About-Box

Wie oben gesagt sind wir noch nicht Namentlich als User registriert und das werden wir auch nicht sein, aber dieses tzende Shareware,Evaluation copy... lassen wir auch nicht stehen. Wir klick mal wieder in die StringDataReference und suchen erstmal nach dem Eintrag "-Shareware-". Ein Doppelklick und wir enden hier:

:00469E6B 648920                  mov dword ptr fs:[eax], esp
:00469E6E 8BC3                    mov eax, ebx
:00469E70 E8EB66FBFF              call 00420560                  <- Oh, ein CALL \ 
:00469E75 B201                    mov dl, 01                                      -> Hier wird festgestellt ob das Programm
:00469E77 E8E086FEFF              call 0045255C                  <- Nochein CALL /   Vollversion ist
:00469E7C A15C694700              mov eax, dword ptr [0047695C]
:00469E81 83B81401000000          cmp dword ptr [eax+00000114], 00000000 <-Ein compare nach zwei CALLs, sehr verdchtig!
:00469E88 757D                    jne 00469F07                           <- Wenn Vollversion dann spring! ->
                                                                                                           |
* Possible StringData Ref from Code Obj ->"- Shareware -" <- Erster Nag                                    |
                                                                                                           |
:00469E8A BA749F4600              mov edx, 00469F74                                                        |
:00469E8F 8B83EC010000            mov eax, dword ptr [ebx+000001EC]                                        |
:00469E95 E83230FBFF              call 0041CECC                                                            |
                                                                                                           |
* Possible StringData Ref from Code Obj ->"Unregistered evaluation copy"  <- Zweiter Nag                   |
                                                                                                           |
:00469E9A BA8C9F4600              mov edx, 00469F8C                                                        |
:00469E9F 8B8314020000            mov eax, dword ptr [ebx+00000214]                                        |
:00469EA5 E82230FBFF              call 0041CECC                                                            |
:00469EAA A15C694700              mov eax, dword ptr [0047695C]                                            |
:00469EAF 8B80FC000000            mov eax, dword ptr [eax+000000FC]                                        |
:00469EB5 8B155C694700            mov edx, dword ptr [0047695C]                                            |
:00469EBB 0382E8000000            add eax, dword ptr [edx+000000E8]                                        |
:00469EC1 99                      cdq                                                                      |
:00469EC2 33C2                    xor eax, edx                                                             |
:00469EC4 2BC2                    sub eax, edx                                                             |
:00469EC6 8BF0                    mov esi, eax                                                             |
                                                                                                           |
* Possible StringData Ref from Code Obj ->"You have " <- Den 3. Nag hatte ich ganz bersehen.              |
                                                                                                           |
:00469EC8 BAB49F4600              mov edx, 00469FB4                                                        |
:00469ECD 8D45FC                  lea eax, dword ptr [ebp-04]                                              |
:00469ED0 E81F96F9FF              call 004034F4                                                            |
:00469ED5 8D55F8                  lea edx, dword ptr [ebp-08]                                              |
:00469ED8 8BC6                    mov eax, esi                                                             |
:00469EDA E859C6F9FF              call 00406538                                                            |
:00469EDF 8B55F8                  mov edx, dword ptr [ebp-08]                                              |
:00469EE2 8D45FC                  lea eax, dword ptr [ebp-04]                                              |
:00469EE5 E8F296F9FF              call 004035DC                                                            |
:00469EEA 8D45FC                  lea eax, dword ptr [ebp-04]                                              |
                                                                                                           |
* Possible StringData Ref from Code Obj ->" days left to evaluate Turbo-Edit " <- Zweiter Teil des 3.Nags. |
                                                                                                           |
:00469EED BAC89F4600              mov edx, 00469FC8                                                        |
:00469EF2 E8E596F9FF              call 004035DC                                                            |
:00469EF7 8B55FC                  mov edx, dword ptr [ebp-04]                                              |
    .....                              ......                                                              |
                                                                                                           |
                                                               Hier geht der jump hin!<---------------------

Also wieder das gleich jne -> jmp | (Offset:00069288) 757D -> EB7D !!!
Jetzt steht in der About-Box "Licensed to:        ". Sieht doch irgend wie besser aus, oder? :-D

Das wars eigentlich auch schon, mit meinem Tutor IV. Den Rest entnehmt ir bitte der .nfo die dem Tutor beiliegt.

gR33tZ  cI[ERo

rEmeMBeR:   "pIRacY hArMS cOnSUMerS and aUTHoRIzEd dEAlERs - "
                   " nOn pIRacY hArmS yOuR bUDgEt "


















 






  