Hackerboard WikiHaboBlog

[HaBo]

 
Hacks & Crackmes Tests, Fragen oder Hilfestellungen. Crackmes und Hackits werden hier diskutiert.

Mein 2.Crackme

Diskussion: Mein 2.Crackme im Forum Hacks & Crackmes, in der Kategorie Software Home; Zum ausklingen lassen des Wochenendes ein neues Crackme. Es enthält eine kleine Gemeinheit, welche den Anfänger vielleicht verzweifeln lässt, aber ...

Antwort
Alt 19.04.09, 20:20   #1 (permalink)
 
Benutzerbild von mauralix
 
Registriert seit: 17.04.06
mauralix Leistung: 8086
Likes: 3
Mein 2.Crackme


Zum ausklingen lassen des Wochenendes ein neues Crackme. Es enthält eine kleine Gemeinheit, welche den Anfänger vielleicht verzweifeln lässt, aber sollte nicht zu schwer sein, da der Code sehr schlank ist. Wieder in reinem C geschrieben, daher keine große Aufblähung.

Angehängte Dateien
Dateityp: rar crackme_20090419.rar (3,8 KB, 58x aufgerufen)
mauralix ist offline   Mit Zitat antworten
Alt 23.04.09, 19:40   #2 (permalink)
 
Registriert seit: 17.12.05
Asaru Leistung: Facit NTK
Likes: 0
Standard

Solved:
thx fuer dieses Crackme.


Lösung   


benutze Tools:
IDA Pro


Was muss das Passwort erfüllen?
  • * Nicht laenger als 9 Zeichen
    * die Zahlen im Passwort muessen die Quesumme 18 haben
    * Andere Zeichen können beliebig im String stehen.


Beispiel: gültige Passwörter
  • 99
    123453
    Asaru198


Besonderheiten:
Die Funktion IsDebuggerPresent wird aufgelistet, jedoch nie aufgerufen.
Was er vergleicht damit er zur genannten Funktion springen würde, habe ich nicht reversed.


Details:

In der Funktion Main wird der Startscreen aufgebaut.
Code:
mov     ebx, ds:printf

...

push    offset aAufgabeDerText ; "Aufgabe:Der Text \"PW richtig\" soll ersc"...
call    ebx ; printf
push    offset aVielSpassBeimC ; "-------------  Viel Spass beim Cracken "...
call    ebx ; printf
push    offset aWww_hackerboar ; "---------------- www.hackerboard.de ---"...
call    ebx ; printf
push    offset aVonMauralixHtt ; "------- von mauralix http://mauralix.bl"...
call    ebx ; printf
push    offset aPw      ; "\n\nPW: "
call    ebx ; printf

Im Anschluss wird fgets aufgerufen:
Code:
push    eax             ; File
lea     ecx, [esp+5Ch+Buf]
push    0Ah             ; MaxCount
push    ecx             ; Buf
call    ds:fgets
Das Ergebnis wird in ECX gespeichert und es werden maximal 10 Zeichen eingelesen


Nun wird der Stack um 9 Int-Zeichen verschoben und das Ergebnis in EAX kopiert
anschliessend ruft er die Funktion zum Überprüfen des Passwortes auf:
(24h = 36 ... 36/4 = 9)
Code:
add     esp, 24h
lea     eax, [esp+40h+Buf]
call    sub_141000

Die Funktion holt sich nun das erste Zeichen der Passworteingabe,
prüft, ob es ein Digit ist (Zeichen: 0-9)
Falls es kein Digit ist, wird es einfach ignoriert.
Wenn Digit = True, dann wird das Zeichen zu seinem INT Wert aufgeloest durch atoi und dem Zwischenergebnis hinzugerechnet.
Eine Schleife nimmt nun jedes Zeichen vom eingegeben Passwort und durchlaeuft dann denselben Prozess.


Am Ende wird geprüft ob das Ergebnis 18 entspricht.
Code:
cmp     edi, 12h
jnz     short loc_141065

Direkt nach der Funktion überprüft er den Rückgabewert
Bei einem gültigen Passwort folgt er dem GoodBoy-,
bei ungültigen dem BadBoy-Weg.

Im GoodBoy Weg wird der String OV qhbgshf zu PW richtig konvertiert und angezeigt.
Asaru ist offline   Mit Zitat antworten
   
HaBOT
 

Werbung ist gerade online    
Alt 23.04.09, 21:15   #3 (permalink)
Themenstarter
 
Benutzerbild von mauralix
 
Registriert seit: 17.04.06
mauralix Leistung: 8086
Likes: 3
Standard

Gratulation Asaru!
Sehr gut gelöst und sauber dokumentiert. Viel mehr gibt es dazu eigentlich nicht zusagen. Ein Anfänger hat vermutlich schon Probleme, da er nicht so einfach nach der Falschmeldung suchen kann, da diese ja "verschlüsselt" ist...
Den Source hänge ich an wenn ich wieder vor meinem Rechner sitze. Ist die Lösung eigentlich schwer gefallen, oder war es nur Kinderkram?
mauralix ist offline   Mit Zitat antworten
Alt 23.04.09, 21:30   #4 (permalink)
 
Registriert seit: 17.12.05
Asaru Leistung: Facit NTK
Likes: 0
Standard

