Programme zum Bearbeiten in ollydbg. Olly Debugger von A bis Z

Einführung in das Cracken von Grund auf mit OllyDbg – Kapitel 1 – Archiv WASM.RU

Der Zweck dieser „Einführung in das Cracken von Grund auf mit OllyDbg“ besteht darin, denjenigen, die gerade erst anfangen, die Kunst des Crackens zu beherrschen, ein Grundwissen zu vermitteln und dies gleichzeitig so zu tun, dass sie dieses Wissen später lesen können und verstehen Sie fortgeschrittenere Tutorials wie , die im „Neuen Kurs von CracksLatinos“ zu finden sind, der natürlich offen für neue Ergänzungen und Ergänzungen bleibt.

Die Idee für den Kurs entstand aus der Tatsache, dass viele der Tutorials im New CracksLations-Kurs für Anfänger zu schwierig waren und diejenigen, die das erforderliche Niveau nicht erreichten, frustriert waren und sich in vielen Fällen weigerten, weiterzumachen. Der Zweck dieser „Einführung ...“ besteht daher nicht darin, die hervorragenden Tutorials aus dem „Neuen Kurs ...“ zu wiederholen, dessen Anzahl bereits 500 überschritten hat, sondern darin, den Grundstein zu legen, damit diejenigen, die diesen Kurs absolvieren wird in der Lage sein, komplexere Tutorials zu lesen. Dies erfordert, wie alles in unserem Handwerk, einen erheblichen Aufwand, und das Hauptziel besteht darin, diesen Aufwand zu reduzieren, Grundkenntnisse zu vermitteln und ein besseres Verständnis komplexerer Materie zu ermöglichen.

Warum OLLYDBG?

Wir werden hier nicht über die ewige Konfrontation zwischen Soft-Ice und OllyDbg sprechen; ich denke, dass selbst Soft-Ice-Fanatiker zugeben, dass es einfacher ist, mit OllyDbg zu beginnen, da es viele Informationen darüber gibt und es einfacher zu studieren ist. Wir müssen die Welt des Knackens durch die Tür namens „OllyDbg“ betreten, und erst dann kann jeder, der sie benötigt, zu jedem anderen benötigten Debugger wechseln, da sich nur die Verwendungsmethoden ändern, das Wesentliche jedoch gleich bleibt.

Von vorn anfangen

Zuerst müssen Sie sich mit dem Tool ausrüsten, das wir hauptsächlich verwenden werden. Klicken Sie dazu darauf und laden Sie es herunter.

Da wir bei Null anfangen, müssen wir zunächst das heruntergeladene Archiv in einen leicht erreichbaren Ordner auf Ihrer Festplatte entpacken. Eine gute Idee wäre, einen Ordner auf dem Laufwerk C:/ zu erstellen. Obwohl es an jedem anderen Ort funktioniert, gehe ich davon aus, dass das Laufwerk C:/ ausgewählt ist.

Nachdem die Datei entpackt wurde, gehen Sie in den erstellten Ordner und sehen Sie:

Es enthält die ausführbare Datei OLLYDBG.exe, die wir ausführen müssen und für die ich der Einfachheit halber eine Verknüpfung auf meinem Desktop erstellt habe.

Ok, alles ist startbereit. Klicken Sie auf OllyDbg:

Wir sehen eine Meldung, dass die DLL in der Bibliothek älter ist als die gleiche System-DLL. Wenn wir „Ja“ auswählen, wird die alte DLL aus dem Ordner gelöscht und die System-DLL verwendet. Obwohl ich keinen großen Unterschied zwischen den beiden sehe, bevorzuge ich immer noch die Version, die mit der Distribution geliefert wird, also klicke ich immer auf „Nein“.

Das ist reines OllyDbg, und das erste Programm, das wir öffnen, nur um OllyDbg kennenzulernen, wird CrueHeads berühmtes CrackMe sein, das diesem Tutorial beigefügt ist.

Um eine Datei in OllyDbg zu öffnen, gehen Sie zu Datei -> Öffnen oder klicken Sie auf das Symbol:

Es öffnet sich ein Fenster, in dem Sie die gewünschte Datei finden können, in diesem Fall ist es CrueHeads Crackme.

Das oben erwähnte Crackme wird sich öffnen, und im Moment spielt es keine Rolle, dass völlig unklar ist, was die Ansicht, die sich uns öffnet, bedeutet – wir gehen zunächst einfach die verschiedenen Teile und Funktionen von OllyDbg und einige Einstellungen durch, damit Wenn in späteren Tutorials beispielsweise „gehe zu DUMP“ steht, wussten Sie zumindest, wo diese Option war.

Hier sehen wir uns die vier Teile des OllyDbg-Hauptfensters an:

1) Zerlegter Code

Auch Auflistung genannt. Hier zeigt uns Ollie den zerlegten Code des Programms, das wir debuggen werden; Standardmäßig ist Ollie so konfiguriert, dass es das Programm beim Öffnen analysiert. Dies kann unter Optionen -> DEBUGGING-OPTIONEN geändert werden.

Das heißt, wenn das Kontrollkästchen „AUTO START ANALISIS OF HAUPTMODUL“ aktiviert ist, analysiert OllyDbg das Programm und zeigt zusätzliche Informationen darüber an.

Dies ist der Anfang der geparsten Crack-Liste von CrueHead, und wenn wir sie ohne Parsen öffnen, können wir den Unterschied erkennen.

Das Analysefenster enthält viele Informationen, die, obwohl sie für uns noch nicht ganz klar sind, sehr interessant aussehen. Gleichzeitig ist es schön zu wissen, dass Sie es jederzeit entfernen können, wenn sich herausstellt, dass die Analyse nicht sehr genau ist oder sich ein Fehler eingeschlichen hat.

Oft zeigt OllyDbg einige Teile des Programms falsch an, weil es den ausführbaren Code fälschlicherweise als Daten interpretiert, und zeigt dann etwa Folgendes an:

In diesem Fall können Sie die Analyse manuell entfernen, indem Sie mit der rechten Maustaste auf die Auflistung klicken und „ANALYSE -> ANALYSE AUS MODUL ENTFERNEN“ auswählen.

Und dann wird die Auflistung korrekt angezeigt.

Eine weitere Option, die Sie zur Vereinfachung verwenden können und die mir persönlich nicht wirklich gefällt (aber Geschmäcker sind unterschiedlich), ist die Hervorhebung von Sprüngen und Anrufen – klicken Sie mit der rechten Maustaste auf die Auflistung und wählen Sie „DARSTELLUNG -> HERVORHEBUNG -> JUMPS UND ANRUFE“.

Sie erhalten Folgendes:

Hier sehen wir, dass Aufrufe in Azure und Übergänge in Gelb hervorgehoben werden.

Die Auflistung ist jetzt besser lesbar, aber wir haben noch keine Ahnung, was das bedeutet, aber es ist gut, das Tool für die zukünftige Verwendung bereit zu haben.

2) Register

Das zweite wichtige Fenster ist das Registerfenster.

Denken Sie daran, dass sich das Registerfenster ganz rechts in OllyDbg befindet und dort eine beträchtliche Menge an Informationen angezeigt wird.

Es gibt noch viel mehr Informationen, die wir nicht sehen, aber Sie können den Anzeigemodus auf drei Zustände einstellen („VIEW FPU REGISTERS“ – FPU-Register anzeigen, „VIEW 3D NOW REGISTERS“ – „3D NOW“-Register anzeigen und „VIEW DEBUG REGISTERS“. ” – Debug-Register anzeigen). Standardmäßig werden die ersten angezeigt.

3) Stapel oder Haufen

Kommen wir nun zum „Stapel oder Heap“. Außer der Möglichkeit, Informationen zu den ESP- und EBP-Registern anzuzeigen, gibt es hier nicht allzu viele Konfigurationsoptionen.

Standardmäßig ist der Modus zum Anzeigen von Informationen zu ESP (und er ist auch der nützlichste), er kann jedoch in den Modus zum Anzeigen von Informationen zu EBP geändert werden, wofür Sie in diesem Fenster mit der rechten Maustaste klicken und „ GEHE ZU EBP“ und die weitere Verwendung des Elements „GEHE ZU ESP“ führt uns zum vorherigen Modus zurück.

Ich werde die Funktionalität des Stacks in späteren Kapiteln ausführlicher erläutern, aber vorerst befassen wir uns nur mit dem, was durch Konfiguration geändert werden kann.

4) Dump

Das Dump-Fenster verfügt über viele Anzeigemodi, die geändert werden können, indem Sie mit der rechten Maustaste in das Dump-Fenster klicken und den gewünschten Modus auswählen. Der Standardmodus ist 8-Byte-Hex/ASCII.

Der Standardmodus ist auch der am häufigsten verwendete, aber gleichzeitig haben wir die Möglichkeit, ihn zu ändern, um zerlegten Code (DISASSEMBLE), Text (TEXT) und andere Formate (SHORT, LONG, FLOAT) anzuzeigen.

Und schließlich die Option SPECIAL -> PE HEADER, die, wie wir in den kommenden Kapiteln sehen werden, sehr nützlich sein kann.

Jetzt kennen wir die Hauptteile des OllyDbg-Hauptfensters, es gibt aber auch Fenster, die nicht direkt zugänglich sind, sondern entweder über das Menü oder über Schaltflächen auf dem Bedienfeld aufgerufen werden können.

Schauen wir uns jeden von ihnen an.

Der L-Button oder VIEW->LOG zeigt uns, was OllyDbg in das Protokollfenster schreibt. Es kann so konfiguriert werden, dass verschiedene Arten von Informationen angezeigt werden. Standardmäßig speichert das Protokollfenster alle Startinformationen sowie Informationen zu BREAKPOINTS CONDICIONAL LOGS. Letzteres werden wir viel später kennenlernen, aber schauen wir uns zunächst Informationen über den laufenden Prozess (in unserem Fall ist dies CrueHeads Crack) und die Bibliotheken an, die er lädt.

Eine der wichtigsten Optionen in diesem Fenster ist die Protokollierung in einer Datei, falls wir Informationen in einer Textdatei speichern möchten. Um diese Option zu aktivieren, klicken Sie mit der rechten Maustaste und wählen Sie „LOG TO FILE“.

Schaltfläche E oder VIEW->EXECUTABLES zeigt uns eine Liste der Module, die das Programm verwendet: exe, dll, ocx und andere.

Auch hier bringt die rechte Maustaste viele Optionen hervor, auf die wir jetzt nicht näher eingehen, die wir aber bereits bei der Erkundung des Hauptfensters von OllyDbg gesehen haben.

Die Schaltfläche M oder VIEW->MEMORY zeigt den von unserem Programm belegten Speicher an. Hier sehen wir Abschnitte der Anwendung, vom Prozess verwendete Bibliotheken, den Stapel und verschiedene vom System belegte Abschnitte, und oft belegen Programme während der Ausführung neue Speicherabschnitte.

Durch Klicken mit der rechten Maustaste können wir eine SUCHE im Speicher durchführen, um Zeichenfolgen verschiedener Art (Text, Hexadezimal, Unicode) zu finden. Außerdem besteht die Möglichkeit, Haltepunkte in Abschnitten hervorzuheben und die Zugriffsrechte für letztere zu ändern ( wählen Sie ZUGRIFF EINSTELLEN).

Button T oder VIEW->THREADS zeigt uns eine Liste der Threads (Threads) des Programms.

Obwohl wir jetzt nicht wissen, was es ist, und es erst in den folgenden Kapiteln herausfinden werden, wird es nicht überflüssig sein, sich mit jedem der Fenster vertraut zu machen. Wir werden später lernen, wie man sie verwendet.

