Title        :crackme2 by DEKANS
Data         :02/04/2006
Kto          :DARKBLADE
co           :tutorial
skill        :???


    Cze to jest mj pierwszy tutorial wic jego  poziom  nie  bdzie  zbyt 
    wysoki, ale chyba nie o to chodzi:)Na stronce http://www.crackmes.prv.pl 
    znalazem ciekawe crackme, ktre ju do dugo  miao  status uncracked.
    W kocu go zamaem i miaem duo szczscia bo takie crackme na razie s
    prawie nieamliwe.Mwic prawie  mam na myli to,  e ja nie  potrafiem
    napisa takiego  B-F aby w rozsdnym czasie liczy wszystkie  kombinacje			    wymagane do zamania tego cm.Teraz jakie konkrety:
    - cm jest niespakowane
    - napisane w asm
    - nie posiada anty-debug
    Zamieciem tutaj kod rdowy dla uatwienia.	
    
		mov     ebx, offset name ;
        	xor     ecx, ecx         ;
	loc_4011FC:                      ;       
		mov     al, [ebx]        ;
		cmp     al, 0            ;porwananie kolejnego znaku z null
        	jz      dalej            ;jeli rwne to skok dalej
        	cmp     al, 61h          ;porwanie z 'a'
        	jb      ze              ;jeli mniejsze to bad boy
        	cmp     al, 7Ah          ;porwanie z 'z'
        	ja      ze              ;jeli wiksze to  bad boy
        	inc     ecx              ;zwiksz o jeden ecx
        	inc     ebx              ;zwiksz o jeden ecx
        	jmp     short loc_4011FC ;
	loc_401216:                      ;        
        	cmp     ecx, 0Ah         ;ilo znakw
        	jb      ze              ;jak mniejsze to bad


    Jest to  sparawdzanie  czy haseko  znajduje si w przedziale od a-z, 
    w kadym innym przypadkujest  IncorrectPassword.Nastpnie  porwnanie 
    iloci znakw  z 10d jeli mniejsze to bad.


		mov     ebx, offset name  ;
        	xor     ax, ax            ;zerowanie ax
        	xor     dx, dx            ;zerowanie dx
	loc_40122A:                       ;      
       	        mov     al, [ebx]         ;do al bajt z [ebx]
        	add     dx, ax            ;dodaje znaki do siebie
        	inc     ebx               ;
        	cmp     byte ptr [ebx], 0 ;porwananie z zerem
        	jnz     short loc_40122A  ;jeli nie rwne to skok
        	mov     word_4030AC, dx   ;w dx suma znakw

    Znaki zostaj zsumowane.

		mov     ebx, offset name  ;
        	xor     ax, ax            ;zerowanie ax
        	xor     dx, dx            ;zerowanie dx
	loc_401247:                       ;
                mov     al, [ebx]         ;
                ror     al, 5             ;
                sub     al, byte ptr word_4030AC;ciekawa warto
                xor     al, 38h           ;
                rol     al, 3             ;
                add     dx, ax            ;
                rol     dx, 3             ;
                inc     ebx               ;
                cmp     byte ptr [ebx], 0 ;
                jnz     short loc_401247  ;
                mov     word_4030AE, dx   ;hash w dx


     Pierwszy hash.

	        mov     ebx, offset name  ;
        	xor     ax, ax            ;zerowanie ax
        	xor     dx, dx            ;zerowanie dx
	loc_401276:                       ;
                mov     al, [ebx]         ;
                add     al, byte ptr word_4030AE;nastepna ciekawa warto
                rol     al, 5             ;
                sub     al, byte ptr word_4030AC;i tu te
                xor     al, 9             ;
                add     dx, ax            ;
                inc     ebx               ;
                cmp     byte ptr [ebx], 0 ;
                jnz     short loc_401276  ;
                mov     word_4030B0, dx   ;

    Drugi hash.

    Te dwa hashe wraz z liczb znakw zostaj przeniesione do pamici 
    i pniej porwnywane z hashem autora.Teraz sprawdzenie:

		mov     esi, offset hash_nasz   ; nasz hash
                mov     edi, offset hash_autora ; hash z ktrym porwnujemy  		
		mov ecx, 6                      ; ilo powtrze
	loc_4012A8:                             ;
                mov     al, [esi]               ;
                cmp     [edi], al               ;
                jnz     short ze               ;
                inc     esi                     ;
                inc     edi                     ;
                loop    loc_4012A8              ;

    Nie mam pojecia jak to odwrci:)Jedyne rozwizanie jakie mi przychodzi 
    do gowy to brute-force.Ten hash autora wyglda tak:
    0580 CA41 089F a dokadniej:

    0580h-suma znakw
    CA41-drugi hash
    089F-trzeci hash

   Suma znakw to 1408d (580h=1408d), wic sprbujmy  znale  liczb  znakw.
   Wiemy, e 'a'- 97 i'z' -  122. Najmniejsza ilo  znakw  to  12  poniewa:
   12*122=1464 taki przypadek bedzie tylko wtedy gdy za haso podstawimy 12 z.
   Pewnie zapytasz dlaczego nie 11: 
   11*122=1342 czyli jest to niemozliwe aby suma 11 znakw  rwnaa  si 1408.
   Teraz bierzemy a czyli 97 i sprawdzamy:
   97*13=1261 moe by
   97*14=1358 te moe by
   97*15=1455 nie moe poniewa suma najmniejszych znakw  przekracza  wartoc
   1408.Czyli haso ma 12,13 lub 14 znakw.
   Zobaczmy jak si to ma  do  B-F.Dla  12  znakw  liczba  kombinacji  wynosi 
   25 ^ 12 = 59604644775390625, dla 13 25 ^ 13 = 1490116119384765625  i dla 14 
   25 ^ 14 = 37252902984619140625.Jest to bardzo duo dla porwnania 64 bitowy 
   brute-force  czyli 2 ^ 64 = 18446744073709551616  kombinacji  to   miesice 
   liczenia, oczywiscie naszych kombinacji jest mniej,ale nie wiemy  dokadnie  
   ile liter ma haso moemy zapuci bruta dla 12,13 i 14 znakw,  ale  haso 
   otrzymamy po okoo roku:)Ja napisaem brute-force i zostawiem go na  kilka 
   godzin i ogromnie sie rozczarowaem.Nagle wpad mi  pomys  do  gowy, moe 
   jaka kafejka:)(sam bym na to  nie wpad,  ale  czytaem solucj  Kwaska  w 
   ktrej  zama  on  crackme  by deztroyer wasnie  w  ten sposb) Znalazem 
   kafejk z  fajnymi  kompami  (AthlonXP  2000+) i  wrzuciem do autostartu:)
   Po  jakim  tygodniu  tam  przychodz i postp  marny :( Zdenerwowaem  si
   i wysaem do autora maila  napisaem  co  wiem i  zapytaem  czy  jest  to 
   logiczny cig znakw.Dostaem odpowied, e jest to 13 literowy nielogiczny    
   cig, wczyem brute i po kilku minutach miaem haso.Doprowadzio mnie to 
   do wielkiego zdenerwowania.Szukaem przez tydzie  hasa, nie  pomylaem o 
   tym by zmieni tylko liczb literek z 12 na 13.Chocia szczcie miaem  bo
   w sumie to to haso wymagao sprawdzenia tylko kilku miliardw  kombinacji.
   Brute wraz z source powinien by razem z tym tutorialem.Pass: mxwwuxxcaaaaa
   
  Kontakt: a508672079@op.pl