Crack-Verstndniss fr Newbies:

Lektion 1
^^^^^^^^^
1) Vorwort
2) Und heute...
3) Los gehts
4) Schlusswort

1)
Hi, ich habe in letzter Zeit eine Menge Mails von Newbies bekommen, die meine Tutoren gelesen haben, und es war fast ausschliesslich Lob darunter. Aber ein Frage erschien in vielen dieser Mails, und ich will in diesem "Tutor" einmal genau diese Frage aufgreifen. Als typisches Beispiel habe ich die E-Mail von Tequila007 genommen.Da steht folgender Text:
"Hi, ich bruchte mal ein allgemeines Crack-Tut, mit deinem Tutor habe ich zwar das Prog gecrackt, aber andere habe ich damit nicht geschafft."
Oder ein anderes Beispiel:
"...muss ich jne immer in jn umndern?
Also was soll ich sagen, ich werde in dieser Tutorreihe versuchen euch die verschiedenen bekanntesten Crackingmethoden so allgemein wie nur mglich beizubringen.
Ich werde lediglich die Methoden erklren WIE das Programm zu cracken ist, aber ich werde das ganze Zeug, z.B. wie ihr im Dasm einen Sprung zurckverfolgt, oder wie man den Hexworkshop benutzt etc.., nichtmehr erklren. Wenn ihr das noch nicht wisst saugt euch noch schnell meine Tutor zu Techfacts95, da ist alles lang und breit erklrt :-P

2)
Dies ist der erste (und bisher einzige) Tutor aus dieser Reihe, deshalb nehmen wir uns heute die einfachste Form des crackens mit dem W32dasm vor. Es handelt sich dabei um das registrieren eines Programms durch berspringen der Fehlermeldung. Leider machen es einem die Programmierer heute nur noch selten so einfach, aber ich finde fters einmal das eine oder andere (auch qualitativ sehr gute) Programm bei dem es funktioniert. 

3)
Ich unterscheide diese Art des "Fehlermeldungentfernens" in zwei verschiede Wege. 
1] Den Sprung vor der Meldung so patchen das IMMER ber die Meldung hinweg gesprungen wird
2] Den Sprung der die Meldung (+ den Vergleich) aufruft einfach wegnoppen
Wenn euch das im Moment noch nix sagt, lest einfach weiter, ich werde es spter etwas bildlicher erklren.
Logischerweise beginnen wir mit dem dissasambeln der .exe Datei, und suchen nach der Meldung "Falscher Regkey" o.. je nach Programm :-) Wenn ihr sie in den Strings findet habt ihr Glck, wenn nicht sucht mal in einer der DLLs, die eventuell in dem Verzeichniss des Programms liegen. Findet ihr auch da den String nicht, wird die ganze Sache komplizierter, und zu solchen Fllen komme ich in einer der spteren Lektionen *g* 
TIP: Wenn es keine Meldung gibt "Key falsch" dann ja vielleicht ein Meldung "Key richtig" also nicht gleich aufgeben, wenn der String nicht gefunden wird, ihr msst einfach berlegen was das Programm sagen knnte, wenn der Key richtig ist.. und danach dann suchen.
Ich nehme als Beispiel mal das Programm "Traystart 2.0" aber das soll euch egal sein, ich habe nur keine Lust mir den ganzen Assemblertext auszudenken.
Ich suche mal nach meiner Fehlermeldung:

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0044D322(C)
|
:0044D391 BA07000000              mov edx, 00000007
:0044D396 E88589FBFF              call 00405D20 <- im moment unwichtig
:0044D39B 8B55F8                  mov edx, dword ptr [ebp-08]
:0044D39E 58                      pop eax         
:0044D39F E86064FBFF              call 00403804 <- im moment unwichtig fr euch
:0044D3A4 7530                    jne 0044D3D6  <- !DAS ist fr euch wichtig!

* Possible StringData Ref from Code Obj ->"Code ist ungltig" <- Da ist die Meldung