Mit der Schaltfläche „W“ oder „ANSICHT->WINDOWS“ werden die Programmfenster angezeigt. Da das Programm jedoch noch nicht ausgeführt wird, bleibt die Liste der Fenster leer.

Taste H oder VIEW->HANDLES zeigt Handles an. Später werde ich erklären, was sie tun.

Schaltfläche C oder VIEW->CPU bringt uns zum Hauptfenster von OllyDbg zurück.

Die Schaltfläche / oder VIEW->PATCHES zeigt eine Liste der angewendeten Patches an, wenn das Programm geändert wurde. Da noch keine Änderungen vorgenommen wurden, bleibt das Fenster vorerst leer.

Die K-Taste oder VIEW->CALL STACK zeigt den „Call Stack“ an, eine Liste der Aufrufe, die uns bis zu dem Punkt begegnet sind, an dem das Programm gestoppt wurde.

Schaltfläche B oder VIEW->BREAKPOINTS ruft eine Liste der normalen Haltepunkte auf, die sich im Programm befinden. Es gibt keine Hardware-Breakpoints oder Speicher-Breakpoints, sondern nur normale.

Die R-Schaltfläche oder VIEW->REFERENCES zeigt ein Fenster mit Referenzen an, die wir als Ergebnis der Suche nach Referenzen in Ollie erhalten haben.

Die Schaltfläche „…“ oder VIEW->RUN TRACE zeigt das Ergebnis des Befehls RUN TRACE an. Hier können wir auch die Option LOG TO FILE auswählen, um die Trace-Ergebnisse in einer Textdatei zu speichern.

Wir haben das Bedienfeld mit den wichtigsten Schaltflächen abgedeckt, damit Sie mit deren Funktionen vertraut sind, wenn wir uns in den folgenden Kapiteln tiefer mit ihnen befassen.

So konfigurieren Sie OllyDbg als JIT (JUST IN TIME DEBUGGER)

Natürlich werden wir JIT nicht immer verwenden, sondern nur in besonderen Fällen, denn wenn bei irgendeinem laufenden Programm auf unserem Rechner ein Fehler auftritt, brauchen wir Ollie überhaupt nicht zu verwenden (standardmäßig ist dr.watson dies). als JIT verwendet).

Um OllyDbg zu einem JIT-Debugger zu machen, müssen Sie zu OPTIONEN->JUST IN TIME DEBUGGING gehen

und drücken Sie nacheinander die Tasten MAKE OLLYDBG JUST IN TIME DEBUGGER und DONE

Um diese Funktion zu entfernen, müssen Sie an derselben Stelle auf RESTORE JUST IN TIME DEBUGGER und FERTIG klicken.

Plugins in OllyDbg verbinden

Mit OllyDbg können Sie Plugins verbinden, die zur Lösung eines bestimmten Problems nützlich sein können. Um zu lernen, wie das geht, beschränken wir uns vorerst darauf, das COMMAND BAR-Plugin anzuschließen.

Laden Sie dieses Plugin hier herunter (der im Originalartikel angegebene Link ist tot, also habe ich das Plugin aus dem Internet heruntergeladen und auf wasm.ru gepostet - ca.).

Entpacken Sie anschließend das Plugin und sehen Sie sich den Inhalt des Ordners an, in dem dies geschehen ist:

Zunächst müssen Sie einen Ordner für Plugins erstellen. Ich erstelle es in C:/ und nenne es PLUGINS.

Natürlich können sich Plugins überall befinden, aber ich hoste gerne alles in C. Wie auch immer, jetzt müssen wir OllyDbg so konfigurieren, dass es diesen Ordner als Speicherort aller Plugins erkennt.

Gehen Sie dazu zu OPTIONEN->DARSTELLUNG.

Öffnen Sie im folgenden Fenster die Registerkarte VERZEICHNISSE.

Wir sehen, dass der Pfad zu den Plugins das Verzeichnis ist, in dem sich OllyDbg.exe selbst befindet, und wir könnten die Plugins dort ablegen, aber ich möchte sie getrennt halten, und dann auf PLAGIN-PFAD->BROWSE klicken, um den von uns erstellten Ordner zu finden .

Wählen Sie den Ordner PLUGINS aus und speichern Sie die Änderungen.

Das heißt, Sie müssen Ollie neu starten, damit es den neuen Ordner mit Plugins erkennt, aber zuerst müssen Sie das zuletzt heruntergeladene Plugin dorthin kopieren.

Kopieren Sie den gesamten Inhalt des Archivs in den Ordner PLUGINS.

Jetzt befinden sich alle Dateien des Plugins „Command Bar“ im Ordner PLUGINS, und der Rest sollte auch dort abgelegt werden (oft kann man nicht alle Dateien im Archiv kopieren, sondern nur die DLL).

Schließen Sie nun OllyDbg, falls es noch geschlossen war, und starten Sie es erneut. Wir sehen, dass die BEFEHLSLEISTE und ihre Optionen im Menü PLUGINS erschienen sind.

Unten in OllyDbg sehen wir die installierte BEFEHLSLEISTE.

Dies ist ein Textfeld zur Eingabe von Befehlen, die für uns in vielen Fällen nützlich sein können, und später werden wir ihre Verwendung sehen, aber jetzt ist es wichtig zu lernen, wie man Plugins verbindet.

Um PLUGIN zu deinstallieren, löschen Sie einfach die entsprechende DLL aus dem Ordner PLUGINS und starten Sie OllyDbg neu. Das Plugin verschwindet dann. Es ist jedoch ratsam, die BEFEHLSLEISTE immer eingeschaltet zu lassen.

Öffnen wir CrueHeads Crack erneut in OllyDbg.

Die nützlichsten Schlüssel in OllyDbg sind:

F7: Führt eine Codezeile aus (wenn wir uns auf CALL befinden, gehen Sie in den aufgerufenen Codeabschnitt)

F8: Führt eine Codezeile aus (wenn wir uns in einem CALL befinden, führt es den Aufruf einfach aus, ohne hineinzugehen, und geht zur nächsten Zeile nach dem CALL über).

Diese beiden Arten der manuellen Nachverfolgung sind sehr unterschiedlich und wir werden später darüber nachdenken, in welchen Fällen sie jeweils verwendet werden.

F2: Setzt einen normalen Haltepunkt auf der markierten Linie. Um diesen Haltepunkt zu entfernen, drücken Sie erneut F2.

Zum Beispiel:

Wir wollen den Installationspunkt auf Position 40101A setzen, also markieren wir diese Linie mit der Maus.

Mit einem Mausklick wird es markiert und wird wie im Bild grau. Drücken Sie dann F2.

Wir sehen, dass die entsprechende Position in der ersten Spalte rot wird, was darauf hinweist, dass hier ein Haltepunkt vorhanden ist. Durch erneutes Drücken von F2 können Sie es entfernen.

F9: Führt ein Programm aus, das so lange ausgeführt wird, bis es einen Haltepunkt erreicht, eine Ausnahme auslöst oder die Ausführung aus irgendeinem Grund einfach stoppt. Wenn das Programm ausgeführt wird, wird das Wort RUNNING in der unteren rechten Ecke von OllyDbg angezeigt.

Wenn wir CrueHeads Crackme starten, werden wir Folgendes sehen:

Um die Ausführung des Programms vorübergehend zu stoppen, drücken Sie F12 oder DEBUG->PAUSE.

Wir sehen, dass OllyDbg das Wort PAUSED anzeigt. Sie können das Programm weiter ausführen, indem Sie F9 oder DEBUG->RUN drücken.

Um das zu debuggende Programm zu schließen, wählen Sie DEBUG->CLOSE.

Dies war ein kurzer Überblick über OllyDbg, und wir werden seine vielen Optionen und Fähigkeiten in den folgenden Kapiteln weiter ausführlicher untersuchen. Die Hauptsache ist, dass Sie das Programm herunterladen, es konfigurieren, sich noch einmal alles ansehen, was in diesem Tutorial besprochen wurde, auch das Plugin anschließen, CrueHeads Crack starten und stoppen und versuchen, Haltepunkte zu setzen, damit im nächsten Kapitel all diese Dinge nicht mehr funktionieren Probleme bereiten. Ricardo Narvaja, trans. Aquila

OllyDbg ist ein 32-Bit-Debugger, der sich großer Beliebtheit erfreut und von Anfängern, die Assembler lernen, sowie von grimmigen Hackern für eine Idee und von Schurken verwendet wird, um neue Stämme von Computerviren zu entwickeln. Dies ist ein praktisches und multifunktionales Tool zum Analysieren und Ändern von in Maschinencode kompilierten Dateien. Mit OllyDbg ist es möglich, ein Programm zu hacken und umgekehrt – um den Schutz vor Software-Hacking zu verbessern. Wenn der Quellcode nicht verfügbar ist, kann das Programm im laufenden Betrieb zerlegt und analysiert werden. Der im Debugger implementierte Code-Analysator erkennt Prozeduren, Konstanten, Schleifen, Tabellen, Texte und Verzweigungen.

Debugger-Disassembler

OllyDbg erkennt und dekodiert über 2000 C-Sprach- und Windows-API-Funktionen. Der Debugger unterstützt den Anschluss zusätzlicher Plugins, führt eine heuristische Analyse des Stapels durch, arbeitet im schrittweisen Debugging-Modus, unterstützt Hex, ASCII, Unicode, 16/32-Bit-Ganzzahlen und 32/64/80-Bit-Gleitkommazahlen. Ein Debugger mit einer einfachen und intuitiven Benutzeroberfläche, Code-Hervorhebung, großartigen Funktionen und Open Source.

Verteilungszusammensetzung

Katalog OllyDbg110 – Distribution, heruntergeladen von der Programm-Website

Katalog OllyDbgHelpRus – offizielle Hilfe für den OllyDbg-Debugger, übersetzt ins Russische. Entnommen von der Website http://cracklab.ru/


2. Beschreibung des Programms (entnommen aus der Hilfe zum Programm)

OllyDbg- 32-Bit-Debugger, der auf Assembler-Ebene analysiert, mit einer intuitiven Benutzeroberfläche. Besonders nützlich, wenn der Quellcode nicht verfügbar ist oder Sie Probleme mit dem Compiler haben.

Anforderungen. Funktioniert unter Windows 95, 98, ME, NT oder 2000, XP (nicht 100 % getestet) auf jedem Computer der Pentium-Klasse, aber für bequemes Debuggen benötigen Sie mindestens einen 300-MHz-Prozessor. OllyDbg ist speicherintensiv. Wenn Sie zusätzliche Gadgets (Plugins) verwenden möchten, empfehle ich 128 MB oder mehr RAM.

Unterstützte Prozessoren: OllyDbg unterstützt alle 80x86, Pentium, MMX, 3DNow! , einschließlich Athlon, SSE-Befehle und verwandte Datenformate. SSE2 wird jedoch nicht unterstützt.

Aufstellen. Mehr als 100 Optionen steuern die Funktionsweise des Programms.

Datenformate. Dump-Fenster zeigen Daten in allen gängigen Formaten an: HEX, ASCII, UNICODE, 16-Bit- und 32-Bit-Ganzzahl/Nicht-Ganzzahl/Hex, 32/64/80-Bit-Gleitkomma, Adressierung, Disassemblierung (MASM, IDEAL oder HLA) , PE-Header oder Stream eines Datenblocks.

Referenz. Diese Datei enthält die grundlegenden Informationen, die zum Verständnis und zur Verwendung von Ollydbg erforderlich sind. Wenn Sie über die Windows-API-Hilfe verfügen (win32.hlp, aus Urheberrechtsgründen nicht enthalten), können Sie diese anhängen und erhalten sofortige Hilfe zu Systemaufrufen.

