Myslowice 09.07.2001r.


co	:CrackMe 1.0 by cybult
skad	:www.crackmes.prv.pl
czym	:SoftICE (of coz), IDA
poziom	:newbies


start:

na poczatek radze przeczytac uwaznie plik z info. przed uruchomieniem crackme musimy sie
upewnic czy nie ma zabezpieczenia anty-debugg, wiec dizasemblujemy nasz programik
dizasemblerem IDA. pewnie zapytasz - czemu IDA, przeciez mozna W32Dasm ? otoz, gdy
zobaczylem rozmiar pliku pomyslalem, ze jak na crackme dla newbies, zajmuje troche za duzo.
gdy zdizasemblowalem programik, zobaczylem, ze kodu jest tam gora 2kilo bajty, a
crackme zajmuje 15kilo ? zadnych bitmap - dziwne ??? okazalo sie, ze autor wkompilowal
w crackme 3 rozne icony:
16*16 24k
32*32 24k
48*48 24k
i wszystko jasne, po strachu. po przejzeniu kodu nie znalazlem zadnych uciazliwych
zabezpieczen. dobra przechodzimy do lamania...


uruchamiam crackme i widze jakis dziwne rzeczy...editbox na name i serial, przeciez
w info pisalo, ze nalezy znalesc haselko ? no dobra, zakladamy bpx'a na GetDlgItemTextA
w edi'cie "name" wpisujemy jakis znak. wyskakuje SI dajemy F12 i widzimy:

;
loc_401127:						;oto cala procka sprwadzania hasla (IDA)
		push	14h
		push	offset dword_4031A4		;miejsce pobrania tekstu z edit'a
		push	6Ah ; 'j'			;ID pierwszego edit'a "name"(haslo)
		push	dword ptr [ebp+8]
		call	GetDlgItemTextA			;pobieranie tekstu z edit'a
		test	eax, eax			;sprawdzenie czy cos wpisano
		jz	short loc_4011A0
		cmp	eax, 0Ch			;sprawdzania ilosci liter haselka, jak
		jnz	short loc_4011A0		;jest 12 to zaczyna sprawdzac
		mov	eax, offset dword_4031A4
		mov	eax, ds:dword_4031A4
		xor	eax, 0Ah
		add	eax, 19832001h
		sub	eax, 1
		cmp	eax, 7DEA8147h			;jak cos nie tak - god bye
		jnz	short loc_4011A0
		mov	eax, ds:dword_4031A8
		xor	eax, 0Bh
		add	eax, 19832001h
		sub	eax, 10h
		cmp	eax, 93D6405Bh			;jak cos nie tak - god bye
		jnz	short loc_4011A0
		mov	eax, ds:dword_4031AC
		xor	eax, 0Ch
		add	eax, 19832001h
		sub	eax, 100h
		cmp	eax, 3AE48B6Eh			;jak cos nie tak - god bye
		jnz	short loc_4011A0
		push	offset aCongratulation		;wiadomosc
		push	69h ; 'i'			;ID drugiego edit'a "serial"
		push	dword ptr [ebp+8]
		call	SetDlgItemTextA			;wyswietla w edi'cie wiadomosc
		leave	
		retn	10h				;powrot
;

jak widac prosta sprawa, po kazdym wcisnietym(ze tak powiem) klawiszu, system
wysyla do programu WM_COMMAND (taki message systemowy), a program zaczyna sprawdzanie.
zostala jeszcze sprawa drugiego edit'a, jak widac program wyswietla tam info z gratulacjami.
teraz musimy policzyc serial...wszystkie operacje sa odwracalne wiec do dziela:
;------------------------------------
czesc pierwsza:

mov	eax, ds:dword_4031A4	;do eax, wklada czery pierwsze litery pobrane z edit'a
xor	eax, 0Ah		;xor'uje
add	eax, 19832001h		;dodaje
sub	eax, 1			;odejmuje
cmp	eax, 7DEA8147h		;porownuje
jnz	short loc_4011A0	;skacze w przypadku gdy sie nie zgadza

aby dowiedziec sie co nalezy wpisac w edit'a aby po dokonaniu obliczen przez program
w eax byla wartosc 7DEA8147 musimy:

[(7DEA8147+1)-19832001] xor 0A = 6467614D
6467614D "dgaM" - na odwrot to bedzie "Magd"
;------------------------------------
czesc druga:

mov	eax, ds:dword_4031A8	;do eax wklada cztery nastepne litery
xor	eax, 0Bh		;xor'uje
add	eax, 19832001h		;dodaje
sub	eax, 10h		;odejmuje
cmp	eax, 93D6405Bh		;porownuje
jnz	short loc_4011A0	;skacze w przypadku gdy sie nie zgadza

[(93D6405B+10)-19832001] xor 0B = 7A532061
7A532061 "zS a" - na odwrot to bedzie "a Sz"
;------------------------------------
czesc trzecia:

mov	eax, ds:dword_4031AC	;do eax wklada cztery nastepne litery
xor	eax, 0Ch		;xor'uje
add	eax, 19832001h		;dodaje
sub	eax, 100h		;odejmuje
cmp	eax, 3AE48B6Eh		;porownuje
jnz	short loc_4011A0	;skacze w przypadku gdy sie nie zgadza

[(3AE48B6E+100)-19832001] xor 0C = 21616C61
21616C61 "!ala" - na odwrot to bedzie "ala!"

po zlozeniu do kupy otrzymujemy:
"Magd""A Sz""ala!" - czyli haselko brzmi:
Magda Szala!

mysle ze to bylo proste, gdyby ktos mial do mnie sprawe to szukac mnie tu:

wkcrck@poczta.fm
witosch@poczta.fm

end start