Relativ einfaches Crackme

Jetzt habe ich auch mal ein Crackme geschrieben. Sollte realativ einfach zu lösen sein, da nur wenige Gemeinheiten enthalten sind. Es ist nicht nur ein Passwort möglich. Anfänger können von mir aus auch patchen, ist aber natürlich keine Herausforderung. Geschrieben ist das Crackme in C (Visual Studio 2008 Express)
 
Das Passwort muss folgende Kriterien erfüllen:

- 10 Zeichen lang, wobei das letzte Zeichen ein x,y oder z sein muss!
- 4,6 und 8 Zeichen müssen zusammen hex(64), hex(DE) oder hex(1BC) ergeben

Beispiel
Passwort:123150709x

4 = 1
6 = 0
8 = 0

hex(64) = dez(100)
 
Aber wie kommst du darauf, welche kriterien das PW erfüllen muss?

würd ich nur gern wissen, weil ich von sowas nicht viel ahnung hab!
THX schon mal
 
1. Crackme in Olly laden
2. Search for -> All intermodular calls
3. Breakpoint bei fgets (liesst die Eigabe in den EAX Register ein)
4. Run program (F9)

Code:
004010F0  /> 55             PUSH EBP
004010F1  |. 8BEC           MOV EBP,ESP
004010F3  |. 81EC AC000000  SUB ESP,0AC
004010F9  |. 53             PUSH EBX
004010FA  |. 56             PUSH ESI
004010FB  |. 57             PUSH EDI
004010FC  |. C745 98 000000>MOV DWORD PTR SS:[EBP-68],0
00401103  |. 68 44574000    PUSH crackme_.00405744                   ; /format = "password:"
00401108  |. FF15 D0824000  CALL DWORD PTR DS:[<&MSVCR90D.printf>]   ; \printf
0040110E  |. 83C4 04        ADD ESP,4
00401111  |. FF15 D4824000  CALL DWORD PTR DS:[<&MSVCR90D.__iob_func>;  MSVCR90D.__p__iob
00401117  |. 50             PUSH EAX                                 ; /stream
00401118  |. 6A 63          PUSH 63                                  ; |n = 63 (99.)
0040111A  |. 8D45 9C        LEA EAX,DWORD PTR SS:[EBP-64]            ; |
0040111D  |. 50             PUSH EAX                                 ; |s
0040111E  |. FF15 D8824000  CALL DWORD PTR DS:[<&MSVCR90D.fgets>]    ; \fgets -> Eingabe in EAX speichern
00401124  |. 83C4 0C        ADD ESP,0C
00401127  |. 8D45 9C        LEA EAX,DWORD PTR SS:[EBP-64]
0040112A  |. 50             PUSH EAX                                 ; /s
0040112B  |. E8 8C000000    CALL <JMP.&MSVCR90D.strlen>              ; \strlen -> laenge des Strings in EAX speichern
00401130  |. 83C4 04        ADD ESP,4
00401133  |. C64405 9B 00   MOV BYTE PTR SS:[EBP+EAX-65],0
00401138  |. 8D45 9C        LEA EAX,DWORD PTR SS:[EBP-64]
0040113B  |. 50             PUSH EAX
0040113C  |. E8 C4FEFFFF    CALL crackme_.00401005                   ;  Algo -> mit F7 naeher anschauen
00401141  |. 83C4 04        ADD ESP,4
00401144  |. 8945 98        MOV DWORD PTR SS:[EBP-68],EAX
00401147  |. 837D 98 00     CMP DWORD PTR SS:[EBP-68],0
0040114B  |. 74 0C          JE SHORT crackme_.00401159
0040114D  |. C785 54FFFFFF >MOV DWORD PTR SS:[EBP-AC],crackme_.00405>;  ASCII "ok"
00401157  |. EB 0A          JMP SHORT crackme_.00401163
00401159  |> C785 54FFFFFF >MOV DWORD PTR SS:[EBP-AC],crackme_.00405>;  ASCII "falsch"
00401163  |> 8B85 54FFFFFF  MOV EAX,DWORD PTR SS:[EBP-AC]
00401169  |. 50             PUSH EAX                                 ; /<%s>
0040116A  |. 68 28574000    PUSH crackme_.00405728                   ; |format = "Password %s
"
0040116F  |. FF15 D0824000  CALL DWORD PTR DS:[<&MSVCR90D.printf>]   ; \printf
00401175  |. 83C4 08        ADD ESP,8
00401178  |. 68 20574000    PUSH crackme_.00405720                   ; /command = "pause"
0040117D  |. FF15 DC824000  CALL DWORD PTR DS:[<&MSVCR90D.system>]   ; \system
00401183  |. 83C4 04        ADD ESP,4
00401186  |. 33C0           XOR EAX,EAX
00401188  |. 5F             POP EDI
00401189  |. 5E             POP ESI
0040118A  |. 5B             POP EBX
0040118B  |. 8BE5           MOV ESP,EBP
0040118D  |. 5D             POP EBP
0040118E  \. C3             RETN


00401020  /> 55             PUSH EBP
00401021  |. 8BEC           MOV EBP,ESP
00401023  |. 83EC 4C        SUB ESP,4C
00401026  |. 53             PUSH EBX
00401027  |. 56             PUSH ESI
00401028  |. 57             PUSH EDI
00401029  |. C745 FC 000000>MOV DWORD PTR SS:[EBP-4],0
00401030  |. C745 F4 000000>MOV DWORD PTR SS:[EBP-C],0
00401037  |. 8B45 08        MOV EAX,DWORD PTR SS:[EBP+8]
0040103A  |. 50             PUSH EAX                                 ; /s
0040103B  |. E8 7C010000    CALL <JMP.&MSVCR90D.strlen>              ; \strlen
00401040  |. 83C4 04        ADD ESP,4
00401043  |. 83F8 0A        CMP EAX,0A                               ;  Muss 10 Zeichen lang sein
00401046  |. 75 72          JNZ SHORT crackme_.004010BA
00401048  |. 8B45 08        MOV EAX,DWORD PTR SS:[EBP+8]
0040104B  |. 0FBE48 09      MOVSX ECX,BYTE PTR DS:[EAX+9]
0040104F  |. 83F9 78        CMP ECX,78                               ;  10te Zeichen == hex(78)=x?
00401052  |. 74 18          JE SHORT crackme_.0040106C
00401054  |. 8B45 08        MOV EAX,DWORD PTR SS:[EBP+8]
00401057  |. 0FBE48 09      MOVSX ECX,BYTE PTR DS:[EAX+9]
0040105B  |. 83F9 79        CMP ECX,79                               ;  10te Zeichen == hex(79)=y?
0040105E  |. 74 0C          JE SHORT crackme_.0040106C
00401060  |. 8B45 08        MOV EAX,DWORD PTR SS:[EBP+8]
00401063  |. 0FBE48 09      MOVSX ECX,BYTE PTR DS:[EAX+9]
00401067  |. 83F9 7A        CMP ECX,7A                               ;  10te Zeichen == hex(7A)=z?
0040106A  |. 75 4E          JNZ SHORT crackme_.004010BA
0040106C  |> 8B45 08        MOV EAX,DWORD PTR SS:[EBP+8]
0040106F  |. 8A48 03        MOV CL,BYTE PTR DS:[EAX+3]               ;  CL = 4te Zeichen
00401072  |. 884D F8        MOV BYTE PTR SS:[EBP-8],CL
00401075  |. 8B45 08        MOV EAX,DWORD PTR SS:[EBP+8]
00401078  |. 8A48 05        MOV CL,BYTE PTR DS:[EAX+5]               ;  CL = 6te Zeichen
0040107B  |. 884D F9        MOV BYTE PTR SS:[EBP-7],CL
0040107E  |. 8B45 08        MOV EAX,DWORD PTR SS:[EBP+8]
00401081  |. 8A48 07        MOV CL,BYTE PTR DS:[EAX+7]               ;  CL = 8te Zeichen
00401084  |. 884D FA        MOV BYTE PTR SS:[EBP-6],CL
00401087  |. C645 FB 00     MOV BYTE PTR SS:[EBP-5],0
0040108B  |. 8D45 F8        LEA EAX,DWORD PTR SS:[EBP-8]             ;  EAX = 4te + 6te + 8te Zeichen
0040108E  |. 50             PUSH EAX                                 ; /s
0040108F  |. FF15 E8824000  CALL DWORD PTR DS:[<&MSVCR90D.atoi>]     ; \atoi
00401095  |. 83C4 04        ADD ESP,4
00401098  |. 8945 F4        MOV DWORD PTR SS:[EBP-C],EAX
0040109B  |. 837D F4 64     CMP DWORD PTR SS:[EBP-C],64              ;  hex(64)
0040109F  |. 74 12          JE SHORT crackme_.004010B3
004010A1  |. 817D F4 DE0000>CMP DWORD PTR SS:[EBP-C],0DE             ;  hex(DE)
004010A8  |. 74 09          JE SHORT crackme_.004010B3
004010AA  |. 817D F4 BC0100>CMP DWORD PTR SS:[EBP-C],1BC             ;  hex(1BC)
004010B1  |. 75 07          JNZ SHORT crackme_.004010BA
004010B3  |> C745 FC 010000>MOV DWORD PTR SS:[EBP-4],1               ;  FLAG FOR SUCCESS!
004010BA  |> 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]
004010BD  |. 5F             POP EDI
004010BE  |. 5E             POP ESI
004010BF  |. 5B             POP EBX
004010C0  |. 8BE5           MOV ESP,EBP
004010C2  |. 5D             POP EBP
004010C3  \. C3             RETN
 
Zurück
Oben