Anwendung starten. Sie können die ausführbare Datei in der Befehlszeile auswählen, aus einem Menü auswählen, die Datei in Ollydbg ziehen, das letzte Programm, das Sie debuggt haben, neu starten oder einer bereits laufenden Anwendung beitreten. Ollydbg unterstützt das laufende Debuggen. Keine Installation erforderlich, Sie können Ollydbg von einer Diskette ausführen!

DebuggingDLL. Mit Ollydbg können Sie Dynamic Link Libraries (DLLs) debuggen. Ollydbg startet automatisch eine kleine ausführbare Datei, in die es die Bibliothek lädt und Ihnen ermöglicht, sie zum Exportieren aufzurufen.

Debugging-Dateien mit Debugging-Informationen. Ollydbg liest Debugging-Informationen in den Formaten MICROSOFT und Borland. Zu diesen Informationen gehören Quellcode und Namen von Funktionen, Labels, globalen und statischen Variablen. Die Unterstützung für dynamische (Stapel-)Variablen und Strukturen ist sehr begrenzt.

Code-Hervorhebung. Der Disassembler kann verschiedene Arten von Anweisungen (Sprünge, bedingte Sprünge, Stapelschieben und -knallen, Prozeduraufrufe, Rückgaben, privilegiert und ungültig) und verschiedene Operanden (allgemein, FPU/SSE oder Segment-/Systemregister, Speicheroperanden auf dem Stapel oder in) hervorheben anderer Speicher, Konstanten). Sie können auch benutzerdefinierte Beleuchtungsmuster erstellen.

Streams. Ollydbg ist in der Lage, Multithread-Anwendungen zu debuggen. Sie können von einem Thread zum anderen wechseln, Threads anhalten, fortsetzen, beenden oder ihre Priorität ändern. Das Threads-Fenster zeigt Fehler für jeden Thread an (z. B. Rückruf an GetLastError).

Analyse. Der Analysator ist einer der wichtigsten Teile von OllyDbg. Es erkennt Prozeduren, Schleifen, Schalter, Tabellen, in Code eingebettete Konstanten und Zeichenfolgen, komplexe Konstrukte, API-Funktionsaufrufe, Anzahl der Funktionsparameter, Importabschnitte usw. Durch die Analyse wird Binärcode besser lesbar, einfacher zu debuggen und die Wahrscheinlichkeit von Fehlinterpretationen und Fehlern verringert. Es ist nicht Compiler-spezifisch und funktioniert mit jedem PE-Programm gleich gut. Sie können Ihre Analyseergebnisse verbessern, indem Sie Hinweise festlegen.

Objektscanner. OllyDbg scannt Objektmodule (Dateien) oder Bibliotheken (sowohl im OMF- als auch im COFF-Format), extrahiert Code, segmentiert ihn und findet ihn im zu debuggenden Programm.

Scanner für importierte Bibliotheken. Einige DLLs exportieren ihre Symbole nur als Ordnungszahlen, die für das menschliche Auge nicht gut lesbar sind. Wenn Sie über die entsprechende Importbibliothek verfügen, übersetzt OllyDbg Ordinalzahlen zurück in symbolische Namen.

Volle UNICODE-Unterstützung. Fast alle für ASCII-Strings verfügbaren Operationen sind auch für UNICODE-Strings verfügbar und umgekehrt.

Namen. OllyDbg zeigt alle importierten und exportierten Symbole und Namen aus Debug-Informationen und in den Formaten Microsoft und Borland. Mit dem Object Scanner können Sie Bibliotheksfunktionen erkennen. Sie können Ihre eigenen Werte und Kommentare hinzufügen. Wenn die Funktionen in einigen DLLs als Ordnungszahlen exportiert werden, können Sie die Importbibliothek anhängen und die ursprünglichen Namen wiederherstellen. OllyDbg kennt auch die symbolischen Namen vieler Konstanten, wie Meldungsboxen, Codefehler oder Bitfelder, und dekodiert sie in bekannte Funktionsaufrufe.

Bekannte Funktionen. OllyDbg erkennt mehr als 2.300 häufig verwendete C- und API-Windows-Funktionen anhand ihres Namens und dekodiert ihre Parameter. Sie können eigene Beschreibungen hinzufügen oder eine bestimmte Dekodierung zuweisen. Sie können einen Schreibhaltepunkt für eine bekannte Funktion festlegen und die Parameter in eine Datei schreiben.

Herausforderungen. OllyDbg kann die Anwendungsausführung beim Zugriff auf den Stack abbrechen, selbst wenn keine Debugging-Informationen verfügbar sind und Routinen nicht standardmäßige Einleitungen und Beendigungen verwenden.

Stapel. Im Stack-Fenster verwendet OllyDbg Heuristiken, um Rücksprungadressen und Datensatzstrukturen zu erkennen. Beachten Sie jedoch, dass es sich möglicherweise um Überbleibsel früherer Anrufe handelt. Wenn das Programm bei einer bekannten Funktion angehalten wird, dekodiert das Stapelfenster die tatsächlichen Parameter.

SEHchains. Der Stack verfolgt die Kette der SE-Handles und zeigt sie an. Die komplette Kette ist in einem separaten Fenster verfügbar.

Suchen. Viele Möglichkeiten! Suche nach einem Befehl (exakt oder ungenau) oder einer Befehlsfolge, nach Konstanten, einem Binär- oder Textstring (nicht unbedingt kontinuierlich), nach allen Befehlen, die auf eine Adresse, Konstante oder ein Adressintervall verweisen, nach allen Sprüngen zu einer ausgewählten Stelle, z alle Funktionen, die eine Prozedur oder was auch immer diese Prozedur aufruft, für alle referenzierten Textzeichenfolgen, für alle Aufrufe verschiedener Module, für Namen, für maskierte Binärsequenzen in der gesamten Speicherzuordnung. Wenn mehrere Standorte gefunden werden, können Sie schnell zwischen ihnen wechseln.

Fenster. OllyDbg listet alle von der zu debuggenden Anwendung erstellten Fenster auf und setzt Haltepunkte für Fenster, eine Klasse oder sogar eine ausgewählte Nachricht oder Nachrichtengruppe.

Ressourcen. Wenn eine Windows-API-Funktion auf eine Zeichenfolgenressource verweist, ruft OllyDbg diese ab und zeigt sie an. Die Unterstützung für andere Typen ist auf die Liste der angehängten Ressourcen, den Dump und die Binärbearbeitung beschränkt.

Checkpoints (Haltepunkte). OllyDbg unterstützt alle üblichen Arten von Haltepunkten: einfache Interrupts, bedingte Interrupts, Interrupts, die Informationen (z. B. Funktionsparameter) in ein Protokoll schreiben, Schreib- und Speicherzugriffshaltepunkte, Hardware-Haltepunkte (nur ME/NT/2000). Als letzten Ausweg für das schrittweise Debuggen kann für jede Anweisung im Modul ein INT3-Haltepunkt festgelegt werden. Auf einem 500-MHz-Prozessor unter Windows NT kann OllyDbg bis zu 5000 Interrupts pro Sekunde verarbeiten.

Beobachter und Inspektoren. Beobachter sind Ausdrücke, die jedes Mal ausgewertet werden, wenn das Programm angehalten wird. Sie können Register, Konstanten, Adressausdrücke, boolesche und algebraische Operationen beliebiger Komplexität verwenden. Sie können ASCII- und UNICODE-Zeichenfolgen vergleichen. Inspektoren sind Beobachter, die bis zu 2 Indizes enthalten und als zweidimensionale Tabelle dargestellt werden können, die die Dekodierung von Arrays und Strukturen ermöglicht.

Umgehen des dynamischen Speichers. Auf Win95-basierten Systemen listet OllyDbg alle zugewiesenen Heap-Blöcke auf.

Griffe. Auf NT-basierten Systemen listet OllyDbg alle System-Handles auf, die zu der zu debuggenden Anwendung gehören.

Leistung. Sie können das Programm Schritt für Schritt ausführen, Unterprogramme eingeben oder diese in einem Schritt ausführen. Sie können das Programm bis zur nächsten Rückkehr oder an einem bestimmten Ort ausführen oder die Ausführung animieren. Während die Anwendung ausgeführt wird, haben Sie weiterhin die volle Kontrolle darüber und können den Speicher anzeigen, Haltepunkte festlegen und sogar Code im laufenden Betrieb ändern. Sie können das zu debuggende Programm jederzeit anhalten oder neu starten.

Schritt-für-Schritt-Debugging. Das schrittweise Debugging zeigt Ihnen, welche Befehle oder Prozeduren bisher ausgeführt wurden, sodass Sie alle Zweige Ihres Codes überprüfen können. Beim schrittweisen Debuggen wird für jeden ausgewählten Befehl ein Haltepunkt festgelegt und dieser entfernt, wenn der Befehl erreicht wird.

Direkte Ablaufverfolgung (Trace ausführen). Trace führt das Programm Schritt für Schritt aus und zeichnet seine Ausführung in einem großen Ringpuffer auf. Dieses Protokoll enthält alle Register (außer SSE), Thread-Flags und Fehler, Nachrichten und dekodierte Parameter bekannter Funktionen. Sie können die ursprünglichen Befehle speichern, was das Debuggen von sich selbst änderndem Code erleichtert. Sie können eine Bedingung zum Stoppen des Debuggens definieren, indem Sie einen Adressbereich, einen Ausdruck oder einen Befehl eingeben. Sie können Debug-Informationen in einer Datei speichern und zwei unabhängige Ausführungen des Programms vergleichen. Mit der Ablaufverfolgung können Sie den Ausführungsverlauf von Millionen von Befehlen im Detail rückwärts analysieren.

Profilierung. Der Profiler berechnet, wie oft ein bestimmter Befehl im Trace-Puffer erscheint. Mit einem Profiler finden Sie heraus, welcher Teil des Codes zur Ausführung am längsten benötigt.

Korrekturen vornehmen. Der eingebaute Assembler wählt automatisch den kürzestmöglichen Code aus. Der Binäreditor zeigt Daten gleichzeitig in ASCII-, UNICODE- und Hexadezimalform an. Das gute alte Kopieren und Einfügen ist ebenfalls verfügbar. Mit der automatischen Sicherung können Sie Änderungen rückgängig machen. Sie können Änderungen direkt in die ausführbare Datei kopieren, OllyDbg korrigiert sogar installierte Fehler. OllyDbg merkt sich alle Programmkorrekturen aus früheren Debugging-Sitzungen. Sie können sie mit wenigen Tastendrücken anwenden oder entfernen.

Selbstextrahierende Dateien. Beim Debuggen einer SFX-Datei möchten Sie normalerweise den Archiver überspringen und anhalten, wenn Sie das Programm direkt aufrufen. OllyDbg führt das SFX-Debugging durch, indem es versucht, die tatsächliche Eingabe zu finden. Das SFX-Debugging schlägt bei geschützten Archiven normalerweise fehl. Sobald die Eingabe gefunden (oder definiert) ist, kann OllyDbg den Entpacker schneller und zuverlässiger ausführen.

Ergänzungen zum Programm. Sie können OllyDbg ein Plugin hinzufügen oder Ihr eigenes Plugin für das Programm schreiben. Die Programm-Add-Ons greifen auf alle wichtigen Datenstrukturen zu, fügen Menüs und Verknüpfungen zu bestehenden OllyDbg-Fenstern hinzu und nutzen mehr als 100 zusätzliche API-Funktionen. Die API-Plugins sind gut dokumentiert. Die Standardverteilung enthält zwei Add-ons zum Programm: Command Line und Bookmarks.

