ivegotaCrackMe #1

Hier mal mein erstes Crackme.

die edit felder sind mit absicht deaktiviert und nicht zur eingabe gedacht. ;)
und bevor jemand länger sinnlos rumprobiert bzw hier nachfragt noch n kleiner hinweis: das pw wird NICHT auf die gleiche weise eingelesen wie der username.
das crackme ist solved wenn ihr usernamen + richtiges passwort + lösungswort habt.

edit: kein packer. keine anti-debugger-routinen.

viel spass. :)
 
nett. mal bissel was anderes, auch wenn der keygen-algo arg einfach ist. ich hab eine kleine lösung gecodet. wie ihr den namen reinbringt, müsst ihr schon selber wissen. :D

(in dem verzeichnis ausführen, in dem auch crackme1.exe ist. achtung spoiler, nicht reingucken, wenn ihrs zu 100% selber lösen wollt.)

tu_es.zip angehängt
 
sehr gut! ;)

hast du das mit der pw eingabe übers debuggen rausgefunden oder über den versteckten hinweis innerhalb des crackmes?
 
@Leiche
schreib mal bitte ein kleines tut und häng is den anhang, dann haben die anderen mehr davon.
nur vom keygen source kann man ja nicht wirklich nachvollziehen, wie man das crackme löst.
 
welcher versteckte hinweis im crackme?

ok, hab schnell ein tut hingerotzt. :D

und hier der code
Code:
#include <windows.h>
#include <stdio.h>

char name[256];
char key[16];
DWORD lnkey;

void keygen()
{
	DWORD i, ln, di=0x63, a;

// ich schreibe hier explizit 'signed', um deutlich zu machen, dass der char im
// crackme mit movSx (move sign extend) ausgelesen wird. der compiler würde in
// diesem fall auch ohne 'signed' ein movsx generieren. es dient nur der veranschaulichung.
	signed char *p=name;

	ln = lstrlen(name); i = 0;
	while(di < 0x989681){
		a = *p;
		di += 2 * a;
		a += di;
		di = 8 * a;
		di -= a;
		if(!*++p) p = name;
	}
	lnkey = wsprintf(key, "%u", di) + 1;
}

int main()
{
	HANDLE hf;
	DWORD byteswritten;

	printf("ivegotaCrackme.1.Keygen.Patch\nvon eurem Freund Leiche vom HaBo\n\nName: ");

	gets(name); // achtung, puffer könnte überschrieben werden

	keygen();
	printf("Schluessel: %s\n\n", key);
	hf = CreateFile("crackme1.exe", GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL,
					OPEN_EXISTING, 0, 0);
	if(hf == INVALID_HANDLE_VALUE){
		printf("Kann crackme1.exe nicht zum Schreiben oeffnen.\n");
		return(0);
	}

	SetFilePointer(hf, 0x10FF0, NULL, FILE_CURRENT);
	WriteFile(hf, key, lnkey, &byteswritten, NULL);
	if(byteswritten != lnkey){
		printf("Fehler beim Schreiben in crackme1.exe.\n");
		CloseHandle(hf);
		return(0);
	}

	CloseHandle(hf);
	printf("Schluessel wurde in crackme1.exe geschrieben.\n");

	return(0);
}


editiert. Habs Tutorial mal angehängt. ;) root
 
Original von Leiche
welcher versteckte hinweis im crackme?
in der stringtabelle ist ein morsecode-string in dem steht dass das pw am ende der datei eingelesen wird. aber durch das wort "dummypassword" wars wohl eh zu einfach. hätte ich mal weglassen sollen. dann hätte man es entweder über den hinweis oder über createfile/readfile im debugger rausfinden müssen.

ein bitte noch an dich. hänge demnächst mal bitte deine solutions in den anhang deines postes. dann sind die dateien hier auf m server.
bei externen hostern ist das immer so ne sache, dass die dateien früher oder später nicht mehr erreichbar sind.
 
Zurück
Oben