Ein Programm beinhalted nicht nur Assembleranweisungen. Beispielsweise werden ja auch Textvariablen definiert. Überschriften, Dialogtexte, Warnungen, all das steht (meistens) auch in einem Programm. WDasm ist in der Lage diese Strings zu finden, herauszufiltern und kann uns sogar zu der Stelle im Programm führen, wo die Zeichenkette ver/bearbeitet wird.
Ein praktisches Demo-Programm zum Demonstrieren ist das gute alte Notepad.
Zunächst laden wir die Notepad.exe in WDasm: Disassembler --> Open File to Disassemble
Nachdem Wdasm die Datei vollständig geladen hat, kann es eventuell sein, dass ihr nur wirres Zeug seht. Das kann daran liegen, dass ihr eine falsche Schriftart eingestellt habt oder daran, dass ihr einfach noch nicht durchsteigt. :-))
Die Schriftart ändert ihr mit Disassembler --> Font --> Select, anschließend macht ihr sie noch zur Standardschrift, im gleichen Menu.
Im folgenden gehe ich von der Win2k-Version von Notepad aus. Ich weiss nicht, ob und wie sich die Versionen unterscheiden, aber das ist auch nicht so wichtig für den Moment.
Ganz oben in WDasm stehen Informationen über die exe selber. Bis man das versteht dauert es eine Weile. deshalb richten wir uns auf die nächsten Zeilen aus.
"MENU-INFORMATION": Zunächst zeigt uns WDasm da die in dem Programm verwendeten Menus und ihre einzelnen Elemente.
"DIALOG INFORMATION": Danach folgen sämtliche Dialoge, die das Programm mit dem Benutzer führt. Zu Dialogen gehören auch Schaltflächen, etc.
"IMPORTED FUNCTIONS": Diese Sektion zeigt uns sämtliche Dateien an, aus denen das Programm zusätzlich Methoden und Funktionen aufruft.
"IMPORT MODULE DETAILS": Hier erfahren wir ganz genau, welche Funktionen aus den Dateien aufgerufen werden.
"ASSEMBLE CODE LISTING": Der eigentliche Programmcode im Assemblerformat.
Uhrsprünglich wollte ich Euch aber zunächst zeigen, wie man von dem Programm verwendete Strings im Code wiederfindet. Zunächst sollte man sich alle Strings ansehen können. Das geht entweder über das Menu "Refs" --> String Data References oder über die Toolbar mit dem Symbol links neben dem Druckerbutton. Es öffnet sich ein neues Fenster, dass alle von WDasm gefundenen Strings auflistet. Manchmal entdeckt ihr merkwürdige Zeichen, zum Beispiel Prozentzeichen in einem String:
"Die Datei %% kann nicht gefunden werden"
Das zeigt an, dass dieses String-Stück variabel ist, die Prozentzeichen dienen als Art Platzhalter.
Doppelklickt man jetzt auf einen String, so springt WDasm an die Stelle im code, an der der String gebraucht wird. Versucht es: Klickt doppelt auf " - Editor". Wdasm ist ein bisschen nach unten gesprungen und zeigt euch die Stelle. Scrollt wieder ein wenig nach oben und ihr seht "Possible Reference...".
Eine der wichtigsten Eigenschaften von WDasm ist das Verfolgen von Sprung- und Call-Anweisungen. Ein Progamm läuft nicht einfach von oben nach oben runter. Es werden ständig sprünge durchgeführt, die an eine andere Stelle im Code führen. Sprunganweisungen in Assembler beginnen immer mit einem "j". Beispielsweise: "je (jz), "jne (jnz)", "jg", "jl" oder auch "jmp".
In WDasm finden wir einen Jump in der Nähe der Stelle im Code, an der der String " - Editor" benötigt wurde. 4 Codezeilen tiefer steht ein "jne" Wenn ihr mit dem Balken in Wdasm direkt auf den Jump scrollt, wird dieser grün. Das zeigt an, dass man an eine andere Stelle im Code gelangen kann, wenn man dem Jump folgt. Um dem Jump zu folgen drückt man in Wdasm den Button "Jump to" aus der Toolbar. Wdasm springt dann an die Stelle im Code zu der der Sprung führt. Welche das ist, braucht euch erst einmal nicht zu kümmern. Gleichzeitig merkt sich WDasm aber auch, wo ihr hergekommen seid. Einmal gesprungen, könnt ihr mit dem button "ret" wieder an den Ursprungsort zurückkehren. Ihr könnt auch mehreren sprüngen folgen und auch wieder mehrfach zurückgeleitet werden.
Ebenfalls nützlich ist die "Goto Code Location"-Anweisung im "Goto"-Menu. Damit kann an an jede beliebige Adresse im Programm springen. Die Dialogbox erwartet die Eingabe einer Adresse. Die Adressen der Codezeilen stehen als erstes in jeder Zeile des Assembler-Listings. Eingeben muss man sie ohne den Doppelpunkt.
Das sind die wichtigsten Funktionen von WDasm, ich empfehle dringend viel mit Notepad und den gelernten Aktionen zu experimentieren, da ihr so lernt euch in einem Assembler-Listing zu bewegen und zurechtzufinden.
Ebenfalls wichtig ist die Statusleiste. Dort wird eine wichtige Information ausgegeben, das Offset der aktuellen Code-Zeile. Damit kann man eine Zeile Code in einem Hexeditor wiederfinden. Das ist für das sogenannte Patchen wichtig, wenn man bewusst Anweisungen tauscht, löscht, etc. In Tutorials werdet ihr wahrscheinlich immer den Begriff Offset hören, also merken. |