UDD. OllyDbg speichert alle programm- oder modulbezogenen Informationen in einer einzelnen Datei und stellt sie wieder her, wenn das Modul erneut geladen wird. Zu diesen Informationen gehören Beschriftungen, Kommentare, Haltepunkte, Beobachter, Analysedaten, Bedingungen usw.

Aufstellen. Sie können benutzerdefinierte Schriftarten, Farben und Beleuchtungsschemata definieren.

Und vieles mehr! Diese Liste ist keineswegs vollständig; es gibt viele Funktionen, die OllyDbg zu einem praktischen und unterhaltsamen Debugger machen.

3. Programm-Website

Hallo an alle. Heute werde ich OllyDebugger beschreiben. OllyDebugger (im Folgenden Olly) ist ein hervorragender Debugger (Ring-3). Die Popularität dieses Debuggers wächst sprunghaft :). Für Einsteiger ist dieser Debugger genau das Richtige; für Profis, die sich damit bestens auskennen, ist er ein unverzichtbares Werkzeug. In diesem Artikel wird alles beschrieben, was ich in Olly tun kann.

1. Was ist Olly Debugger?

Aus der Referenz entnommen: Olly ist ein 32-Bit-Debugger auf Assembler-Ebene mit einer intuitiven Benutzeroberfläche. Besonders nützlich, wenn der Quellcode nicht verfügbar ist oder Sie Probleme mit Ihrem Compiler haben.

Unterstützte Prozessoren. Olly unterstützt alle 80x86-, Pentium-, MMX- und 3DNow!-Formate, einschließlich Athlon-Erweiterungen, SSE-Befehle und verwandte Datenformate.

Datenformate. Dump-Fenster zeigen Daten in allen gängigen Formaten an: Hexadezimal, ASCII, Unicode, 16- und 32-Bit-Ganzzahlen mit/ohne Vorzeichen/Hexadezimalzahl, Disassembler (MASM, IDEAL oder HLA).

Start. Sie können eine ausführbare Datei in der Befehlszeile definieren, aus einem Menü auswählen, eine Datei in Olly ziehen, das letzte Programm, das Sie debuggt haben, neu starten oder eine Verbindung zu einem bereits laufenden Prozess herstellen. Keine Installation erforderlich, Sie können Olly von einer Diskette ausführen!

Debuggen von DLLs. Mit Olly können Sie eigenständige Dynamic Link Libraries (DLLs) debuggen. Olly startet automatisch eine kleine ausführbare Datei, die die Bibliothek lädt und es Ihnen ermöglicht, ihre exportierten Funktionen aufzurufen.

Analyse. Der Analysator ist einer der wichtigsten Teile von Olly. Es erkennt in Code eingebettete Prozeduren, Schleifen, Tabellen, Konstanten und Zeichenfolgen, knifflige Konstrukte, API-Funktionsanforderungen, Funktionsparameternummern, Importabschnitte usw. Durch die Analyse wird doppelter Code viel besser lesbar, das Debuggen erleichtert und die Wahrscheinlichkeit von Abstürzen verringert. Der Analysator ist nicht Compiler-orientiert und funktioniert mit allen Windows-Programmen gleich gut.

Objektscanner. Olly scannt Objektdateien oder Bibliotheken (OMF- UND COFF-Formate), extrahiert Code daraus, segmentiert sie und findet sie im zu debuggenden Programm.

Volle Unicode-Unterstützung. Fast alle für ASCII-Strings verfügbaren Operationen sind auch für Unicode-Strings verfügbar und umgekehrt.

2. Hotkeys

Mit den „Hotkeys“ möchte ich die Geschichte beginnen, weil... Ohne sie müssen Sie viel Zeit mit dem Durchsuchen des Menüs verbringen und der Debugger verliert sofort seinen Komfort. Beginnen wir mit dem Bedienfeld:

Die erste Schaltfläche dient zum Öffnen der Datei (horizontale Taste F3)
Die zweite Schaltfläche dient zum Neustarten der Datei (horizontale Taste Strg+F2).
Die dritte Schaltfläche dient zum Schließen der Datei (horizontale Taste Alt+F2).
Die vierte Taste dient zum Starten des Programms (horizontale Taste F9)
Die fünfte Schaltfläche dient zum Anhalten des Starts (horizontale Taste F12).
Die sechste Schaltfläche dient zum Tracen mit Eingabe in Unterprogramme (horizontale Taste F7)
Die siebte Schaltfläche dient zum Verfolgen ohne Eingabe von Unterprogrammen (horizontale Taste F8).
Die achte Schaltfläche dient zum Starten der automatischen Ablaufverfolgung durch Eingabe von Unterprogrammen (horizontale Taste Strg+F11).
Die neunte Schaltfläche dient zum Starten der automatischen Ablaufverfolgung ohne Eingabe von Unterprogrammen (horizontale Taste Strg+F12).
Mit der zehnten Schaltfläche können Sie das Programm ausführen, bevor Sie das Unterprogramm verlassen (horizontale Taste Strg + F9).
Elfte Schaltfläche – zur Adresse gehen (horizontale Taste Strg+G)

Alle anderen Tasten auf dem Bedienfeld werden später besprochen.

Erforderliche Befehle:
Strg+A – Analysieren Sie den Code
Strg+C – Daten kopieren
Strg+F7 – Aktivieren Sie den Modus, in dem der Code so ausgeführt wird, als ob Sie die F7-Taste gedrückt und nicht losgelassen hätten
Strg+F8 – Aktivieren Sie den Modus, in dem der Code so ausgeführt wird, als ob Sie die F8-Taste gedrückt und nicht losgelassen hätten
Umschalt+F8 – Programmverfolgung fortsetzen, auch wenn eine Ausnahme auftritt
Umschalt+F9 – Führen Sie das Programm auch dann weiter aus, wenn eine Ausnahme auftritt
Strg+T – Auto-Tracer-Einstellungen
Strg+F11 – Automatische Ablaufverfolgung mit der Eingabe von Unterprogrammen starten
Strg+F12 – Automatische Ablaufverfolgung starten, ohne Unterprogramme einzugeben
F2 – Platzieren Sie einen Haltepunkt auf der ausgewählten Zeile

3. Plugins

Sie waren wahrscheinlich empört darüber, warum ich über alles rede, aber nicht über den Debugger selbst. Als Antwort werde ich sagen: „Ich werde sehen, wie Sie das Programm debuggen, zumindest ohne das CommandBar-Plugin.“ Ja, es ist tatsächlich viel schwieriger, ein Programm ohne Plugins zu debuggen. Jetzt werde ich eine Liste der Plugins geben, die ich installiert habe, und nebenbei erklären, was was ist:

1. IsDebuggerPresent – ​​​​Versteckt den Debugger vor der Erkennung mithilfe der IsDebuggerPresent-Funktion.
2. Debugger ausblenden – Verbirgt den Debugger vor der Erkennung mithilfe der IsDebuggerPresent-Funktion.
3. Olly Script – ermöglicht Ihnen das Schreiben von Skripten, die beim Debuggen helfen. Ich verwende dieses Plugin nicht, weil... Ich glaube nicht, dass es notwendig ist, das Debuggen zu automatisieren.
4. Olly Dump – ermöglicht es Ihnen, den zu debuggenden Prozess zu sichern und seinen Import sofort wiederherzustellen. Super Plugin. Ich rate jedem.
5. Befehlsleiste – ermöglicht es Ihnen, Wunder zu bewirken. Im Debugger erscheint eine Zeile, in der Sie sehr intelligente Befehle eingeben können. Meiner Meinung nach ist das Debuggen ohne dieses Plugin nicht möglich :). Ich habe die Bescheinigung des Plagiators übersetzt und werde sie zusätzlich Nr. 1 zur Verfügung stellen.

4. Erste Bekanntschaft

Wie gesagt, die Arbeit mit dem Debugger ist sehr einfach. Hier ist eine Standardansicht des Hauptfensters mit dem zum Debuggen geladenen Programm:

Ich sagte, es sei ein Standardfenster, ich habe gelogen, ich habe die Farben geändert :). Jetzt ist alles in Ordnung. In der Reihenfolge der Beschreibung: Hauptfenster, Registerfenster, Stapelbereich, Menübereich.

Hauptfenster: In diesem Fenster findet das eigentliche Debuggen statt. Alle Anleitungen werden in zerlegter Form geliefert. Sie können die Indexzeile mit dem Cursor verschieben. Über die Indexzeile können Sie auswählen, welche Daten kopiert werden sollen (hier ist alles viel einfacher als in SoftIce. Ausgewählt. Strg+C, an die richtige Stelle gegangen Strg+V), welchen Befehl Sie ändern möchten, wo ein Haltepunkt gesetzt werden soll usw . Die Adresse, die als nächstes ausgeführt werden soll, ist seitlich hervorgehoben. Zwischen der Spalte „Adressen“ und der Spalte „Disassemblierte Auflistung“ befindet sich eine Spalte mit Maschinencodeanweisungen. Die allerletzte Spalte enthält Kommentare.

Registerfenster: Das Registerfenster zeigt alle 32-Bit-Register, Flag-Register und verschiedene andere Register an. Um ein Register zu ändern, müssen Sie zweimal auf seinen Wert klicken und einen neuen Wert eingeben. Sie können die Groß-/Kleinschreibung einer Flagge umkehren, indem Sie auf eine davon doppelklicken.

Stapelbereich: Im Stapelbereich können Sie die benötigten Bytes im Speicher ändern, Haltepunkte festlegen und nach den richtigen Registrierungen suchen. Codes usw.

Menüleiste: Die Menüleiste wird in einem größeren Kapitel behandelt, weil... dieses Thema ist sehr wichtig.

5. Kennenlernen des Hauptmenüs

Beginnen wir mit einem Menü namens Datei. Dieses Menü verfügt über Registerkarten: Öffnen, Anhängen, Beenden. Öffnen – eine Datei zum Debuggen öffnen, Anhängen – einem bereits laufenden Prozess zum Debuggen beitreten, Beenden – beenden.

Sicht
Protokoll – Protokoll über Dateidownloads usw. anzeigen. (Hotkey: Alt+L)
Ausführbare Module – Zeigen Sie alle Module an, die die zu debuggende Anwendung verwendet. (Hotkey: Alt+E)
Speicher – Speicherkarte anzeigen. Hier ist sein ungefähres Aussehen:

Die erste Spalte ist die Adresse, an die verschiedene Abschnitte der Datei, DLL-Bibliotheken, geladen werden. Die zweite Spalte gibt die Speichergröße des Abschnitts an. Die dritte Spalte enthält normalerweise den Namen des Moduls. Die vierte Spalte enthält die Namen der Abschnitte. Die fünfte Spalte enthält den Inhalt des Abschnitts. Alle anderen Spalten sind nicht wichtig, weil Sie spiegeln die Attribute von Abschnitten im Speicher wider. (Hotkey: Alt+M)

