Crackme [Profan Anwendung]

Hallo,

Hier nun eine Aufgabe die ich für mich selbst geschrieben habe aber leider schon seit geraumer zeit zu keiner lösung kam. Bin halt noch kein Profi will es aber werden.

Aufgabe: Serialabfrage umgehen somit das Programm funktioniert ;)

Einschränkung: Keine alles erlaubt

ps.: Schreibt doch dann bitte wie ihr es gelöst habt damit ich auch etwas dabei lerne.

Nun viel spaß

Anfang: 1 ZIP file. inhalt 1 Exe Datei Ohne Viren ;)
 
Zuletzt bearbeitet:
na dann kann mans ja ohne Bedenken öffnen!
Irgendwelche Bestätigungen diesbezüglich? Einfach eine Beschuldigung in den Raum setzen ist auch nicht fein ;), zudem die Software wunderbar in einer VM läuft und zumindest in dieser keinerlei "böse" Aktionen macht (auch keine bekannten VM Erkennungsversuche). Im übrigen wäre der Zielkreis einer "Malwareverteilungsaktion" bei Crackmes doch sehr sehr eingeschränkt ...

Damits nicht ganz so OT ist:
zumindest bei mir funktioniert die Eingabe:
7x3xxx
lässt sich relativ einfach herausfinden (relativ im Bezug darauf, dass hier quasi eine Art Interpreter vorliegt):
1. man gibt irgendwas 6 Stelliges ein - z.B "123456" ohne zu bestätigen
2. Nun könnte man OllyDbg mittels F12 pausieren und sich den Stack anschauen - etwas weiter "unten" im Stackfenster sieht man die Aufruferadressen der "Inputfunktion"
Code:
0244728C  |007200FE  pc_down.007200FE
02447290  |0041E2B4  pc_down.0041E2B4
02447294  ]024472B4
02447298  |00408386  RETURN to pc_down.00408386 from <JMP.&user32.DialogBoxParamA>
ein "Follow in Disassembler" auf diese Zeile führt und zu diesem Codestück:
Code:
00408378  |.  6A 00         PUSH 0                                   ; /lParam = NULL
0040837A  |.  8B5D 08       MOV EBX,[ARG.1]                          ; |
0040837D  |.  53            PUSH EBX                                 ; |DlgProc
0040837E  |.  51            PUSH ECX                                 ; |hOwner
0040837F  |.  52            PUSH EDX                                 ; |pTemplate
00408380  |.  50            PUSH EAX                                 ; |hInst
00408381  |.  E8 56FCFFFF   CALL <JMP.&user32.DialogBoxParamA>       ; \DialogBoxParamA
00408386  |.  5B            POP EBX
nun könnte man auf das POP EBX einen Breakpoint setzen und anschließend das Programm laufen lassen und "OK" bestätigen".
Olly pausiert brav am gesetzten Breakpoint
00408386 |. 5B POP EBX
Nun kann man einfach mittels "Step over" aka F8 den Code durchgehen bis man im "Hauptaufrufercode" landet:
Code:
0048FF97   .  50            PUSH EAX                                 ; /Arg2
0048FF98   .  A1 F8E74900   MOV EAX,DWORD PTR DS:[49E7F8]            ; |
0048FF9D   .  50            PUSH EAX                                 ; |Arg1 => 004A2978 ASCII "123456"
0048FF9E   .  B9 28014900   MOV ECX,pc_down.00490128                 ; |ASCII "Input"
0048FFA3   .  8D95 F47FFFFF LEA EDX,DWORD PTR SS:[EBP+FFFF7FF4]      ; |
0048FFA9   .  A1 C8E34900   MOV EAX,DWORD PTR DS:[49E3C8]            ; |
0048FFAE   .  8B00          MOV EAX,DWORD PTR DS:[EAX]               ; |
0048FFB0   .  E8 0FE4F8FF   CALL pc_down.0041E3C4                    ; \pc_down.0041E3C4
0048FFB5   .  84C0          TEST AL,AL                               ;  <------ man landet hier
man landet bei "TEST AL,AL" und sieht sehr schön den Aufrufer.
Einen Schritt weiter:
Code:
0048FFC3   .  A1 F8E74900   MOV EAX,DWORD PTR DS:[49E7F8]
sieht man plötzlich, wie ein Pointer auf die Eingabe in EAX landet:
Code:
004A2978
man klicke auf EAX, wähle "Follow in Dump" und erblicke:
Code:
004A2978  31 32 33 34 35 36 00 00 00 00 00 00 00 00 00 00  123456..........
nun überlegt man sich als fauler Mensch: "warum muss ich den ganzen Code verfolgen, wo doch die Eingabe sowieso zu irgendeiner Berechnung oder Vergleich herausgeholt wird?" - daher markiert man die 6 Bytes und wählt über Rechtsklick -> "Breakpoint" -> "Memory on access".
Ab nun lässt man Olly mittels F9 einfach freien lauf und wird nur dann "belästigt" wenn auf die Eingabe zugegriffen wird.
Das passiert beim ersten mal hier:
Code:
00405C4B   > /3A0A          CMP CL,BYTE PTR DS:[EDX]
00405C4D   . |74 17         JE SHORT pc_down.00405C66
00405C4F   . |3A4A 01       CMP CL,BYTE PTR DS:[EDX+1]
00405C52   . |74 11         JE SHORT pc_down.00405C65
wird aber nichts interessantes gemacht, wie man schnell durch eine kleine Codeverfolgung herausfindet.
Der zweite Zugriff hier:
Code:
00403058   > \8B08          MOV ECX,DWORD PTR DS:[EAX]
0040305A   .  66:8B40 04    MOV AX,WORD PTR DS:[EAX+4]
0040305E   .  890A          MOV DWORD PTR DS:[EDX],ECX
00403060   .  66:8942 04    MOV WORD PTR DS:[EDX+4],AX
sieht viel viel interessanter aus, vor allem weil man gleich im "Registers" Fenster einige interessante Strings wie die Eingabe und "Key%" erblickt.
Ab hier lohnt es sich, den Code genauer zu verfolgen. Die Eingabe wird hier nach [EDX] Pointer umkopiert. Man wiederholt einfach die Schritte wie vorher: Rechtsklick auf EDX, "Follow in Dump" markieren des Speichersabschnitt mit der Eingabe und "Breakpoint -> Memory on access"
Wieder lässt man Olly laufen und dieser stoppt hier:
Code:
004096C5  |.  807C1F FF 20  |CMP BYTE PTR DS:[EDI+EBX-1],20
004096CA  |.^ 76 F4         \JBE SHORT pc_down.004096C0
man wird aber enttäucht, da hier nicht so viel aufregendes passiert.
Der nächste "Speicherzugriff" ist hier:
Code:
00405B22  |.  66:C74402 FE >MOV WORD PTR DS:[EDX+EAX-2],0
00405B29  |.  83C0 08       ADD EAX,8
00405B2C  |.  5A            POP EDX
00405B2D  |.  8950 FC       MOV DWORD PTR DS:[EAX-4],EDX
00405B30  |.  C740 F8 01000>MOV DWORD PTR DS:[EAX-8],1
man sieht noch in ESI einen "keya%" String. Bleibt man am Ball (also mittel F8 den Code weiterverfolten) kommt man nach ein paar Minuten hier raus:
Code:
00467EE9   > \A1 40E84900   MOV EAX,DWORD PTR DS:[49E840]
00467EEE   .  8B00          MOV EAX,DWORD PTR DS:[EAX]
00467EF0   .  8945 90       MOV DWORD PTR SS:[EBP-70],EAX
00467EF3   .  8B5D 90       MOV EBX,DWORD PTR SS:[EBP-70]
und hier entdeckt man ganz interessante Dinge - wie z.B dass dem "keya%" String plötzlich noch eine Zahl zugewiesen wurde - das ganze auch noch als String. Denn EAX zeigt auf
Code:
031BC408  6B 65 79 61 25 3D 37 xx 33 xx xx xx              keya%=7x3xxx
(hier zu muss man nichts verfolgen oder abgleichen - der String wird automatisch von Olly geladen und gegenüber "EAX" angezeigt ;)
Und damit hat man schonmal den Code.
 
danke schonmal für diese Lösung die soweit auch Richtig ist.

Jedoch die aufgabe war : Serialabfrage zu umgehen ^^ und nicht die serial herauszufinden ;)

daher aufgabe noch nicht gelöst.

MFG
 
Zurück
Oben