Was ist OllyDbg?
OllyDbg ist ein von Oleh Yuschuk entwickelter 32-Bit-Debugger für Windows-Betriebssysteme. Hauptsächlich kann OllyDbg zur binären Codeanalyse verwendet werden, um beispielsweise eine Fehlerbereinigung von Programmen durchzuführen.
OllyDbg arbeitet auf Ring 3-Ebene und zeichnet sich durch folgende Features aus:
* Debugging von Multithreadprogrammen
* Anhängen an laufende Prozesse
* Konfigurierbarer Disassembler mit Unterstützung der Formate MASM und IDEAL
* MMX, 3DNow!, SSE, ASCII und Unicode-Unterstützung
* Hardware- und Software-Breakpoints
* Suchen über Speicherbereiche
* Modifikation von Speicherbereichen "on-the-fly"
Einer der besonderen Vorteile von OllyDbg ist, dass der Debugger auch von mobilen Datenträgern gestartet werden kann. Er benötigt keinerlei Installation, erlaubt aber ein Add-In in den Windows Explorer.
Download OllyDbg
Da Bilder aber mehr sagen als Worte installiert ihr OllyDbg nun und startet ihn. Wenn das Programm geladen ist, seht ihr vor euch so ein Fenster:
Wichtige Funktionen von OllyDbg:
Viele Fenster ohne alles. Aber keine Sorge, da kommt bald ganz viel unverständliches Zeug rein.
Oben am Rand seht ihr, wie in jedem anderen Programm auch, eine Buttonleiste mit verschiedenen Funktionen:
Für dieses erste Tutorial habe ich ein kleines CrackMe (CrackMe, dessen einziger Nutzen das Cracken ist) gecodet, welches ihr im Archiv findet.
Rechts unten seht ihr zusätzlich noch den Status des Programms:
Cracken eines CrackMe‘s:
Startet nun das CrackMe einmal. Ihr werdet diese unschöne Meldung vor euch sehen:
Hm… Das ist aber doof. Was machen wir da nur? OllyDbg wird uns helfen!
Wenn ihr nun ein Programm in OllyDbg cracken oder was auch immer wollt, dann geht ihr wie folgt vor:
Nun wird OllyDbg das CrackMe laden und setzt den Status automatisch auf:
Das bedeutet, dass das Programm solange nicht weiterläuft, bis ihr es weiterlaufen lässt. Das macht ihr entweder über drücken von F9 oder über einen Klick auf den Playbutton oben in der Leiste. Dies macht ihr nun auch. Wie ihr seht, kommt wieder die ungeliebte Fehlermeldung von vorhin und das Programm beendet sich wieder. Ihr müsst es allerdings nicht nochmal in OllyDbg starten, sondern ihr klickt oben in der Leiste auf den „Programm zurücksetzen“-Button. Nun ist das Programm wieder im Uhrzustand. Lasst es diesmal aber auf Pause stehen.
Nun werden sich die leeren Felder mit viel viel Zeug füllen:
Da wir eine Messagebox suchen, die wir verhindern wollen, schauen wir uns nun den Code an und suchen diese Stelle:
Doch wie ich annehme, versteht ihr nicht sonderlich viel von dem, was ihr hier vor euch seht. Deswegen gibt es jetzt erst einmal einen kleinen Crashkurs in Assembler.
ASM Funktion -> Beschreibung
call -> Aufruf einer Funktion
jmp -> unbedingter Sprung
je/jz -> Sprung wenn gleich oder null
jne/jnz -> Sprung wenn ungleich
return -> Rückgabe einer Funktion
nop -> keine Funktion (nichts machen)
mov -> Kopiervorgang
sleep -> Programm pausieren
goto -> unbedinger Sprung
Das sollte auch schon als kleiner Einstieg reichen. Wie die einzelnen Sachen genau funktionieren seht ihr sicher selbst im Laufe der Zeit bzw. ich komme darauf zurück.
Nun konzentrieren wir uns wieder auf den Teil mit der Messagebox.
Ich habe das Programm so geschrieben, dass erst eine Messagebox kommt, die sagt, dass keine Lizenz gefunden werden konnte. Nun wird überprüft, ob auf OK geklickt wurde. Wenn ja wird das Programm beendet. Da es nur OK als Auswahl gibt, hat man auch keine andere Wahl, als dass sich das Programm nun beendet. Die Überprüfung ob auf OK geklickt wurde, seht ihr in der Zeile in der das rote JNZ steht. Zum einfacheren Überblick habe ich hinter den Zeilen Kommentare eingefügt. In dem Code steht nun, dass über die Funktion zum Beenden gesprungen wird, wenn ihr nicht auf OK geklickt habt. (Was aber unmöglich ist!) Nun wollen wir aber, dass über diese Funktion gesprungen wird und wir zur zweiten Messagebox kommen.
Diese Abfragen kann man recht leicht aushebeln, indem man dem Programm sagt, dass es entweder immer an dieser Stelle springt (JMP) oder immer gegenteilig springt. In diesem Fall hier (wenn ungleich) dann muss im entgegengesetzten Fall (wenn gleich) gesprungen werden. JNZ <-> JE
In diesem Beispiel werden ich die Methode des „immer Springens“ benutzen. Also müssen wir nun irgendwie das JNZ in JMP umwandeln. In OllyDbg markiert ihr nun die Zeile mit dem JNZ und macht einen Rechtsklickt und klickt auf Assemble. Alternativ markiert ihr die Zeile und drückt einfach die Leertaste.
Nun öffnet sich ein kleines Fenster, in dem die aktuelle Zeile steht und ihr sie bearbeiten könnt.
Falls bei „Fill with NOP’s“ ein Haken ist, macht den nun heraus.
Nun wollten wir ja unseren Sprung ändern. Dies tun wir, indem wir das JNZ und durch JMP ersetzen.
Klickt nun auf Assemble und ihr landet wieder bei eurem Programm. Ihr seht nun, dass sich die Zeile mit dem JNZ geändert hat.
Nun lasst ihr das Programm laufen (F9) und es erscheint wieder die böse Messagebox. Klickt wieder auf OK und siehe da, dass Programm beendet sich nicht, sondern es kommt die rettende Messagbox.
Ich wiederhole einfach mal das, was die Messagebox schon gesagt hat. Glückwunsch, ihr habt es geschafft!
Wenn ihr nun ein Programm verändert habt und diese veränderte Version speichern wollt, dann macht ihr wieder Rechtsklick -> Copy to executable -> All modifications
Im nächsten Fenster klickt ihr auf Copy all
Im nächsten Fenster macht ihr wieder einen Rechtsklick. Wählt diesmal aber Save file
Speichert nun das Programm unter anderem Namen ab. Wenn ihr dieses nun startet, dann kommt ihr gleich zur Glückwunsch-Messagebox.
Hoffe man konnte euch anhand dieses Tutorials ein wenig einsicht in die Matherie verschaffen.
->
Du hast ein Tutorialwunsch? Schreib mir eine PM.
credits by crank1337 @