Threads – Alle Programmthreads anzeigen, einfrieren, p`glnpnghr| Sie, ändern Sie ihre Priorität, töten Sie sie.
Windows – Zeigen Sie bis zu x... Informationen zu Fenstern, Klassen usw. an. vom Programm verwendet.
Griffe – Griffe anzeigen.
CPU – Öffnen Sie das Hauptfenster. (Hotkey: Alt+C)
SEH-Kette – Schauen Sie, setzen Sie einen Haltepunkt auf alle angekündigten Sehs.
Patches – Sehen Sie sich eine Liste aller Änderungen an, die Sie am Programm vorgenommen haben, machen Sie alle Änderungen rückgängig usw. (Hotkey: Strg+P)
Aufrufstapel – Zeigt alle Aufrufe an, die Code im Stapel ausführen. (Hotkey: Alt+K)
Haltepunkte – Alle Haltepunkte anzeigen, deaktivieren und löschen. (Hotkey: Alt+B)
Trace ausführen – Sehen Sie sich das Trace-Protokoll an.
Datei – Hexadezimaler Dateieditor.

Debuggen
Ausführen – Starten Sie die Anwendung.
Pause – Anwendungsausführung anhalten.
Neu starten – Starten Sie das zu debuggende Programm neu.
Schließen – Schließen des zu debuggenden Programms.
Einsteigen – Entspricht F7.
Übersteigen – Entspricht F8.
Animieren in – Entspricht dem ständigen Drücken von F7.
Animieren über – Entspricht dem ständigen Drücken von F8.
Bis zur Rückkehr ausführen – Führen Sie das Programm aus, bevor Sie das Unterprogramm verlassen.
Trace into – Automatisches Tracing mit Eintritt in Unterprogramme.
Trace over – Automatisches Tracing ohne Eingabe von Unterprogrammen.
Bedingung festlegen – Weisen Sie eine Bedingung für die automatische Ablaufverfolgung zu.
Laufverfolgung schließen – Stoppt die automatische Verfolgung.
Hardware-Haltepunkte – Hardware-Haltepunkte anzeigen.

Alles andere in diesem Menü ist nicht wichtig.

Optionen
Aussehen – Einstellungen der Debugger-Schnittstelle. Ich werde mich nicht mit diesen Einstellungen befassen, weil... Sie sind nicht verpflichtend und können von Ihnen selbst ermittelt werden.
Debugging-Optionen (horizontale Taste – Alt+O) – Debugger-Einstellungen. Das ist das Interessanteste; ich werde diesem Menüpunkt das nächste Kapitel widmen.
Just-in-Time-Debugging – In diesen Einstellungen können Sie Olly als Debugger zuweisen, der gestartet wird, wenn eine Anwendung einen schwerwiegenden Fehler verursacht.
Zum Explorer hinzufügen – Fügen Sie dem Explorer-Kontextmenü ein Element zum Debuggen des Programms hinzu.

6. Hauptprogrammeinstellungen

Ich werde nur die wichtigsten Optionen erläutern.

Sicherheit
Warnen, wenn Haltepunkt außerhalb des Codeabschnitts liegt – Melden Sie, wenn Sie einen Haltepunkt außerhalb des Codeabschnitts platzieren möchten. Diese Option sollte natürlich nicht ausgewählt werden.
Beim Beenden des aktiven Prozesses warnen – Fragen Sie: „Möchten Sie den Prozess wirklich beenden?“ Diese Option muss ausgewählt werden.
Warnen, wenn Sie kein Administrator sind – Um Sie zu belästigen, wenn Sie kein Administrator sind. Diese Option ist für Sadomasochismus :)

Debuggen
Beim Verfolgen des debuggten Prozesses hohe Priorität festlegen – Legen Sie beim Verfolgen die Priorität b(qnjhi) für die Anwendung fest. Diese Option sollte „nach Geschmack“ ausgewählt werden (ich habe sie ausgewählt).

Veranstaltungen
Erste Pause machen um – Machen Sie den ersten Halt um. In diesem Fall werden drei Optionen angeboten: Systemhaltepunkt, Einstiegspunkt zum Hauptmodul, Hauptfenster. Auch hier müssen Sie alle die beste Option auswählen. Ich habe den Einstiegspunkt zum Hauptmodul ausgewählt.
Unterbrechen bei neuer Modul-DLL – Stoppen bei jeder neu geladenen Bibliothek.
Beim Entladen des Moduls unterbrechen – Stoppen beim Entladen von DLL-Bibliotheken aus dem Speicher.
Bei neuem Thread unterbrechen – Stoppen, wenn ein neuer Thread erstellt wird.
Am Fadenende brechen – Stoppen, wenn der Faden endet.

Ausnahmen
Speicherzugriffsverletzungen in KERNEL32 ignorieren – Speicherfehler in Kernel32 ignorieren.
Int3-Unterbrechungen – Hören Sie nicht bei int3-Befehlen auf. Diese Option ist beim Auspacken einiger Protektoren SEHR hilfreich. Weitere Informationen finden Sie in meinem Unboxing-Artikel.

Verfolgen
Größe des Ablaufverfolgungspuffers – Größe des Ablaufverfolgungspuffers. Es ist besser, den Maximalwert einzustellen.
Befehle protokollieren – Führen Sie ein Protokoll über den Betrieb des Tracers. Diese Option verlangsamt die Ablaufverfolgung geringfügig und sollte daher bei Bedarf eingestellt werden.
Verfolgen Sie immer System-DLLs – Verfolgen Sie immer frühere Systembibliotheken. Diese Option muss für alle ausgewählt werden.
Nach der Ausführung bis RET über RET gehen – Mit dieser Option können Sie anhalten, indem Sie Strg+F9 nicht bei RET, sondern nach der Ausführung drücken. Ich finde diese Option sehr praktisch und empfehle Ihnen daher, sie auszuwählen.

SFX
Wenn das Hauptmodul selbstextrahierbar ist – Hier werden wir gebeten, eine von drei Optionen auszuwählen: Am Anfang des Entpackercodes anhalten, Blockweise auf OEP verfolgen, Byteweise auf OEP verfolgen. Nun, was soll ich sagen, Optionen für Trittbrettfahrer. Automatische Suche nach OER! Es stimmt, manchmal erkennt Olly nicht richtig, ob das Programm gepackt ist oder nicht.

Saiten
Nun, hier ist alles klar. Verschiedene Zeichen entschlüsseln.

Adressen
Diese Optionen sind nicht wichtig, weil Sie bestimmen, wie Adressen angezeigt werden.

Befehle
Diese Optionen werden nur für Leute benötigt, die sehr schöne ACM-Einträge wirklich lieben.

Desasmus
Disassembler-Einstellungen. Sie können auf alle Optionen klicken und sehen, wie die ASM-Liste aussehen wird. Alle anderen Einstellungen sind meiner Meinung nach nicht wichtig.

7. Erstes Debuggen

Wir werden Fant0m Crackme 4 debuggen. Sie können es hier herunterladen: http://fant0m.cjb.net/. Aus diesem Crackme werden wir versuchen, die richtige Registrierung zu erhalten. Nummer für Ihren Namen. Laden Sie crackme unter dem Debugger und drücken Sie F9, um es auszuführen. Geben Sie den Namen der Person ein, für die wir dieses Crackme registrieren möchten. Geben Sie ein beliebiges Passwort ein. Jetzt müssen wir einen Haltepunkt festlegen, um den Namen und das Passwort zu lesen. Wechseln Sie zu Olly und schreiben Sie im Befehl qrpnje bpx GetDlgItemTextA . Klicken Sie auf Prüfen. Wir fanden uns sofort in Olly an diesem Ort wieder:

00401217 E8 62010000 ANRUFEN 0040121C 68 00010000 PUSH 100 00401221 68 84314000 PUSH 00403184 00401226 68 E9030000 PUSH 3E9 ; |ControlID = 3E9 (1001.) 0040122B FF75 08 PUSH DWORD PTR SS: ; |hWnd 0040122E E8 4B010000 CALL 00401233 FF75 08 PUSH DWORD PTR SS: 00401236 E8 BE000000 CALL 004012F9 0040123B 83F8 00 CMP EAX, 0 0040123E 74 15 JE SHORT 00401255 00401240 6A 40. PU SH 40 00401242 68 29304000 PUSH 00403029 ; |Title = "Seriennummer prüfen" 00401247 68 60304000 PUSH 00403060 ; |Text = "You got it! Congrats! :)" 0040124C 6A 00 PUSH 0 ; |hOwner = NULL 0040124E E8 49010000 CALL !} >

Es ist sofort klar, dass im Verfahren an der Adresse 004012F9 eine Registrierungsprüfung durchgeführt wird. Wir erreichen seinen Aufruf über F8 und geben ihn über F7 ein. Was wir sehen:

004012F9 55 PUSH EBP 004012FA 8BEC MOV EBP, ESP 004012FC 56 PUSH ESI 004012FD 57 PUSH EDI 004012FE 8D3584304000 LEA ESI, DWORD PTR DS: 00401304 8D3D843240 00 LEA EDI , DWORD PTR DS: 0040130A 33C0 XOR EAX, EAX 0040130C 33C9 XOR ECX, ECX 0040130E B31A MOV BL, 1A 00401310 803E00 CMP BYTE PTR DS:, 0 00401313 7415 JE SHORT 0040132A 00401315 8A06 MOV AL, BYTE PTR DS: 00401317 02C1 ADD AL, CL 00401319 XOR AL, CL 0040131B F6F3 DIV BL 0040131D 66C1E808 SHR AX, 8 00401321 0441 ADD AL, 41 00401323 8807 MOV BYTE PTR DS:, AL 00401325 47 INC EDI 00401326 46 INC ESI 00401327 41 INC ECX 00401328 EBE6 JMP SHORT 00401310 2A C6 0700 MOV BYTE PTR DS:, 0 0040132D 33C0 XOR EAX, EAX 0040132F 83F900 CMP ECX, 0 00401332 741A JE KURZ 0040134E 00401334 6884324000 PUSH 00403284; /String2 = "" 00401339 6884314000 PUSH 00403184 ; |String1 = "qwerty" 0040133E E8A1000000 CALL 00401343 83F800 CMP EAX, 0 00401346 7404 JE SHORT 0040134C 00401348 33C0 0134E 5F POP EDI 0040134F 5E POP ESI 00401350 C9 VERLASSEN 00401351 C20400 RETN 4
Aus diesem Code geht hervor, dass bei der Adresse 0040133E Ihr Code mit dem richtigen verglichen wird. Platzieren Sie an dieser Adresse einen Haltepunkt und drücken Sie F9. Der Kommentar String2 = „“ ändert sich in etwa wie folgt: String2 = „ODMZAMHN“. Für den Ort ODMZAMHN haben Sie also Ihre Registrierung. Code für Ihren Namen. Drücken Sie F9, geben Sie den richtigen Code ein, drücken Sie Prüfen, entfernen Sie alle Haltepunkte, drücken Sie F9 und freuen Sie sich.

Anhang Nr. 1

Hilfe zur Befehlsleiste. Erläuterung der Befehle der Befehlsleiste. Alle Befehle, die ich für unnötig hielt, wurden aus dieser Liste entfernt.

Ausdrücke
CALC [Ausdruck] – Berechnen Sie den Wert eines Ausdrucks

Disassembler
AT [Ausdruck] – Gehe zur Adresse im Disassembler
FOLLOW [by expression] – Gehen Sie zur Adresse im Disassembler
ORIG – Gehe zur aktuellen Adresse (EIP)
* - Gehe zur aktuellen Adresse (EIP)

Entsorgen und stapeln
D [Ausdruck] – Gehe zur Adresse im Dump
DUMP [Ausdruck] – Gehen Sie zur Adresse im Dump
DA [Ausdruck] – Dump im Assembler-Format
DB [Ausdruck] – Dump im Hexadezimalformat
DC [Ausdruck] – Dump in ASCII-Kodierung
DD [Ausdruck] – Als Adressen ausgeben (Stapelformat)
DU [Ausdruck] – Dump in UNICODE-Kodierung
DW [Ausdruck] – Dump im hexadezimalen Wortformat
STK [Ausdruck] – Gehe zur Adresse im Stapel

Übertragen
A [Ausdruck] [, Befehl] – Adresse zerlegen

Tags und Kommentare
L-Ausdruck, Etikett – Ordnet einer Adresse ein symbolisches Etikett zu
C-Ausdruck, Kommentar – Legt einen Kommentar für eine Adresse fest

Haltepunkte
BP [Ausdruck] [,Bedingung] – Haltepunkt festlegen
BPX [Funktionsname] – Setzt Haltepunkte für alle Anweisungen im Modul, die [Funktionsname] aufrufen.
BC [Adresse] – Löschen Sie einen Kontrollpunkt an der Adresse
MR expression1 [,expression2] – Setzt einen Haltepunkt im Speicher für den Zugriff auf einen bestimmten Bereich
MBT expression1 [, expression2] – Setzt einen Haltepunkt im Speicher, um in einen bestimmten Bereich zu schreiben
MD – Haltepunkt aus dem Speicher löschen
HR [Adresse] – Setzen Sie den Hardware-Haltepunkt auf ein Byte pro Zugriff auf die Adresse
HW [Adresse] – Setzen Sie den Hardware-Haltepunkt auf ein Byte pro Schreibvorgang an der Adresse
HE [Adresse] – Legen Sie einen Hardware-Haltepunkt fest, um einen Befehl an der Adresse auszuführen
HD [Haltepunktnummer] – Hardware-Haltepunktnummer löschen

Trace-Befehle
STOP – Verfolgung anhalten
PAUSE – Pausieren Sie die Ablaufverfolgung
RUN – Führen Sie das Programm aus
G [Adresse] – An Adresse ausführen
GE – An Adresse ausführen
S – Entspricht F7
SI – Entspricht F7
SO – Entspricht F8
TR – Führen Sie das Programm aus, bis das Unterprogramm beendet wird

OllyDbg-Fenster
LOG – Protokollansichtsfenster
MOD – Ausführbare Module anzeigen
MEM – Speicherkartenfenster öffnen
CPU – Öffnen Sie das Hauptprogrammfenster
BRK – Haltepunkt-Anzeigefenster öffnen
OPT – Einstellungen

Verschiedene Teams
EXIT – Verlass Olly
QUIT – Hör auf, Olly
OPEN [Dateiname] – Datei zum Debuggen öffnen
CLOSE – Schließen Sie das zu debuggende Programm
RST – Starten Sie das zu debuggende Programm neu
HELP – Hilfe anzeigen (dieser Text, aber nicht übersetzt)
HILFE - Olly Hilfe anzeigen Oll
HELP APIfunction – Hilfe zu API-Funktionen

Anhang Nr. 2

Haltepunkte. Olly unterstützt verschiedene Arten von Haltepunkten:
– Regulärer Haltepunkt, bei dem das erste Byte des Befehls, an dem Sie unterbrechen möchten, durch INT3 (Trap to Debugger) ersetzt wird. Sie können einen Haltepunkt platzieren, indem Sie einen Befehl im Disassembler auswählen und F2 drücken, oder über das Popup-Menü. Wenn Sie F2 ein zweites Mal drücken, während ein Haltepunkt bereits festgelegt ist, wird dieser entfernt. Die Anzahl der INT3-Haltepunkte ist unbegrenzt. Wenn Sie das Programm, das Sie debuggen, oder den Debugger schließen, speichert Olly automatisch Haltepunkte. Versuchen Sie niemals, einen Haltepunkt auf Daten oder mitten in einem Befehl zu setzen! Olly warnt Sie, wenn Sie versuchen, einen Haltepunkt außerhalb eines Codeabschnitts zu setzen. Sie können diese Warnung in Ihren Schutzeinstellungen deaktivieren. In einigen Fällen fügt der Debugger möglicherweise seine eigenen temporären INT3-Haltepunkte ein.

Bedingter Haltepunkt (horizontale Taste Umschalt+F2) – ein regulärer INT3-Haltepunkt mit einer Bedingung. Jedes Mal, wenn der Debugger auf einen solchen Haltepunkt trifft, wertet er seinen Ausdruck aus und stoppt das zu debuggende Programm, wenn das Ergebnis ungleich Null ist oder der Ausdruck ungültig ist.

Bedingter Haltepunkt mit Protokollierung (horizontale Taste Umschalt+F4) – ein bedingter Haltepunkt mit Protokollierung, um den Wert eines Ausdrucks oder Parameter einer bekannten Funktion bei jeder Ausführung des Haltepunkts zu protokollieren.

Haltepunkt für den Speicher. Mit Olly können Sie jeweils einen einzelnen Haltepunkt im Speicher festlegen. Sie wählen einen Teil des Speichers im Disassembler oder CPU-Dump aus und verwenden das Popup-Menü, um den Haltepunkt auf o`lr| zu setzen. Der vorherige Speicherhaltepunkt, falls vorhanden, wird automatisch gelöscht. Sie haben zwei Möglichkeiten: Stoppen bei Speicherzugriff (Lesen, Schreiben oder Ausführen) und nur Schreiben. Um einen Haltepunkt festzulegen, ändert Olly die Attribute der Speicherblöcke, die die Daten enthalten.

