CDW's Crackme - solved

CDW

0
Mitarbeiter
Da ich micht hier nicht als Schmarotzrer durchgammeln will ;), auch von mir ein kleines Crackme zum knobeln:

Erlaubt ist: alles - außer eine eigene Erfolgsmeldung einpatchen ;)
Ziel: Passwort finden oder auf Erfolgsmeldung patchen.

Bei Falscheingabe kommt eine Falschmeldung und die Crackme beendet sich. Ist das Passwort richtig, merkt man das sofort.
Packer: keine, zumindest nichts, was nicht von mir kommt.
Die paar Antidebuggerroutinen sind im Prinzip nur zur Zierde da - sollten sich sehr schnell finden.
Damit es nicht zu schwer wird, ist das Passwort hardcoded und unverschlüsselt drin. Sollte sich also schnell finden lassen.
Mir gings eher um das drumherum und um die paar Spielereien ;)

EDIT: irgendwie fast 100 Views aber nur 14 Downloads. Wer glaubt die Crackme wäre unter seinem Niveau, nur weil das Passwort unverschlüsselt drinsteht, der irrt sich vielleicht :rolleyes:. So ganz einfach ist das auch nicht gestrikt.

EDIT2: im BuhaBoard haben es schon 2 Leute gelöst, sind die Buhas euch denn überlegen? ;)
 
Hallo CDW.

Weiß ja nicht wie die anderen das hier sehen, aber ich geh das jetzt mal an, sofern mir mein Kleiner mal ein paar Stunden Ruhe gönnt. *g*

Gruss

root
 
Sorry. Ich hab im Moment seeehr wenig Zeit. Denn in der Schule gehts jetzt um die Wurst .
Zudem bin ich durch den Crackme-Contest und insbesondererweise auch durch naits Crackme noch genug geschädigt und musste gegen Ferienende auch dort aufgeben.


OffTopic:
EDIT2: im BuhaBoard haben es schon 2 Leute gelöst, sind die Buhas euch denn überlegen?

Ich weiss nicht, aber sind nicht viele die im BuBo gereggt sind, auch hier ?
Und hör ich da nicht etwa ein paar Relikte einer alten Konkurenzschaft beider Boards ? :D
 
OT:
insbesondererweise auch durch naits Crackme
meinst Du naits 10tes Crackme? Das hatte es wirklich in sich.
Ich weiss nicht, aber sind nicht viele die im BuBo gereggt sind, auch hier ?
es geht, glaube ich, leider sind die Nicks immer anders (TBM? ;) ) so dass man es nicht auf Anhieb erkennen kann.
Also nait und cyrus-tc haben mir eine Lösung zugeschickt.
 
es geht, glaube ich, leider sind die Nicks immer anders (TBM? Augenzwinkern ) so dass man es nicht auf Anhieb erkennen kann.

Ups. Hmm das hätte ich vielleicht dazu sagen können. Ne ich bin dort Aimkill. Und ich musste schon bei Crackme 9 passen. Ich war glaub ich auch schon nah dran. Es gab nur eine unvorhergesehene Anomalie, die ich nicht bedacht hatte. :D
Ich brauche beim Reversen auch immer ein bisschen "länger". Da ich oft Sachen nicht so schnell sehe. Genauso gehts mir bei jeder Mathematik-Klausur.

Dann fing auch schon die Schule an. Naja dann wollt ich meine eingeschränkte Freizeit lieber nicht mit langen Abenden in Olly und kaltem Kaffee verbringen und habe diese Aktivität doch glatt wegrationalisiert.

Ich überlege aber noch mal den Joker zu benutzen um mal im 10. Crackme reinzu"schnuppern" :D
Aber die Crackmes werden doch bestimmt nach Contestende sowieso alle öffentlich gemacht oder ?
 
das war einfacher, als ich dachte. ich nahm an, ein von CDW geschriebenes crackme würde schwieriger sein. :D

die lösung lautet: Equilibrium
 
Gut gemacht ;)
Der zweite Loop versucht, an Adressen zu schreiben, an denen sich in unserem Prozess kein Speicher befindet
So gemein bin ich nicht... wenn ich die Stelle richtig interpretiert habe, dann meinst Du das hier:
Code:
;einlesen:
       
          push offset template
	      push 12
	      push WM_GETTEXT
	      push eax
	      mov eax,8818h
	      shl eax,1      
	      mov eax,[eax]
	      call eax      
	         ;invoke SendMessage,eax,WM_GETTEXT,12,addr template
	         
         CHECK_END:
         rdtsc
         push eax
         encode_4ever2 CHECK,CHECK_END+4-CHECK,SCHLUESSEL2
         rdtsc
         pop edx
         sub eax,edx
         shr eax,18
         add eax,offset template+12
         encode_4ever2 eax,Titel-template,SCHLUESSEL2 ;kleiner antidebugschutz
         
         encode_1  template,12, SCHLUESSEL1 
         assume FS:NOTHING
         mov ebx, fs:[30h] 	; pointer to PEB
		 movzx eax, byte ptr[ebx+02]
	  	 or al,al
		jz normal_
		jmp out_
	    normal_:
	   
	    inc eax
	    mov byte ptr[ebx+02],al
             pushad
	     invoke Checkpass     
	     popad
		movzx eax, byte ptr[ebx+02]
		test al,al
		jz out_
		
		jmp @f
	    out_:
		 jmp quit_dialog
        @@: :

encode_4ever2 eax,Titel-template,SCHLUESSEL2 ;kleiner antidebugschutz
mit dem "kleinen Antidebuggerschutz" gab es aber Probleme auf lansameren Rechnern, habe es deshalb sicherheitshalber höher gesetzt (shr eax 18 ). Der Sinn hier ist: wenn man mit dem Debugger durchsteppt, braucht man erheblich mehr Zeit bzw Instructions (rdtsc). Dann ergibt shr eax,18 nciht mehr 0 und damit wird auch irgendein Speicher überschrieben. Also nur wenn Debugger läuft ;). Man kan natürlich auch "manuell" EAX auf 0 stellen.
encode4ever macht wie der Name schon sagt die Funktion unbenutzbar...

Der zweite "Schutz" ist die "IsDebuggerPresent" Abfrage (nicht über die API, sondern direkt). Da es dafür Plugins gibt, wird dann der Debugger auf 1 (vorhanden) gesetzt. Und ein Plugin setzt es dann wieder auf 0 - wenn ich also bei der zweiten Abrfage keine 1 vorfinde, weiß ich, dass hier was faul ist. Funktioniert natürlich nur, wenn man zwischen den beiden Abfragen irgendwo durchgesteppt hat

ich nahm an, ein von CDW geschriebenes crackme würde schwieriger sein.
Ich wollte ja nicht so ganz gemein sein :D
 
Zurück
Oben