Mein allererstes CrackMe (leicht?)

Halli, hallo :)
bin gerade mit meinem Crackme fertig geworden (wirklich keine große sache >.<) aber vielleicht ist es ja was für die Anfänger (wie mich) :D

Info's:
-geschrieben in Object Pascal (Delphi)
-serial (oder wie man es nennen mag :rolleyes: ) ist hardcoded :P (deshalb dachte ich dieses crackme ist was für anfänger :) )

Regeln:
Versucht den "serial" via. Olly (oder einem andern debugger) rauszubekommen ;) kein patchen!

Will nämlich wissen, wie ihr es hinbekommen habt den "Schutz" zu umgehen ;) Welcher es ist verrate ich an dieser stelle mal nicht :P

Viel spaß ;)
 
Code:
$ file crackme.exe
crackme.exe: MS-DOS executable PE  for MS Windows (GUI) Intel 80386 32-bit, UPX compressed
$ upx -d crackme.exe
                       Ultimate Packer for eXecutables
  Copyright (C) 1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007
UPX 3.00        Markus Oberhumer, Laszlo Molnar & John Reiser   Apr 27th 2007

        File size         Ratio      Format      Name
   --------------------   ------   -----------   -----------
    407552 <-    167424   41.08%    win32/pe     crackme.exe

Unpacked 1 file.
$ file crackme.exe
crackme.exe: MS-DOS executable PE  for MS Windows (GUI) Intel 80386 32-bit
$ strings crackme.exe | grep -C 5 Failed!
TForm1
Unit1
ZYYd
h4ckZ0r
Success!
Failed!
Uhu:E
ZYYd
h|:E
ZYYd
CrackMe
Nach der Stellung zu Urteilen könnte es "h4ckZ0r" sein... kann es aber aus Ermangelung einer Windowsinstalltion schlecht testen.
Und UPX ist kein Schutz! Es reduziert nur die Dateigröße ;)
 
Ich machs kurz:
Ich bin noch ein kleiner Anfänger, könnt ihr mir erklären wie ihr das Ding gelöst habt ? :)
 
Wie schon der eine Beitrag andeutete reicht hier eine simple String suche.
Programm starten --> irgendein Key eingeben --> Ausgabe mit "Failed" öffnet sich --> also wissen wir, dass wir in Olly nach Failed (ASCII) suchen müssen --> und dann steht dort direkt auch die Stelle wo der richtige Key ins Register geladen wird und welchen Wert bzw. wie dieser in ASCII lautet.

P.S: Weiß jetzt gerade nicht ob es "Failed" oder "Fail" war. Hab VM schon wieder zu ...
 
Mal wieder was schönes einfaches.

PEiD verrät:
UPX 0.89.6 - 1.02 / 1.05 - 2.90 (Delphi) stub -> Markus & Laszlo

Dank Plugin entpackt PEiD auch gleich UPX.
unpacked.exe in immunity geöffnet

text string suchen bringt uns zu:
004539A8 /. 55 PUSH EBP
004539A9 |. 8BEC MOV EBP,ESP
004539AB |. 6A 00 PUSH 0
004539AD |. 53 PUSH EBX
004539AE |. 8BD8 MOV EBX,EAX
004539B0 |. 33C0 XOR EAX,EAX
004539B2 |. 55 PUSH EBP
004539B3 |. 68 073A4500 PUSH unpacked.00453A07
004539B8 |. 64:FF30 PUSH DWORD PTR FS:[EAX]
004539BB |. 64:8920 MOV DWORD PTR FS:[EAX],ESP
004539BE |. 8D55 FC LEA EDX,DWORD PTR SS:[EBP-4]
004539C1 |. 8B83 F8020000 MOV EAX,DWORD PTR DS:[EBX+2F8]
004539C7 |. E8 80F0FDFF CALL unpacked.00432A4C
004539CC |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
004539CF |. BA 1C3A4500 MOV EDX,unpacked.00453A1C ; ASCII "h4ckZ0r"
004539D4 |. E8 7F08FBFF CALL unpacked.00404258
004539D9 |. 75 0C JNZ SHORT unpacked.004539E7
004539DB |. B8 2C3A4500 MOV EAX,unpacked.00453A2C ; ASCII "Success!"
004539E0 |. E8 8739FDFF CALL unpacked.0042736C
004539E5 |. EB 0A JMP SHORT unpacked.004539F1
004539E7 |> B8 403A4500 MOV EAX,unpacked.00453A40 ; ASCII "Failed!"
004539EC |. E8 7B39FDFF CALL unpacked.0042736C
004539F1 |> 33C0 XOR EAX,EAX
004539F3 |. 5A POP EDX
004539F4 |. 59 POP ECX
004539F5 |. 59 POP ECX
004539F6 |. 64:8910 MOV DWORD PTR FS:[EAX],EDX
004539F9 |. 68 0E3A4500 PUSH unpacked.00453A0E
004539FE |> 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
00453A01 |. E8 4604FBFF CALL unpacked.00403E4C
00453A06 \. C3 RETN

ASCII "h4ckZ0r" springt natürlich ins Auge.
 
"strings crackme.exe | grep -C 5 Failed!"
Gibbet sowas auch fest in Windows odr nur als tool? Also ein "Synonym" für grep(abgesehen von find und findstr. Ich will nur dieses "+-5") und ein Teil wie das strings.
LG Ev0

EDIT: So hat mir zu lange gedauert, hab einfach schnell mein eigenes grep geschrieben ;)
 
Zuletzt bearbeitet:
Zurück
Oben