Hardware-Haltepunkt (nur verfügbar, wenn ein Debugger unter Windows ME, NT, 2000 oder XP verwendet wird). Mit 80x86-kompatiblen Prozessoren können Sie 4 Hardware-Haltepunkte festlegen. Im Gegensatz zu einem Speicher-Breakpoint verlangsamen Hardware-Breakpoints die Ausführungsgeschwindigkeit nicht, sondern decken nur bis zu 4 Byte ab.

Einzelstopp beim Speicherzugriff (nur unter Windows NT, 2000 und XP verfügbar). Sie können es im Speicherfenster über das Popup-Menü oder durch Drücken von F2 auf einen gesamten Speicherblock festlegen. Dieser Haltepunkt ist besonders nützlich, wenn Sie Anfragen an ein bestimmtes Modul abfangen möchten.

Autotrace – Sie müssen eine Bedingung angeben (horizontale Tastenkombination Strg+T), unter der der Debugger das Programm stoppt. Bitte beachten Sie, dass diese Option die Programmausführungsgeschwindigkeit erheblich (bis zu 20 %) verlangsamen kann.

OllyDbg kann die Programmausführung auch bei bestimmten Ereignissen stoppen, beispielsweise wenn eine DLL geladen oder entladen wird oder ein Thread erzeugt oder beendet wird.

Anhang Nr. 3

Meine Debugger-Einstellungen.
Wenn Sie meine Einstellungen verwenden möchten, ersetzen Sie alle Daten durch diesen Text in der Datei ollydbg.ini, die sich im selben Ordner befindet, in dem der Debugger installiert ist.

DLL-Versionen prüfen = 0 Symbolleiste anzeigen = 1 Status in der Symbolleiste = 0 Hardware-Haltepunkte verwenden, um Schritt = 1 Fenster wiederherzustellen = 104191 Scrollen MDI = 1 Horizontales Scrollen = 0 Oberstes Fenster = 0 Index der Standardschriftart = 1 Index der Standardfarben = 0 Index der Standardsyntax Hervorhebung=0 Protokollpuffergrößenindex=0 Ablaufverfolgungspuffergrößenindex=7 Gruppieren benachbarter Befehle im Profil=1 Hervorgehobenes Ablaufverfolgungsregister=-1 IDEALER Zerlegungsmodus=0 Zerlegen in Kleinbuchstaben=0 Argumente mit TAB trennen=0 Zusätzlicher Platz zwischen Argumenten = 1 Standardsegmente anzeigen = 1 NEAR-Sprungmodifikatoren = 0 Kurzform von Zeichenfolgenbefehlen verwenden = 0 Größenabhängige Mnemonik = 1 SSE-Größen-Dekodierungsmodus = 0 Oben im FPU-Stack = 1 Speichergröße immer anzeigen = 1 Register für jede IP dekodieren =0 Symbolische Adressen anzeigen=1 Lokale Modulnamen anzeigen=0 Als Füllung verwendete graue Daten=1 Sprungrichtung anzeigen=0 Sprungpfad anzeigen=0 Sprungpfad anzeigen=0 Pfad anzeigen, wenn der Sprung nicht ausgeführt wird=0 Korrekturen unterstreichen=1 Mitte FOLLOWed Befehl=0 Stack-Frames anzeigen=1 Lokale Namen im Stack anzeigen=1 Erweiterter Stack-Trace=0 Quelle mit CPU synchronisieren=1 SFX-Extraktor in Code einbeziehen=1 SFX-Trace-Modus=0 Echten SFX-Eintrag aus vorheriger Ausführung verwenden=1 SFX-Ausnahmen ignorieren =1 Erste Pause=1 Stopp bei neuer DLL=0 Stopp bei DLL-Entladen=0 Stopp bei neuem Thread=0 Stopp bei Thread-Ende=0 Stopp bei Debug-Zeichenfolge=0 SSE-Register dekodieren=0 Letzten Fehler aktivieren=1 Zugriffsverletzungen ignorieren in KERNEL32=1 Ignorieren INT3=1 Ignorieren TRAP=0 Ignorieren Sie Zugriffsverletzungen=0 Schritt in unbekannten Befehlen=1 Ignorieren Sie die Division durch 0=0 Ignorieren Sie illegale Anweisungen=0 Ignorieren Sie alle FPU-Ausnahmen=0 Warnen Sie bei häufigen Pausen=0 Warnen Sie, wenn die Pause nicht erfolgt Code=0 Autoreturn=1 Originalbefehl im Trace speichern=1 Verfolgtes ESP anzeigen=1 Über System-DLLs animieren=1 Über String-Befehle verfolgen=1 CPU synchronisieren und Trace ausführen=0 Benutzerdefinierte Ausnahmen ignorieren=1 Intelligentes Update=1 Hohe Priorität festlegen= 1 Argumente anhängen = 1 ExitProcess = 1 verwenden Injektion zulassen, um WinProc zu erhalten = 0 WM_XXX nach Name sortieren = 0 Typ des letzten WinProc-Haltepunkts = 0 Schneefreie Zeichnung = 1 Symbolische Namen entzerren = 0 Ordinalzahl in Name = 1 beibehalten Nur ASCII druckbar in dump=0 Diakritische Symbole zulassen=1 String-Dekodierung=0 Warnen, wenn nicht, Administrator=0 Warnen, wenn der Prozess beendet wird=1 Dialoge ausrichten=1 Schriftart des aufrufenden Fensters verwenden=0 Angegebene Dialogschriftart=0 Fensterpositionen wiederherstellen=1 Spaltenbreite wiederherstellen= 0 Sortierte Spalte hervorheben=0 Analysedaten komprimieren=1 UDD-Dateien sichern=1 Rest des Befehls mit NOPs füllen=1 Referenzsuchmodus=0 Globale Suche=0 Ausgerichtete Suche=0 Fehlermarge zulassen=0 Größe der hexadezimalen Bearbeitungsauswahl beibehalten=0 Tag des FPU-Registers ändern = 1 Hex-Inspektorgrenzen = 1 MMX-Anzeigemodus = 0 Zuletzt ausgewählte Optionskarte = 15 Zuletzt ausgewählte Erscheinungskarte = 6 Groß- und Kleinschreibung bei der Textsuche ignorieren = 1 Buchstabenschlüssel im Disassembler = 1 Lockerheit der Codeanalyse = 1 Pascal dekodieren strings=1 Anzahl der Argumente erraten=1 Fernaufrufe und Rückgaben akzeptieren=0 Direkte Segmentänderungen akzeptieren=0 VxD-Aufrufe dekodieren=0 Privilegierte Befehle akzeptieren=0 I/O-Befehle akzeptieren=0 NOPs akzeptieren=1 Verschiebungen außerhalb des Bereichs akzeptieren=0 Überflüssige Präfixe akzeptieren=0 LOCK-Präfixe akzeptieren=0 Nicht ausgerichtete Stapeloperationen akzeptieren=1 Nicht standardmäßige Befehlsformen akzeptieren=1 ARG und LOCAL in Prozeduren anzeigen=0 Analyse in Datei speichern=1 Hauptmodul automatisch analysieren=1 Codestruktur analysieren=1 Dekodieren ifs asswitches=0 Trace in Datei speichern=0 Inhalte von Registern verfolgen=1 Funktionen bewahren Register=0 Tricks dekodieren=0 Registertyp automatisch auswählen=1 Dekodierte Argumente anzeigen=1 Dekodierte Argumente im Stapel anzeigen=1 Argumente im Aufrufstapel anzeigen= 1 Induzierte Aufrufe anzeigen=1 Etikettenanzeigemodus=0 Etikett enthält Modulnamen=0 Symbolische Etiketten hervorheben=0 RETURNs im Stapel hervorheben=1 Pfad in Benutzerdatendatei ignorieren=1 Zeitstempel in Benutzerdatendatei ignorieren=1 CRC in Benutzerdatendatei ignorieren =1 Standardsortiermodus in Namen=1 Spalten in Protokolldatei tabellarisch darstellen=0 Daten an vorhandene Protokolldatei anhängen=0 Gesammelte Daten in Protokolldatei leeren=0 Leerzeichen in Quellkommentaren überspringen=1 Nicht vorhandene Quelldateien ausblenden=1 Tabstopps= 8 Dateidiagrammmodus = 2 Interne Handle-Namen anzeigen = 0 Nicht relevante Handles ausblenden = 0 RET anstelle von RETN verwenden = 0 Verfolgte Flags anzeigen = 1 Anzahl der folgenden Zeilen EIP = 0 Benutzerdaten außerhalb des Moduls speichern = 0 CPU = 194.324.812.360 ,3 CPU-Unterfenster=327.798.321.798.537.771.479.909 OllyTest=0,0,1024.746,1 Referenzen=256.420.256.210,1 Haltepunkte=75.248.626.168,1 Ablaufverfolgung=246.391.432.176,1 0,256,210,1 Ausführbare Module=263,41,636,175,1 Speicherzuordnung=357 , 41.519.274,1 Lesezeichen=110.145.624.175,1 Profil=132.174.624.182,1 Windows=132.177.614.179,1 Threads=155.204.492.124,1 Protokolldaten=421.107.378.221,1 Quelle=256.21 0, 256.210,1 Handles=196.325.647.175,1 Quelldateien=205.268.473.168,1 Aufrufstapel =0,420,256,210,1 Aufrufbaum=132,132,791,175,1 SEH-Kette=0,0,256,210,1 Überwachungsausdrücke=256,0,256,210,1 CPU-Schema=0 CPU-Disassembler=7,0,0,0,0 CPU-Dump=7,0,1 ,0 ,4353.0 CPU-Stack=7,0,0,0 CPU-Info=7,0,0,0 CPU-Register=7,0,0,0 Referenzen=7,0,1,0,0 Haltepunkte=1,0 ,1,0,0 Trace=1,0,1,0,0 Patches=1 ausführen