Wie ihr seht handelt es sich um Fall (1), wenn ihr das nicht gleich seht will ich es kurz erklren: Ihr habt einen "jne" ,also einen Jump mit Bedingung, DIREKT vor der Fehlermeldung. (An Stelle des jne knnte natrlch jeder andere Jump mit Bedingung stehen: z.B. je, ja, jnae...was auch immer..)Das heisst, das das Programm diese Meldung berspringt, sobald irgendetwas bestimmtes vorgefallen ist. Die Bedingung msste in diesem Fall irgendwie so lauten: Wenn der Code richitg war, dann spring ber diese Meldung hinweg (<- Also keine Fehlermeldung mehr!)
Was wir jetzt machen mssen liegt auf der Hand, wir mssen dem Programm sagen, dass es einfach IMMER diese Meldung auslsst, egal ob dieser dmliche Code nun richtig oder falsch war. Also mssen wir den "jne" in einen "jmp" umwandeln! Ganz billig im Prinzip. Wie ihr das ndert solltet ihr wissen, das werde ich nicht nochmals erklren, sorry!

Kommen wir jetzt zu Methode (2)
Folgende Meldung wollen wir weghaben:
 
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0044D3A4(C)  <- In diesem Fall ist DAS sehr wichtig fr uns!
|
* Possible StringData Ref from Code Obj ->"Der Code ist ungltig"  <- Da ist die Meldung

:0044D3D6 B8D0D44400              mov eax, 0044D4D0
:0044D3DB E8CCF9FDFF              call 0042CDAC

Auch hier wollen wir das "Der Code ist ungltig" irgendwie killen, aber OH SCHRECK, da steht gar kein "jne" oder "je" o.. davor...aahhh...ruhig Blut. Kein Problem. Ihr seht vor der Fehlermeldung die Zeile: Referenced by a...blabla.... Und drunter die Addresse 0044D3A4(C)
Die Zeile bedeutet folgendes: Diese Meldung (die unterhalb steht) wurde aufgerufen von dem Jump an der Addresse 0044D3A4. Das (C) bedeutet das der jump eine Condition hat. Klingelts? Also was wir machen mssen ist, an diese Stelle des Programms zu gehen (0044D3A4) und den Jump der dort sein wird einfach zu lschen. Damit wir von DIESEM jump nichtmehr zu dieser Meldung gebracht werden. Es kann natrlich auch sein, dass dort zwei Addressen stehen, dann msstet ihr entweder beide jumps killen, oder rausfinden welcher jump derjenige ist, der fr euch wichtig ist (Das geht am besten mit dem Debugger vom W32dasm, aber dazu ein ander Mal mehr..) Also gehen wir mit "GotoCodeLocation" mal zu unserem jump:

:0044D39E 58                      pop eax
:0044D39F E86064FBFF              call 00403804
:0044D3A4 7530                    jne 0044D3D6 <- dieser jump ist es, von dem oben die Rede ist

* Possible StringData Ref from Code Obj ->"Vielen Dank, das Sie sich registriert haben" 

BINGO, das ist doch optimal. Wir sehen, dass der jump, der zur "Falsch"-Meldung springt direkt VOR der "Richtig"-Meldung steht. Wir kombinieren logisch: Wenn wir diesem jump lschen kann also weder die Fehlermeldung aufgerufen werden, noch kann die Registriertmeldung bersprungen werden! *FREU* Jetzt msst ihr also in den Hexeditor und diesen jump weg noppen.                                           
Das ist nun wirklich nicht schwer, oder? Leider ist es oft der Fall, das das Programm zwar artig "Danke fr die registrierung" sagt, aber nach einem neustart dann wieder unregistriert ist. Das liegt daran, dass bei manchen Programmen eine Unterroutine eingebaut ist, die bei jedem Start wieder berprft ob das Programm nun Registriert ist, oder nicht! In einem solchen Fall ist es entweder notwendig eine Serial zu saugen, oder das Programm so weit zu cracken, das ein Registrierung nichtmehr notwendig ist *g* 
Also nach jeder erfolgreichen Registrierung erstmal das Programm neu starten, um zu sehen ob das Programm auch jetzt noch so doof ist wie vorher.. Bei Traystart 2.0 wird alles gespeichert, das ist halt ein optimalfall, aber zum lernen gibt es nix besseres.

Das war nun schon die erste Lektion, ich bitte euch mir zu mailen, wenn ihr mehr wollt, oder wenn etwas schlecht oder zu kurz erklrt war. Bitte fragt mich nicht nach Game-Cracking-Tutoren, da ich so gut wie nie spiele besitze ich auch keine Spiele. Wenn ich mal eins in die Hnde bekomme werde ich vielleicht noch einen Tutor schreiben.. wartets einfach ab.

MfG cI[ERo [tSK]
a fRACTUs`99 - pROdUcTIoN
 


   
