Hacks & CrackmesTests, Fragen oder Hilfestellungen. Crackmes und Hackits werden hier diskutiert.
My first Crackme
Diskussion: My first Crackme im Forum Hacks & Crackmes, in der Kategorie Software Home; Anzeige
Hi habe mal ein Crackme geschrieben, wo man das passwort feststellen soll.
Also nicht patchen. Bitte das PW feststellen.
...
Anzeige Hi habe mal ein Crackme geschrieben, wo man das passwort feststellen soll.
Also nicht patchen. Bitte das PW feststellen.
Bin NewBie bekomme es leider nicht hin es ist mein 3tes Crackme die ersten beiden waren kein problem.
Patchen schaff ich auch aber das Passwort finde ich nicht raus vielleicht ihr.
Wäre sehr schön wenn ihr den lösungs weg mit Poste
keine ganze Lösung, aber ein Hint:
Du bekommst praktisch sofort im Debugger sowas zu sehen:
um die einzelnen Funktionen herauszufinden, eignet sich die "Ausprobiermethode". Also erstmal mit "F8" == "Step Over" über die Funktion gehen und dabei genau die Paramter beobachten, die übergeben werden sowie die Rückgabe (für gewöhnlich in EAX). Wenn z.B die Eingabe "hello" an eine Funktion übergeben wird und das Ergebnis in EAX == 5 ist, handelt es sich höchstwahrscheinlich um die "Längenbestimmungsfunktion".
Erst wenn man so nicht weiterkommt, lohnt es sich, mitterl F7 =="Step In" in den jeweiligen Call "reinzugehen" und da versuchen herauszufinden, was dieser macht.
Außerdem ist es ganz nützlich, die unmittelbare Umgebung der Funktionscalls anzuschauen - sind da z.B JG oder JE/JNZ, die auf den "Passwort ist falsch" Bereich führen, so wird die Funktion irgendwas wirklich wichtiges für den Programmablauf machen.
Hier das Ergebnis nach 5-6 Durchläufen (einfach als Passwort "hello" eingegeben und dann mittels F8 durch den Code "gesteppt" und durch Parameter/Rückgabe ermittelt, was diesert macht):
in Olly angelangt ist, zeigen EDX und ECX auf die jeweiligen Strings - der eine ist die Eingabe, der andere das "Sollpasswort".
Höchstwahrscheinlich handelt es sich um die Vergleichsfunktion - es lohnt sich also diese noch genau anzuschauen:
Code:
004023C0 09D2 OR EDX,EDX
004023C2 75 05 JNZ SHORT Crackmme.004023C9
004023C4 BA 3F404000 MOV EDX,Crackmme.0040403F
004023C9 09C9 OR ECX,ECX
004023CB 75 05 JNZ SHORT Crackmme.004023D2
004023CD B9 3F404000 MOV ECX,Crackmme.0040403F
004023D2 8A22 MOV AH,BYTE PTR DS:[EDX] ; [edx] == speicheradresse des festkodierten passworts
004023D4 42 INC EDX
004023D5 8A01 MOV AL,BYTE PTR DS:[ECX] ; [ecx] == speicheradresse der Benutzereingabe
004023D7 41 INC ECX
004023D8 38C4 CMP AH,AL
004023DA 75 0C JNZ SHORT Crackmme.004023E8
004023DC 08E4 OR AH,AH
004023DE ^ 75 F2 JNZ SHORT Crackmme.004023D2 ; Vergleichsschleife
004023E0 B8 01000000 MOV EAX,1
004023E5 85C0 TEST EAX,EAX
004023E7 C3 RETN
schaut eigentlich nach "selbstgeschriebenem" Asm aus ;)
Um zu verstehen, was hier gemacht wird, eignet sich wieder die "Ausprobiertaktik" - man geht langsam mittels "F8" durch den Code und schaut, was sich ändert - hier stellt man z.B fest, dass zuallererst in EDX/ECX die Stringreferenzen auf die Eingabe und (anscheinend) das Sollpassword geladen werden. Dann werden die jeweiligen Buchstaben eingelesen und verglichen. Nur wenn alles bis zum Ende verglichen werden kann (und die Strings damit übereinstimmen) wird eine 1 zurückgegeben.
Der Trick mit "Test eax,eax" ist ein Vergleich auf EAX == 0 noch in der Funktion selbst - nach sofortiger Rückkehr zum Aufrufer
Code:
004010DC |E8 DF120000 |CALL Crackmme.004023C0 ; vergleiche eingabe mit festkodiertem
004010E1 |74 44 |JE SHORT Crackmme.00401127
wird dieser Vergleich mittels JE "ausgewertet" (TEST EAX, EAX setzt den Z Flag, falls das Ergebnis von test eax, eax == 0 ist und JE (alias JZ) springt, wenn Z Flag gesetzt ist, weiter zu der "Falsch" Meldung.
__________________ Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
Noch eine frage warum kann mann nicht bei jeden crackme step by step machen um zu sehen was genau passiert habe die standart version Olldbg?!
Das lässt sich allgemeingültig schlecht beantworten
Es gibt viele Sachen wie: TLS Callbacks (was vielleicht nicht ganz ein anfängergerechtes Thema ist ) , NET Anwendungen oder Protektoren, bei denen es nicht so gut klappt.
z.B im ersten Fall kommt es nur auf die Konfiguration von OllyDbg bzw Plugins an und im zweiten Fall liegt es daran, dass NET Anwendungen von NET Framework interpretiert/ausgeführt werden und man mit OllyDbg da nur relativ schlecht beikommen kann.
__________________ Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.