W32Dasm Tutorial

by Skarabäus [AmoK]

 

In diesem Tutorial werden nur die Grundlegenden Einstellungen und Funktionen von
W32Dasm V 8.93 erklärt. In diesem Tutor wird KEIN Programm gecrackt, es wendet sich an absolute Newbies und soll den allgemeinen Umgang mit dem Programm erklären.

 

Das ist der Anfangsbildschirm wenn das Programm das erste mal gestartet wird.

Versuchen wir einfach mal ein Programm zu laden um die weiteren Funktionen des Programmes nutzen zu können.

Also:

Menü – Disassembler – Open File to Disassemble

Nun eine EXE auswählen und was sehen unsere Augen – also wenn ihr das lesen könnt – hört hier einfach auf – und fangt an.

 

Ansonsten wählt das Menü Font -> Select Font und wählt eine Schrift die man auch lesen kann (Times New Roman oder Arial)

Als nächstes sollte man noch die Funktion Font -> Save Default Font aufrufen, damit beim nächsten Neustart die eben ausgewählte Schriftart noch aktiviert ist.

Mehr gibt es zur Konfiguration von W32Dasm meiner Meinung nach nicht mehr zu sagen.

 

 

Funktionen von W32Dasm

Einige fürs Cracken interessante Informationen findet man in dem Menü Refs,

Refs -> Menu References -> Bei Standard 32Bit-Applikationen findest du hier alle im Programm benutzten Menüs. Wenn du darauf doppelklickst findest du dich mitten im Programmcode wieder, in dem das Menü benutzt wird.

Refs -> Dialog References -> Bei Standard 32Bit-Applikationen sind hier die Dialoge des Programmes aufgelistet. Ein Doppelklick führt zum gleichen Ergebnis wie bei Refs -> Menu References

Refs -> String Data References -> Bei Standard 32Bit-Applikationen sind hier alle Strings aufgeführt die im Programm angezeigt/benutzt werden. Ein Doppelklick führt zum gleichen Ergebnis wie bei Refs -> Menu References

Functions -> Imports -> Hier sieht man welche Funktionen das Programm von externen DLL’s importiert. Dies kann auch sehr nützlich sein wenn man keinen Ansatzpunkt wie Texte im Programm findet. So gibt es z.B. in der Kernel32.DLL eine Funktion namens GetDriveTypeA Diese wird sehr oft benutzt um herauszufinden ob es sich bei einem Laufwerk wirklich um eine CD handelt. Sie ist somit also relativ wichtig wenn es darum geht, wie z.B. bei MechWarrior den CD-Check auszubauen.

Nun noch etwas Theorie

Ein guter Anfangspunkt zum Cracken ist die Funktion Refs -> String Data References. Du kannst bei einfachen Programmen, ohne spezielle Schutzfunktionen, hier oft den String finden der angezeigt wird wenn man z.B. eine falsche Serial eingibt. Findet man diesen Text hier, bringt ein Doppelklick dich schnell zu der Stelle im Code bei der diese Funktion aufgerufen wird. Scrolle nun etwas höher. Normalerweise steht hier oft eine Zeile die wie folgt aussieht:

*Referenced by a (U)nconditional or (C)onditional Jump at Address:

:xxxxxxxx(C)

xxxxxxxx gibt die Adresse an von der, der Sprungbefehl ausgeführt wird. (C) gibt an das es sich um ein bedingten Sprung handelt also z.B. Nur Springen wenn die Seriennummer falsch ist.

Man kann nun über den Befehl Goto -> Goto Code Location und der Eingabe der vorher herausgefundenen Adresse (xxxxxxxx) zu dem bedingten Sprung springen und ihn dann ausschalten indem man sich die Adresse die in der Statuszeile bei @Offset: aufgeführt ist merkt, und die benötigten Bytes dann in der Datei mit einem Hex-Editor, je nachdem, z.B. mit dem Hexcode (90h) überschreibt. Dieser steht für den Assemblerbefehl nop – der Befehl eignet sich sehr gut um Befehle die man nicht möchte zu überschreiben, da er keine Veränderungen an den Registern vornimmt und man keine Angst haben muß daß das Programm danach nicht mehr funktioniert.

Diese Vorgangsweise funktioniert selbstverständlich nicht immer, sehr oft müssen auch mehrere Veränderungen in einer Datei vorgenommen werden um das Programm Endgültig zu cracken. Eine weitere Möglichkeit wäre z.B. den Text zu suchen der aufgerufen wird wenn die Registrierung erfolgreich war. Im Prinzip handelt es sich um die gleiche Vorgehensweise wie oben, jedoch mit der Änderung das der (C)onditional Jump statt mit nop’s (90h) überschrieben zu einem (U)nconditional Jump geändert wird, d.h. man macht aus einem Sprung wie je (jump equal) einen jmp (einfacherer jump-Befehl, springt immer) – man könnte den Sprung natürlich auch in sein Gegenteil verkehren indem man aus jump equal (Springe, wenn gleich -> je) einen jump not equal (Springe wenn nicht gleich -> jne) macht. Dieser Befehl springt dann bei jeder falschen, statt bei jeder richtigen S/N. Und die wahrscheinlichkeit eine funktionierende zu erwischen ist schwerer als eine falsche *g*

Wichtige Assembler-Opcodes

Opcode

Befehl

Beschreibung

3B

cmp

(Compare) Vergleicht den Inhalt der angegeben Register

74

je

(jump equal) Springt bei gleichem Inhalt

75

jne

(jump not equal) Springt bei ungleichem Inhalt

72

jb

(jump below) Springt bei kleinerem Inhalt

77

ja

(jump above) Springt bei größerem Inhalt

E9

jmp

(jump) Springt immer

E8

call

(call) ruft ein Unterprogramm auf, aus dem man mit ret zurückspringt

C3

retn

(return) springt aus einem Unterprogramm wieder zurück zu der aufrufenden Adresse

CD

int

(interrupt) mit diesem Befehl wird ein Interrupt aufgerufen

00,02

and

(and) logische und Verknüpfung.

 

Wichtige API-Aufrufe und derren Verwendung

DLL

Funktion

Verwendung

Kernel32.dll

GetDriveTypeA

Wird oft bei CD-Check-Routinen benutzt um herauszufinden ob es sich um ein CD-ROM-Laufwerk handelt.

Kernel32.dll

GetLocalTime

Wird bei Programmen benutzt welche eine Zeitbeschränkung nutzen, um die Lokale Zeit zu erfahren.

User32.dll

GetDlgItemTextA

Wird benutzt um die Eingaben aus einem Dialogfeld auszulesen, z.B. eingegebene Serial

User32.dll

GetWindowTextA

Wird benutzt um die Eingaben aus einem Textfeld auszulesen, z.B. eingegebene Serial

User32.dll

MessageBoxA

Ruft eine MessageBox auf, die z.B. eine Fehlermeldung anzeigt.

 

 

Ich hoffe das Tutorial hat dir etwas weiter geholfen J , bei Kommentaren – Anregungen und Kritik L schreib mir einfach eine Mail...

Skarabäus mailto:skarabaeus@sd1.de

Amok – The fine Cracking Art www.amok.notrix.de