War das erste mal, das ich eine Passwort Funktion Reversed habe. Bisher nur Tutorials im Netz angesehen.

mit IDA pro war es recht einfach durch dir graphische Darstellung.
und hab halt in der Schleife alles kommentiert.
Was ich zuerst übersehen hatte war die Begrenzung auf 9 Zeichen.

Am Anfang war ich Überrascht, warum die IsDebuggerPresent Funktion nie aufgerufen wurde hatte daraufhin erstmal das komplette "idastealth" Plugin deinstalliert *g*


hat jedenfalls spass gemacht

PS: kennst du ein Tool mit dem man seinen Bildschirm aufnehmen kann um daraus ein SWF Video zu machen? In einigen Tuts gabs dann immer Texte die eingeblendet wurden und man konnte klicken zum weiter ansehen. Leider keine Ahnung wo ich so ein Tool herbekomme
Asaru ist offline   Mit Zitat antworten
Alt 24.04.09, 17:11   #5 (permalink)
 
Registriert seit: 03.02.09
Netonator Leistung: Facit NTK
Likes: 0
Standard

Ja kenne ich - Camtasia Studio 6. Ist super und wahrscheinlich auch das beste...
Einfach mal googeln.

Lg
Netonator ist offline   Mit Zitat antworten
Alt 24.04.09, 20:41   #6 (permalink)
Themenstarter
 
Benutzerbild von mauralix
 
Registriert seit: 17.04.06
mauralix Leistung: 8086
Likes: 3
Standard

Nur zum Nachvollziehen. Das ist der Code des Crackmes.

C Code   

Code:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

void simple_crypt(char *text,char shift)
{
	while(*text) {
		if (isalpha(*text))
			*text += shift;
		text++;
	}
}

int check_pw(char *pw)
{
	int sum = 0;
	char buf[2];
	/* Die Summe der Ziffern muss 18 ergeben */
	while(*pw) {
		if(isdigit(*pw)) {
			sprintf(buf,"%c",*pw);
			sum += atoi(buf);
		}
		pw++;
	}
	if (sum == 18) 
		return 1;
	return 0;
}

int main(int argc,char **argv)
{
	char *result_text = NULL;
	char pw_input[10];
	char pw_falsch[] = {"OV kdhcdq mhbgs qhbgshf"}; /* PW leider nicht richtig */
	char pw_richtig[] = {"OV qhbgshf"}; /* PW richtig */

	printf("Hallo und herzlich willkommen zu diesem Crackme!\n");
	printf("Aufgabe:Der Text \"PW richtig\" soll erscheinen\n");
	printf("-------------  Viel Spass beim Cracken  ------------\n");
	printf("---------------- www.hackerboard.de ----------------\n");
	printf("------- von mauralix http://mauralix.blog.de -------\n");
	
	printf("\n\nPW: ");
	fgets(pw_input,sizeof(pw_input),stdin);

	if (check_pw(pw_input)) {
		simple_crypt(pw_richtig,1);
		result_text = pw_richtig;
	} else {
		simple_crypt(pw_falsch,1);
		result_text = pw_falsch;
	}
	printf("\n%s\n",result_text);

	system("pause");
	return 0;
}
mauralix ist offline   Mit Zitat antworten
Alt 30.04.09, 18:31   #7 (permalink)
 
Registriert seit: 17.12.05
Asaru Leistung: Facit NTK
Likes: 0
Standard

Zitat:
Original von Netonator
Ja kenne ich - Camtasia Studio 6. Ist super und wahrscheinlich auch das beste...
Einfach mal googeln.

Lg
danke dir
Asaru ist offline   Mit Zitat antworten
Alt 30.04.09, 20:00   #8 (permalink)
 
Registriert seit: 07.03.08
90nop Leistung: Facit NTK
Likes: 0
Standard

Das Crackme enthällt n Bug
Password   

222222222

eigentlich egal wie viele 2, solange > 9 ;)


siehe screenshot.

Geändert von 90nop (11.03.10 um 08:54 Uhr)
90nop ist offline   Mit Zitat antworten
Alt 01.05.09, 10:11   #9 (permalink)
Themenstarter
 
Benutzerbild von mauralix
 
Registriert seit: 17.04.06
mauralix Leistung: 8086
Likes: 3
Standard

Von einem Bug kann nicht die Rede sein. Mir ist das sehr wohl klar. Die Summe der Ziffern muss 18 ergeben wobei nur die ersten 9 Zeichen berücksichtigt werden, da alle weiteren ja von fgets() abgeschnitten werden, wie auch Asaru schon richtig erkannte.
mauralix ist offline   Mit Zitat antworten
Antwort
   

Werbung ist gerade online    

[HaBo] » Software Home » Hacks & Crackmes » Mein 2.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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Mein 2th CrackMe^^ theend Hacks & Crackmes 9 19.01.09 18:01
Mein 3. CrackMe PMTheQuick Hacks & Crackmes 5 30.06.07 12:13
Mein erstes CrackMe Cracker Hacks & Crackmes 26 19.02.06 16:19
Mein 2. Crackme DolphVS Hacks & Crackmes 30 11.08.05 16:52
mein Crackme Biohazard Hacks & Crackmes 17 24.05.05 21:54


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