Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Hacks & Crackmes Tests, 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. ...

Antwort
Alt 04.06.10, 19:49   #1 (permalink)
 
Registriert seit: 10.01.09
Mikse Leistung: Facit NTK
Likes: 0
Standard My first Crackme

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

Danke have fun.

Angehängte Dateien
Dateityp: zip Crackmmee.zip (2,2 KB, 41x aufgerufen)
Mikse ist offline   Mit Zitat antworten
Alt 04.06.10, 20:23   #2 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard

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):
kommentierter Ausschnitt   

Code:
00401069   /68 31404000     /PUSH Crackmme.00404031                  ; ASCII "PW : "
0040106E   |FF15 4C404000   |CALL DWORD PTR DS:[40404C]              ; Crackmme.004020D3
00401074   |A1 2C434000     |MOV EAX,DWORD PTR DS:[40432C]
00401079   |50              |PUSH EAX
0040107A   |50              |PUSH EAX
0040107B   |FF15 50404000   |CALL DWORD PTR DS:[404050]              ; Einlesen des Passworts
00401081   |8D0D 1C434000   |LEA ECX,DWORD PTR DS:[40431C]
00401087   |5A              |POP EDX
00401088   |E8 830F0000     |CALL Crackmme.00402010
0040108D   |FF35 1C434000   |PUSH DWORD PTR DS:[40431C]
00401093   |E8 A80F0000     |CALL Crackmme.00402040                  ; feststellen der laenge
00401098   |89C3            |MOV EBX,EAX
0040109A   |83FB 03         |CMP EBX,3
0040109D   |7F 0D           |JG SHORT Crackmme.004010AC              ; kleiner als 3 == falsch
0040109F   |68 13404000     |PUSH Crackmme.00404013                  ; ASCII "Key laenge zu klein"
004010A4   |FF15 54404000   |CALL DWORD PTR DS:[404054]              ; Crackmme.004022A4
004010AA  ^ EB BD           |JMP SHORT Crackmme.00401069
004010AC   |FF35 1C434000   |PUSH DWORD PTR DS:[40431C]
004010B2   |8B15 14434000   |MOV EDX,DWORD PTR DS:[404314]
004010B8   |FF35 2C434000   |PUSH DWORD PTR DS:[40432C]
004010BE   |E8 9D120000     |CALL Crackmme.00402360
004010C3   |8B15 18434000   |MOV EDX,DWORD PTR DS:[404318]
004010C9   |E8 92120000     |CALL Crackmme.00402360
004010CE   |5A              |POP EDX
004010CF   |59              |POP ECX
004010D0   |8915 2C434000   |MOV DWORD PTR DS:[40432C],EDX
004010D6   |0315 48404000   |ADD EDX,DWORD PTR DS:[404048]
004010DC   |E8 DF120000     |CALL Crackmme.004023C0                  ; vergleiche eingabe mit festkodiertem
004010E1   |74 44           |JE SHORT Crackmme.00401127
004010E3   |FF35 1C434000   |PUSH DWORD PTR DS:[40431C]
004010E9   |E8 520F0000     |CALL Crackmme.00402040                  ; nochmal laenge pruefen
004010EE   |89C3            |MOV EBX,EAX
004010F0   |83FB 05         |CMP EBX,5
004010F3   |75 20           |JNZ SHORT Crackmme.00401115
004010F5   |68 37404000     |PUSH Crackmme.00404037                  ; ASCII "Richtig"
004010FA   |FF15 54404000   |CALL DWORD PTR DS:[404054]              ; Crackmme.004022A4

wenn man nun an der Zeile:
Code:
004010DC   |E8 DF120000     |CALL Crackmme.004023C0
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.
CDW ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 04.06.10, 20:42   #3 (permalink)
Themenstarter
 
Registriert seit: 10.01.09
Mikse Leistung: Facit NTK
Likes: 0
Standard

DAnke

habe es mal mit F8 komplett durch gegangen wenn man sich alles anschaut kommt man hinter das Pass.

Und ist es schwer das crackme?
Mikse ist offline   Mit Zitat antworten
Alt 04.06.10, 21:28   #4 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard

Zitat:
Zitat von Mikse Beitrag anzeigen
Und ist es schwer das crackme?
Ich glaube, die Antwort kennst Du schon (das Passwort liegt im Klartext vor und lässt sich viel ohne Auwand ablesen - das wäre die Grundstufe )
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Alt 04.06.10, 22:06   #5 (permalink)
Themenstarter
 
Registriert seit: 10.01.09
Mikse Leistung: Facit NTK
Likes: 0
Standard

Ja stimmt aber auch nur wenn man step by step macht weil PASS wäre immer noch falsch
Mikse ist offline   Mit Zitat antworten
Alt 04.06.10, 22:25   #6 (permalink)
Themenstarter
 
Registriert seit: 10.01.09
Mikse Leistung: Facit NTK
Likes: 0
Standard

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?!

Geändert von Mikse (04.06.10 um 23:33 Uhr)
Mikse ist offline   Mit Zitat antworten
Alt 05.06.10, 01:01   #7 (permalink)
Themenstarter
 
Registriert seit: 10.01.09
Mikse Leistung: Facit NTK
Likes: 0
Standard

mal mein Crackme geändert vielleicht ist das ja schwerer!?
Angehängte Dateien
Dateityp: zip Crackmmee2.zip (2,3 KB, 9x aufgerufen)
Mikse ist offline   Mit Zitat antworten
Alt 05.06.10, 16:21   #8 (permalink)
 
Registriert seit: 20.07.06
Darkslide Leistung: Facit NTK
Likes: 21
Standard

Leider nicht....vorrausgesetzt man kennt die ersten 4 Buchstaben des Alphabets.
Darkslide ist gerade online   Mit Zitat antworten
Alt 05.06.10, 17:05   #9 (permalink)
Themenstarter
 
Registriert seit: 10.01.09
Mikse Leistung: Facit NTK
Likes: 0
Standard

Schade naja fange ja erst an.
Mikse ist offline   Mit Zitat antworten
Alt 05.06.10, 17:27   #10 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard

Zitat:
Zitat von Mikse Beitrag anzeigen
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.
CDW ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Hacks & Crackmes » My first Crackme
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61