Fertigstellung

Dies ist das Ende Ihrer Bekanntschaft mit dem wunderbaren Debugger OllyDebugger. Natürlich ist es unmöglich, alle Funktionen dieses Debuggers in dem Artikel zu beschreiben, aber ich habe es versucht und hoffe, dass es funktioniert hat. Einige Möglichkeiten würden den Rahmen dieses Artikels sprengen, aber ich bin sicher, dass Sie diese Möglichkeiten selbst entdecken werden. Ich habe Olly völlig ohne Artikel unterrichtet, und Sie können sich ohne fremde Hilfe weiter mit dem Debugger vertraut machen. Wenn Sie Fragen, Anregungen, Schimpfwörter usw. haben. schick sie alle an [email protected].

P.S. Lesen Sie unbedingt meinen Artikel über das Auspacken mit Olly.

Hallo

Hallo an alle bei cracklab und insbesondere an MozgC und Bad_guy, ALEX, Kerghan, Mario555, Hex und alle, die diesen Artikel lesen.

Der Zweck dieser „Einführung in das Cracken von Grund auf mit OllyDbg“ besteht darin, denjenigen, die gerade erst anfangen, die Kunst des Crackens zu beherrschen, ein Grundwissen zu vermitteln und dies gleichzeitig so zu tun, dass sie dieses Wissen später lesen können und verstehen Sie fortgeschrittenere Tutorials wie , die im „Neuen Kurs von CracksLatinos“ zu finden sind, der natürlich offen für neue Ergänzungen und Ergänzungen bleibt.

Die Idee für den Kurs entstand aus der Tatsache, dass viele der Tutorials im New CracksLations-Kurs für Anfänger zu schwierig waren und diejenigen, die das erforderliche Niveau nicht erreichten, frustriert waren und sich in vielen Fällen weigerten, weiterzumachen. Der Zweck dieser „Einführung ...“ besteht daher nicht darin, die hervorragenden Tutorials aus dem „Neuen Kurs ...“ zu wiederholen, dessen Anzahl bereits 500 überschritten hat, sondern darin, den Grundstein zu legen, damit diejenigen, die diesen Kurs absolvieren wird in der Lage sein, komplexere Tutorials zu lesen. Dies erfordert, wie alles in unserem Handwerk, einen erheblichen Aufwand, und das Hauptziel besteht darin, diesen Aufwand zu reduzieren, Grundkenntnisse zu vermitteln und ein besseres Verständnis komplexerer Materie zu ermöglichen.

Warum OLLYDBG?

Wir werden hier nicht über die ewige Konfrontation zwischen Soft-Ice und OllyDbg sprechen; ich denke, dass selbst Soft-Ice-Fanatiker zugeben, dass es einfacher ist, mit OllyDbg zu beginnen, da es viele Informationen darüber gibt und es einfacher zu studieren ist. Wir müssen die Welt des Knackens durch die Tür namens „OllyDbg“ betreten, und erst dann kann jeder, der sie benötigt, zu jedem anderen benötigten Debugger wechseln, da sich nur die Verwendungsmethoden ändern, das Wesentliche jedoch gleich bleibt.

Von vorn anfangen

Zuerst müssen Sie sich mit dem Tool ausrüsten, das wir hauptsächlich verwenden werden. Klicken Sie dazu darauf und laden Sie es herunter.

Da wir bei Null anfangen, müssen wir zunächst das heruntergeladene Archiv in einen leicht erreichbaren Ordner auf Ihrer Festplatte entpacken. Eine gute Idee wäre, einen Ordner auf dem Laufwerk C:/ zu erstellen. Obwohl es an jedem anderen Ort funktioniert, gehe ich davon aus, dass das Laufwerk C:/ ausgewählt ist.

Nachdem die Datei entpackt wurde, gehen Sie in den erstellten Ordner und sehen Sie:

Es enthält die ausführbare Datei OLLYDBG.exe, die wir ausführen müssen und für die ich der Einfachheit halber eine Verknüpfung auf meinem Desktop erstellt habe.

Ok, alles ist startbereit. Klicken Sie auf OllyDbg:

Wir sehen eine Meldung, dass die DLL in der Bibliothek älter ist als die gleiche System-DLL. Wenn wir „Ja“ auswählen, wird die alte DLL aus dem Ordner gelöscht und die System-DLL verwendet. Obwohl ich keinen großen Unterschied zwischen den beiden sehe, bevorzuge ich immer noch die Version, die mit der Distribution geliefert wird, also klicke ich immer auf „Nein“.

Das ist reines OllyDbg, und das erste Programm, das wir öffnen, nur um OllyDbg kennenzulernen, wird CrueHeads berühmtes CrackMe sein, das diesem Tutorial beigefügt ist.

Um eine Datei in OllyDbg zu öffnen, gehen Sie zu Datei -> Öffnen oder klicken Sie auf das Symbol:

Es öffnet sich ein Fenster, in dem Sie die gewünschte Datei finden können, in diesem Fall ist es CrueHeads Crackme.

Das oben erwähnte Crackme wird sich öffnen, und im Moment spielt es keine Rolle, dass völlig unklar ist, was die Ansicht, die sich uns öffnet, bedeutet – wir gehen zunächst einfach die verschiedenen Teile und Funktionen von OllyDbg und einige Einstellungen durch, damit Wenn in späteren Tutorials beispielsweise „gehe zu DUMP“ steht, wussten Sie zumindest, wo diese Option war.

Hier sehen wir uns die vier Teile des OllyDbg-Hauptfensters an:

1) Zerlegter Code

Auch Auflistung genannt. Hier zeigt uns Ollie den zerlegten Code des Programms, das wir debuggen werden; Standardmäßig ist Ollie so konfiguriert, dass es das Programm beim Öffnen analysiert. Dies kann unter Optionen -> DEBUGGING-OPTIONEN geändert werden.

Das heißt, wenn das Kontrollkästchen „AUTO START ANALISIS OF HAUPTMODUL“ aktiviert ist, analysiert OllyDbg das Programm und zeigt zusätzliche Informationen darüber an.

Dies ist der Anfang der geparsten Crack-Liste von CrueHead, und wenn wir sie ohne Parsen öffnen, können wir den Unterschied erkennen.

Das Analysefenster enthält viele Informationen, die, obwohl sie für uns noch nicht ganz klar sind, sehr interessant aussehen. Gleichzeitig ist es schön zu wissen, dass Sie es jederzeit entfernen können, wenn sich herausstellt, dass die Analyse nicht sehr genau ist oder sich ein Fehler eingeschlichen hat.

Oft zeigt OllyDbg einige Teile des Programms falsch an, weil es den ausführbaren Code fälschlicherweise als Daten interpretiert, und zeigt dann etwa Folgendes an:

In diesem Fall können Sie die Analyse manuell entfernen, indem Sie mit der rechten Maustaste auf die Auflistung klicken und „ANALYSE -> ANALYSE AUS MODUL ENTFERNEN“ auswählen.

Und dann wird die Auflistung korrekt angezeigt.

Eine weitere Option, die Sie zur Vereinfachung verwenden können und die mir persönlich nicht wirklich gefällt (aber Geschmäcker sind unterschiedlich), ist die Hervorhebung von Sprüngen und Anrufen – klicken Sie mit der rechten Maustaste auf die Auflistung und wählen Sie „DARSTELLUNG -> HERVORHEBUNG -> JUMPS UND ANRUFE“.

Sie erhalten Folgendes:

Hier sehen wir, dass Aufrufe in Azure und Übergänge in Gelb hervorgehoben werden.

Die Auflistung ist jetzt besser lesbar, aber wir haben noch keine Ahnung, was das bedeutet, aber es ist gut, das Tool für die zukünftige Verwendung bereit zu haben.

2) Register

Das zweite wichtige Fenster ist das Registerfenster.

Denken Sie daran, dass sich das Registerfenster ganz rechts in OllyDbg befindet und dort eine beträchtliche Menge an Informationen angezeigt wird.

Es gibt noch viel mehr Informationen, die wir nicht sehen, aber Sie können den Anzeigemodus auf drei Zustände einstellen („VIEW FPU REGISTERS“ – FPU-Register anzeigen, „VIEW 3D NOW REGISTERS“ – „3D NOW“-Register anzeigen und „VIEW DEBUG REGISTERS“. ” – Debug-Register anzeigen). Standardmäßig werden die ersten angezeigt.

3) Stapel oder Haufen

Kommen wir nun zum „Stapel oder Heap“. Außer der Möglichkeit, Informationen zu den ESP- und EBP-Registern anzuzeigen, gibt es hier nicht allzu viele Konfigurationsoptionen.

