Tematem tego skromnego tutorka bedzie programik typu crackme noszacy dumna nazwe Crackme.exe (310272 bajty). Na poczatku rozmiar pliku przerazil mnie nieco bo myslalem, ze jest tam masa róznych sztuczek i kruczków, albo jakies zaawansowane szyfrowanie, a w dodatku grupa ESQUiRE deklaruje, ze przyzna czlonkostwo osobie która zlamie tego progsa. Jak sie okazalo moje obawy byly bezpodstawne.
Zaczynamy:
Co : Crackme.exe (310272 bajty) Czym : W32Dasm 8.93 Poziom trudnosci: Beginner
Po zaladowaniu programu do WDasma (CRT-L) i uruchomieniu go (F9) wybieramy z menu REGISTER. Ukazuje sie okienko z prosba o wpisanie NAME i REGISTRATION CODE. Ja jako przykladowe dane wpisalem:
NAME: Jo Joro / CrackPL REGISTRATION CODE: 78787878
Po nacisnieciu przycisku TRY! ukazuje sie komunikat którego moglismy sie spodziewac:
"Nope, try again"
Wobec tego, musimy odszukac w programie ten kawalek kodu, który jest odpowiedzialny za wywolanie tego komunikatu. W zwiasku z tym z menu (W32Dasm-a oczywiscie) wybieramy Refs\String Data References. Pojawi nam sie okienko z wypisanymi róznymi komunikatami wystepujacymi w programie.
Odszukujemy "Nope, try again" i klikamy go dwukrotnie. Spowoduje to znalezienie i wyswietlenie czegos takiego:
* Possible StringData Ref from Code Obj ->"Nope, try again"
|
:0044117E BA48124400 mov edx, 00441248 --------------->>>>>>>>> Tu jestesmy
:00441183 A1142C4400 mov eax, dword ptr [00442C14]
:00441188 8B00 mov eax, dword ptr [eax]
:0044118A E881CDFFFF call 0043DF10
Teraz musimy znalezc miejsce z którego nastepuje skok do naszego komunikatu o bledzie. Patrzac nieco wyzej dostrzegamy:
* Referenced by a (U)nconditional or (C)onditional Jump at Address: \
|:00441151(C) <<<<<<<------------------------------------ >>>>>>>>> Spod tego adresu nastepuje skok!
|
:00441177 6A30 push 00000030
* Possible StringData Ref from Code Obj ->"Wrong"
|
:00441179 B940124400 mov ecx, 00441240
* Possible StringData Ref from Code Obj ->"Nope, try again"
|
:0044117E BA48124400 mov edx, 00441248 --------------->>>>>>>>> Tu jestesmy
:00441183 A1142C4400 mov eax, dword ptr [00442C14]
:00441188 8B00 mov eax, dword ptr [eax]
:0044118A E881CDFFFF call 0043DF10
Wiec juz wiemy skad nadchodzi niebezpieczenstwo! Trzeba sie temu blizej przyjrzec! Odszukujemy wiec adres 00441151.
:0044114C E8F329FCFF call 00403B44 ---------->>>>>>> Procedura sprawdzania poprawnosci wpisanego numerka. :00441151 7524 jne 00441177 -------------------->>>>>> Jestesmy tutaj. :00441153 6A40 push 00000040
A wiec (nigdy nie rozpoczynaj zdania od wiec ;) to tutaj program decyduje czy pogratulowac ci czy tez wyslac do diabla. Mozna przypuszczas ze procedura sprawdzenia poprawnosci wpisania seriala znajduje sie w call-u.
Ale spójrzmy co znajduje sie ponad call-em!
:00441146 8B55F4 mov edx, dword ptr [ebp-0C] :00441149 8B45FC mov eax, dword ptr [ebp-04]
To sa pewnie jakies wartosci, których call bedzie potrzebowal. Sprawdzmy wiec co znajduje sie w edx.
W tym celu zastawiamy pulapke na tej instrukcji F2, wpisujemy do crackme nasze wydumane haselko i jazda.
Po chwili program zatrzyma sie na instrukcji na której zastawilismy pulapke. Wciskamy F8 aby to czego oczekujemy znalazlo sie w EDX i sprawdzamy w okienku z danymi.....
No tak W EDX mamy 78787878 !!! czyli ten numerek który wpisalismy, wiec cóz za licho siedzi w EAX ?
Wciskamy F7 i sprawdzamy. W EAX siedzi jakis dziwny numerek 59382448403057022. Jesli jeszcze nie wiesz co to za numer to wejdz do Call-a (F7) i po kilku wcisnieciach F7 dojdziesz do instrukcji:
:00403B4B 39D0 CMP EAX, EDX.
No chyba widac jak na dloni ze jest tu porównywany nasz numer (EDX) z tym nic nie mówiacym nam do tej pory numerem z EAX. Chyba dalej nie trzeba pisac co trzeba czynic!
Podsumowujac :
Wpisujac
NAME: Jo Joro / CrackPL REGISTRATION CODE: 59382448403057022
zarejestrujemy program i otrzymamy czlonkowstwo w grupie ESQUiRE ;)
Jo Joro