Auflösung Crackme
Als allererstes machen wir eine Testeingabe um zu sehen, wie sich das CM verhält. Gibt es vielleicht eine Message-Box aus?
Okay, das CM schließt sich einfach nach einer Testeingabe ohne jegliche Meldung.
Jetzt laden wir das File mit/in Olly.
Im Codefenster einen Rechtsklick machen und auf Search for -> "all referenced text strings" gehen.
In dem neuen Fenster scrollen wir durch und suchen nach einem Hinweis ,der eine richtige Eingabe bestätigt (vielleicht einer mögichen Messagebox-Ausgabe?).
Wir finden "O K"
Ein Doppelklick auf diese Zeile bringt uns zu der gewünschten Stelle im Codefenster.
Code:
00401D58 . C785 34FFFFFF>MOV DWORD PTR SS:[EBP-CC],CrackMe.00401A>; UNICODE "O K"
Die Vermutung liegt nahe, dass der relevante Code der die Eingabe prüft, irgendwo darüber sein muss.
22 Zeilen darüber werden wir fündig.
Code:
00401CF1 . FF15 3C104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrCm>; MSVBVM60.__vbaStrCmp
__vbaStrCmp vergleicht also einen String.
Wir setzen einen Breakpoint mit F2
Mit F9 oder der Pfeil-Taste starten wir das Crackme.
Danach machen wir eine Testeingabe (1234567890) und drücken den OK-Button.
Olly breakt am Breakpoint.
Wir sehen im rechten oberen Fenster im Register EAX UNICODE "1234567890"
Jetzt gehen wir mit F7 in den Call am Breakpoint und dann Schritt für Schritt mit F7 durchs Programm.
Nach 30 bzw 31 mal F7 sehen wir im Register-Fenster von Olly im Register ESI unsere Eingabe "1234567890" und im Register EDI "GetWindowsVersion" => das Passwort.
Das war jetzt der lange und ausführliche Weg um mal generell das Vorgehen zu erklären.
Wenn man genau hinschaut, sieht man dass im Codefenster der Unicode und der StrCmp in zwei Zeilen untereinander stehen.
Code:
00401CEC . 68 3C1A4000 PUSH CrackMe.00401A3C ; UNICODE "GetWindowsVersion"
00401CF1 . FF15 3C104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrCm>; MSVBVM60.__vbaStrCmp
Also ist keine so lange Suche nötig.
Anmerkung zum Schluss: Man hätte bei der Suche nach dem Breakpoint natürlich auch anstatt nach einem Textstring zu suchen, mittels "search for -> "all intermodular calls" nach __vbaStrCmp suchen können.
root