Standardmäßig ist der Modus zum Anzeigen von Informationen zu ESP (und er ist auch der nützlichste), er kann jedoch in den Modus zum Anzeigen von Informationen zu EBP geändert werden, wofür Sie in diesem Fenster mit der rechten Maustaste klicken und „ GEHE ZU EBP“ und die weitere Verwendung des Elements „GEHE ZU ESP“ führt uns zum vorherigen Modus zurück.

Ich werde die Funktionalität des Stacks in späteren Kapiteln ausführlicher erläutern, aber vorerst befassen wir uns nur mit dem, was durch Konfiguration geändert werden kann.

4) Dump

Das Dump-Fenster verfügt über viele Anzeigemodi, die geändert werden können, indem Sie mit der rechten Maustaste in das Dump-Fenster klicken und den gewünschten Modus auswählen. Der Standardmodus ist 8-Byte-Hex/ASCII.

Der Standardmodus ist auch der am häufigsten verwendete, aber gleichzeitig haben wir die Möglichkeit, ihn zu ändern, um zerlegten Code (DISASSEMBLE), Text (TEXT) und andere Formate (SHORT, LONG, FLOAT) anzuzeigen.

Und schließlich die Option SPECIAL -> PE HEADER, die, wie wir in den kommenden Kapiteln sehen werden, sehr nützlich sein kann.

Jetzt kennen wir die Hauptteile des OllyDbg-Hauptfensters, es gibt aber auch Fenster, die nicht direkt zugänglich sind, sondern entweder über das Menü oder über Schaltflächen auf dem Bedienfeld aufgerufen werden können.

Schauen wir uns jeden von ihnen an.

Der L-Button oder VIEW->LOG zeigt uns, was OllyDbg in das Protokollfenster schreibt. Es kann so konfiguriert werden, dass verschiedene Arten von Informationen angezeigt werden. Standardmäßig speichert das Protokollfenster alle Startinformationen sowie Informationen zu BREAKPOINTS CONDICIONAL LOGS. Letzteres werden wir viel später kennenlernen, aber schauen wir uns zunächst Informationen über den laufenden Prozess (in unserem Fall ist dies CrueHeads Crack) und die Bibliotheken an, die er lädt.

Eine der wichtigsten Optionen in diesem Fenster ist die Protokollierung in einer Datei, falls wir Informationen in einer Textdatei speichern möchten. Um diese Option zu aktivieren, klicken Sie mit der rechten Maustaste und wählen Sie „LOG TO FILE“.

Schaltfläche E oder VIEW->EXECUTABLES zeigt uns eine Liste der Module, die das Programm verwendet: exe, dll, ocx und andere.

Auch hier bringt die rechte Maustaste viele Optionen hervor, auf die wir jetzt nicht näher eingehen, die wir aber bereits bei der Erkundung des Hauptfensters von OllyDbg gesehen haben.

Die Schaltfläche M oder VIEW->MEMORY zeigt den von unserem Programm belegten Speicher an. Hier sehen wir Abschnitte der Anwendung, vom Prozess verwendete Bibliotheken, den Stapel und verschiedene vom System belegte Abschnitte, und oft belegen Programme während der Ausführung neue Speicherabschnitte.

Durch Klicken mit der rechten Maustaste können wir eine SUCHE im Speicher durchführen, um Zeichenfolgen verschiedener Art (Text, Hexadezimal, Unicode) zu finden. Außerdem besteht die Möglichkeit, Haltepunkte in Abschnitten hervorzuheben und die Zugriffsrechte für letztere zu ändern ( wählen Sie ZUGRIFF EINSTELLEN).

Button T oder VIEW->THREADS zeigt uns eine Liste der Threads (Threads) des Programms.

Obwohl wir jetzt nicht wissen, was es ist, und es erst in den folgenden Kapiteln herausfinden werden, wird es nicht überflüssig sein, sich mit jedem der Fenster vertraut zu machen. Wir werden später lernen, wie man sie verwendet.

Mit der Schaltfläche „W“ oder „ANSICHT->WINDOWS“ werden die Programmfenster angezeigt. Da das Programm jedoch noch nicht ausgeführt wird, bleibt die Liste der Fenster leer.

Taste H oder VIEW->HANDLES zeigt Handles an. Später werde ich erklären, was sie tun.

Schaltfläche C oder VIEW->CPU bringt uns zum Hauptfenster von OllyDbg zurück.

Die Schaltfläche / oder VIEW->PATCHES zeigt eine Liste der angewendeten Patches an, wenn das Programm geändert wurde. Da noch keine Änderungen vorgenommen wurden, bleibt das Fenster vorerst leer.

Die K-Taste oder VIEW->CALL STACK zeigt den „Call Stack“ an, eine Liste der Aufrufe, die uns bis zu dem Punkt begegnet sind, an dem das Programm gestoppt wurde.

Schaltfläche B oder VIEW->BREAKPOINTS ruft eine Liste der normalen Haltepunkte auf, die sich im Programm befinden. Es gibt keine Hardware-Breakpoints oder Speicher-Breakpoints, sondern nur normale.

Die Schaltfläche R oder VIEW->REFERENCES zeigt ein Fenster mit Links an, die wir als Ergebnis der Suche nach Links in Ollie erhalten haben

Die Schaltfläche „…“ oder VIEW->RUN TRACE zeigt das Ergebnis des Befehls RUN TRACE an. Hier können wir auch die Option LOG TO FILE auswählen, um die Trace-Ergebnisse in einer Textdatei zu speichern.

Wir haben das Bedienfeld mit den wichtigsten Schaltflächen abgedeckt, damit Sie mit deren Funktionen vertraut sind, wenn wir uns in den folgenden Kapiteln tiefer mit ihnen befassen.

So konfigurieren Sie OllyDbg als JIT (JUST IN TIME DEBUGGER)

Natürlich werden wir JIT nicht immer verwenden, sondern nur in besonderen Fällen, denn wenn bei irgendeinem laufenden Programm auf unserem Rechner ein Fehler auftritt, brauchen wir Ollie überhaupt nicht zu verwenden (standardmäßig ist dr.watson dies). als JIT verwendet).

Um OllyDbg zu einem JIT-Debugger zu machen, müssen Sie zu OPTIONEN->JUST IN TIME DEBUGGING gehen

Und drücken Sie nacheinander die Tasten MAKE OLLYDBG JUST IN TIME DEBUGGER und FERTIG

Um diese Funktion zu entfernen, müssen Sie an derselben Stelle auf RESTORE JUST IN TIME DEBUGGER und FERTIG klicken.

Plugins in OllyDbg verbinden

Mit OllyDbg können Sie Plugins verbinden, die zur Lösung eines bestimmten Problems nützlich sein können. Um zu lernen, wie das geht, beschränken wir uns vorerst darauf, das COMMAND BAR-Plugin anzuschließen.

Entpacken Sie anschließend das Plugin und sehen Sie sich den Inhalt des Ordners an, in dem dies geschehen ist:

Zunächst müssen Sie einen Ordner für Plugins erstellen. Ich erstelle es in C:/ und nenne es PLUGINS.

Natürlich können sich Plugins überall befinden, aber ich hoste gerne alles in C. Wie auch immer, jetzt müssen wir OllyDbg so konfigurieren, dass es diesen Ordner als Speicherort aller Plugins erkennt.

Gehen Sie dazu zu OPTIONEN->DARSTELLUNG.

Öffnen Sie im folgenden Fenster die Registerkarte VERZEICHNISSE.

Wir sehen, dass der Pfad zu den Plugins das Verzeichnis ist, in dem sich OllyDbg.exe selbst befindet, und wir könnten die Plugins dort ablegen, aber ich möchte sie getrennt halten, und dann auf PLAGIN-PFAD->BROWSE klicken, um den von uns erstellten Ordner zu finden .

Wählen Sie den Ordner PLUGINS aus und speichern Sie die Änderungen.

Das heißt, Sie müssen Ollie neu starten, damit es den neuen Ordner mit Plugins erkennt, aber zuerst müssen Sie das zuletzt heruntergeladene Plugin dorthin kopieren.

Kopieren Sie den gesamten Inhalt des Archivs in den Ordner PLUGINS.

Jetzt befinden sich alle Dateien des Plugins „Command Bar“ im Ordner PLUGINS, und der Rest sollte auch dort abgelegt werden (oft kann man nicht alle Dateien im Archiv kopieren, sondern nur die DLL).

Schließen Sie nun OllyDbg, falls es noch geschlossen war, und starten Sie es erneut. Wir sehen, dass die BEFEHLSLEISTE und ihre Optionen im Menü PLUGINS erschienen sind.

Unten in OllyDbg sehen wir die installierte BEFEHLSLEISTE.

Dies ist ein Textfeld zur Eingabe von Befehlen, die für uns in vielen Fällen nützlich sein können, und später werden wir ihre Verwendung sehen, aber jetzt ist es wichtig zu lernen, wie man Plugins verbindet.

Um PLUGIN zu deinstallieren, löschen Sie einfach die entsprechende DLL aus dem Ordner PLUGINS und starten Sie OllyDbg neu. Das Plugin verschwindet dann. Es ist jedoch ratsam, die BEFEHLSLEISTE immer eingeschaltet zu lassen.

Öffnen wir CrueHeads Crack erneut in OllyDbg.

Die nützlichsten Schlüssel in OllyDbg sind:

F7: Führt eine Codezeile aus (wenn wir uns auf CALL befinden, gehen Sie in den aufgerufenen Codeabschnitt)

F8: Führt eine Codezeile aus (wenn wir uns in einem CALL befinden, führt es den Aufruf einfach aus, ohne hineinzugehen, und geht zur nächsten Zeile nach dem CALL über).

Diese beiden Arten der manuellen Nachverfolgung sind sehr unterschiedlich und wir werden später darüber nachdenken, in welchen Fällen sie jeweils verwendet werden.

F2: Setzt einen normalen Haltepunkt auf der markierten Linie. Um diesen Haltepunkt zu entfernen, drücken Sie erneut F2.

Zum Beispiel:

Wir wollen den Installationspunkt auf Position 40101A setzen, also markieren wir diese Linie mit der Maus.

Mit einem Mausklick wird es markiert und wird wie im Bild grau. Drücken Sie dann F2.

Wir sehen, dass die entsprechende Position in der ersten Spalte rot wird, was darauf hinweist, dass hier ein Haltepunkt vorhanden ist. Durch erneutes Drücken von F2 können Sie es entfernen.

F9: Führt ein Programm aus, das so lange ausgeführt wird, bis es einen Haltepunkt erreicht, eine Ausnahme auslöst oder die Ausführung aus irgendeinem Grund einfach stoppt. Wenn das Programm ausgeführt wird, wird das Wort RUNNING in der unteren rechten Ecke von OllyDbg angezeigt.

Wenn wir CrueHeads Crackme starten, werden wir Folgendes sehen:

Um die Ausführung des Programms vorübergehend zu stoppen, drücken Sie F12 oder DEBUG->PAUSE.

Wir sehen, dass OllyDbg das Wort PAUSED anzeigt. Sie können das Programm weiter ausführen, indem Sie F9 oder DEBUG->RUN drücken.

Um das zu debuggende Programm zu schließen, wählen Sie DEBUG->CLOSE.

Dies war ein kurzer Überblick über OllyDbg, und wir werden seine vielen Optionen und Fähigkeiten in den folgenden Kapiteln weiter ausführlicher untersuchen. Die Hauptsache ist, dass Sie das Programm herunterladen, es konfigurieren, sich noch einmal alles ansehen, was in diesem Tutorial besprochen wurde, auch das Plugin anschließen, CrueHeads Crack starten und stoppen und versuchen, Haltepunkte zu setzen, damit im nächsten Kapitel all diese Dinge nicht mehr funktionieren Probleme bereiten.