Witam!

Oto przed wami tutek, a wlasciwie jedyne mozliwe rozwiazanie do crackme 0.78 by clever. Crackme to jest proste jak drut. Ogolnie to badziewo jest pakniente PESpinem. Na packera wiadomo: a)depacker b)by hand c)olly script d)olly dbg->attach to process. Grunt zeby bylo kod widac. No i wiadomo szukamy kodu odpowiedzialnego za GetTextStuff, w tak malym crackme, to latwo to znalesc nie trzeba importow. No i tez nie zabraklo tu pieknych sztuczek anty SI (wychodzi z mody ludzie, Olly roX) np. INT 68 (666), czy folder SI. Naturalnie nie tlumacze nic tu oprucz buga, bo to nie tut dla newbies. 


Dobra, dobra przejdzmy do sedna. Oto pierwsza czesc kodu:

proc_40112F:
	push 0b
	push crkme078.00403180                   ;  ascii "6898737"
	push 6e
	push dword ptr ss:[ebp+8]
	call crkme078.0040132e  // gettextshit
	cmp eax,0A //nasz name musi byc mniejszy od 10
	ja short crkme078.0040114e
	call crkme078.004012d9 // anty si 
	test eax,eax
	je short crkme078.00401150 //jesli zero to ok
	jmp short crkme078.0040114e
	push 81
	push crkme078.004031a8                   ;  ascii "000"
	push 78
	push dword ptr ss:[ebp+8]
	call crkme078.0040132e //gettextshit
	cmp eax,80 // serial max 80 zn
	jnb short crkme078.0040114e jesli powyzej to bye, bye

Nie ma tu watpliwosci wiec dalej:

proc_40116B:
	sub esi,esi
	sub eax,eax
	sub ebx,ebx
	sub ecx,ecx
	sub edx,edx //czysci rejestry
	mov esi,crkme078.00403180   // name do esi
	mov al,byte ptr ds:[esi]
	cmp al,0
	je short crkme078.00401186
	inc ecx
	add ebx,eax // sumuje wszystkie znaki name
	inc esi
	jmp short crkme078.0040117a
	mov edx,ebx // suma do ebx
	and ebx,E49E9583 // aby sie zgadzalo to w ebx musi byc 180
	cmp ebx,180 // wtedy otrzymamy taki wynik
	je short crkme078.00401198  //jesli dobry to dalej 

Dobrze keygen do name'ow w zalaczniku. Nawet ladne numerki generuje ;)

Teraz final:
             
proc_401196:
	jmp short crkme078.0040114e //jesli nie to bye
	mov dword ptr ds:[4033a8],ecx //dlugosc name do dworda
	ror ebx,0af   // za duzy ror 
	xor ebx,edx ->w ebx za duza liczba
	sub edi,edi
	mov edi,crkme078.004031a8  // serial do edi
	mov al,byte ptr ds:[edi]
	cmp al,0
	je short crkme078.004011b5
	add ecx,eax //suma znakow seriala + dlugosc name
	inc edi
	jmp short crkme078.004011aa
	mov eax,3ef
	dec eax
	cmp eax,0
	je short crkme078.004011c8
	add ecx,4fc //do sumy dodale 3EF razy liczbe 4FC
	jmp short crkme078.004011BA
	cmp ebx,ecx // w ebx 03000180(zawsze), a w ecx suma serialu
	jnz short crkme078.004011E5 // nierowne, to bye


No i tu byk caly w crackme NIE MOZLIWE JEST OSIAGNIECIE TEJ LICZBY PRZY SERIALU O MAX DLUGOSCI 128 ZNAKOW i nawet maxymalnych wartosciach znakow, czyli FF. Ja dla ekspermentu wpisale serial to len = 7Fh i osiagnelem taka liczbe: 001413D1, czyli o wieleeeeeeeee za malo. Crackme nie lamalne.

greety dla: wszytkich crackme lamaczy ;)


payteR/HTB [mailto:payter@o2.pl]

