-+[ jak zlamac KeyGenMe7 by SyntaxError ]+-

Program nastukany zostal pod MS Visual C++, moze sie tego dowiedziec np.
z about'a ;) Pomimo spakowania go UPX'em i tak keygenme troszke wazy.
Proga zassac mozna z http://cryptokg.cjb.net - standardowo ;)

-+[ disasembler & debug ]+-

    push    64h 
    push    offset String
    push    3E9h
    push    esi
    call    edi ; GetDlgItemTextA
    cmp     eax, 10h                ;serial musi miec 16 znakow
    jnz     short loc_401BA8
    push    64h
    push    offset aSyntaxerror
    push    3E8h
    push    esi
    call    edi ; GetDlgItemTextA

    call    sub_401D90              ;CharUpper,str2hex

Powyzszy call zmienia wszystkie znak w naszym serialu z malych na duze
i konwertuje na hexy.
Cale serce keygenme kryje sie w nastepnym call'u:

    call    sub_401C70              ;f8 i...

Wszystko co widzisz az do adresu 401CBBh to MD5, ktory jest 'rozlozony' na
3 calle, ktore przedstawiaja sie w nastepujacy sposob:

    call1 - MD5init   - inicjalizacja zmiennych

    call2 - MD5update - hashowanie danych

    call3 - MD5finish - sklejamy hasha do qpy

Hasha, mamy juz za soba, tak wiec mozemy leciec dalej:

    mov     ebx, [ebp+var_14]       ;kopiowanie dwordami hasha w inne miejsce
    mov     [ebp+var_4], ebx        ;poszedl pierwszy dword
    xor     ebx, [ebp+var_C]        ;ktory jest xorowany z 3 dwordem
    mov     ds:dword_406CE4, ebx    ;i zapisywany do zmienne
    mov     ebx, [ebp+var_10]       ;kopiowanie
    mov     [ebp+var_18], ebx       ;reszty
    mov     ebx, [ebp+var_C]        ;dwordow
    mov     [ebp+var_1C], ebx       ;w sumie
    mov     ebx, [ebp+var_8]        ;czterech
    mov     [ebp+var_20], ebx       ;koniec ;)

Zxorowany zostal ze soba 1 i 3 dword hasha, proponuje sobie to zapamietac,
lecimy dalej:

    mov     ebx, ds:dword_4060A0    ;tj. hasha tak nasz serial
    mov     [ebp+var_7C], ebx       ;kopiowany jest 
    mov     ebx, ds:dword_4060A4    ;w inne
    mov     [ebp+var_80], ebx       ;miejsce

Tak wogole to czy kopiowanie tego wszystkie bylo potrzebne?
Strata czasu i tyle.
W tym miejscu nalezy wyjasnic troszke (de)szyfrowanie metoda TEA, jej algos
przedstawia sie nastepujaco:

delte obliczamy nastepujaco:
         __
delta=(\/5  -1)2^31
  __
\/   - pierwiastek kwadratowy

^    - potegowanie

szyfrowanie:
    delta=0x9e3779b9;

    sum+=delta;

    y += (z << 4)+a ^ z+sum ^ (z >> 5)+b;

    z += (y << 4)+c ^ y+sum ^ (y >> 5)+d;

deszyfrowanie:

    delta=0x9e3779b9;

    sum=delta<<5;

    z -= (y << 4)+c ^ y+sum ^ (y >> 5)+d;

    y -= (z << 4)+a ^ z+sum ^ (z >> 5)+b;

    sum-=delta;

Szyfrowanie jak i deszyfrowanie przepuszczane jest przez petle 32x,
zeby lepiej zrozumiec ten algos proponuje sciagnac jakies zrodelko w asmie.

Ok, tutaj TEA jest troszke zmodyfikowana, przebiega tylko raz, i delta wynosi
hash_dd1 xor hash_dd3, dokladnie mowiac jest to TEA_decode.
W zwiazku z tym, ze nie ma tu zadnych petli, delta przy codowaniu bedzie taka
sama, ktora wynosi: hash_dd1 xor hash_dd3.

Po przejsciu przez to wszystko serial musi byc rowny: 6779656B656D6E65h - if
not to bad boy.

name:   jopas

serial: 0159E7A8EABA7939

-+[ podsumowanie ]+-

No i to juz koniec jesli chodzi o keygenme7, keygen powinien byc dolaczony do
tego tuta, w tym miejscu, jesli go nie ma to znalezc go mozna na mojej
stronie.

jopas//htb+rag
          mail: jopas@o2.pl
      web: http://www.jopas.prv.pl

-+[ end ]+-