W ostatnim artykule, przypomnieli¶my, albo inaczej, dowiedzieli¶my siê wiele ciekawych rzeczy. Nauczyli¶my siê równie¿ obs³ugiwaæ disassembler W32DASM. W tym artykule, zajmiemy siê crackowaniem jednego z moich CrackMe.
Teraz, zajmiemy siê crackowaniem pierwszego CrackMe w naszym ¿yciu. ¦ci±gamy go st±d :
http://www.ownersite.republika.pl/crackme.exe
Okej, po ¶ci±gniêciu, zostawcie to w spokoju. Narzêdzia, które bêd± nam potrzebne:
- W32DASM (zak³adam, ¿e jeszcze go macie z poprzedniej lekcji)
- NASM (assembler)
- XVI32 (hex edytor)
Wszystkie te narzêdzia, mo¿na znale¼æ w temacie :
http://www.haker.com.pl/viewtopic.php?t=16366
Dobra, zaczniemy od teorii.
Mam nadzieje, ¿e wiesz co to jest stos i rejestry procesora (to powiniene¶ wiedzieæ z poprzedniego artyku³u). Poniewa¿ nie omawia³em stosu w poprzednim artykule, omówiê go teraz. Za³ó¿my, ¿e mamy pieni±dze. Uk³adamy sobie stos 5 z³otówek i zauwa¿my, ¿e mamy tylko dostêp do monety na samej górze. Jak z do³u wyci±gniemy, to ca³y stos 5 z³otówek siê rozsypie. A za³ó¿my, ¿e chcemy wzi±¶æ ¶rodkow± monetê, to musimy usun±æ te monety, które by³y nad ¶rodkow±, itd. Tak mo¿emy upro¶ciæ sobie definicje stosu. A teraz stos o którym chcia³em wam powiedzieæ (nie z monet):
- Stos - obszar pamiêci, ka¿de miejsce w stosie ma 4 bajty. Teraz niezale¿nie od tego, czy funkcja jako parametr przyjmuje znak, czy liczbê, po w³o¿eniu czego¶ do stosu, zajmuje to 4b.
Odpowiedzialne rejestry za stos, to:
- dno stosu (rejestr EBP)
- góra stosu (rejestr ESP)
¯eby korzystaæ ze stosu, u¿ywamy funkcji push & pop.
To jest tak jak z monetami, aby doj¶æ do ostatniej monety, musisz zdj±æ wszystkie z góry. Czyli masz dostêp tylko do tej pierwszej monety na górze. Tak dzia³a stos. Dobra, aby utrwaliæ Ci to w pamiêci podam to w ten sposób:
- Zmienne lokalne, alokowane s± na stosie i assembler lub komputer, zajmuje siê nimi od dna stosu. Dno stosu mo¿e byæ przesuwane. Dobra, tyle teorii. Czas dzia³aæ!
Zdisassemblujcie sobie nasz CrackMe.exe (wreszcie, co nie?).
Zapiszcie listing do pliku i otwórzcie czym kolwiek (mo¿e byæ notatnik).
Jak zauwa¿yli¶my, nasz crackme odlicza od 150 do 0, a potem od 199 do 0 i tak w kó³ko. Naszym zadaniem jest, aby program odliczy³ powy¿ej 200, czyli wy¶wietlenie tekstu:
ROZWIAZALES CRACKME BY OWNER! GRATULACJE!
Popatrzcie sobie na t± linijkê :
:0040132D FF08 dec dword ptr [eax]
Ona odpowiada, ¿e nasza liczba w programie, ci±gle maleje a¿ do 0 i od nowa wykonuje to samo. Skoro jest dec dword ptr [eax], to musi byæ jakie¶ przeciwieñstwo, aby siê zwiêkszy³a. Owszem, jest takie przeciwieñstwo i my je tutaj zastosujemy!
To nasze przeciwieñstwo to magia taka, ¿e dec zamieniamy na inc i tyle! No dobra, no i co, ¿e zmodyfikujemy listing zdisassemblowanego kodu, skoro nasz program dalej liczy do zera? Wklejamy do notatnika:
[BITS 32]
inc dword [eax]
Zapisujemy jako, np. bla.asm i wpisujemy tak± komendê do nasma (przez cmd, oczywi¶cie):
nasm.exe bla.asm
Powinien nam siê w folderze z nasmem, ukazaæ plik, bez rozszerzenia o rozmiarze 1kb.
Otwieramy go hex edytorem XVI32 i widzimy :
FF 00
I gotowe! Teraz edytujemy naszego crackme szukaj±c FF 08, a dlatego FF 08, bo :
004012BA FF08 dec dword ptr [eax]
Gdy znale¼li¶my w naszym programie otwieraj±c go hex edytorem FF 08, zamieniamy FF 08 na FF 00. Zapiszcie teraz nasz zmodyfikowany program i go odpalcie. Efekt zobaczycie bardzo przyjemny. zamiast zmniejszaæ siê, liczba bêdzie lecia³a w górê, a¿ dojdzie do 200 i wtedy siê wy¶wietli nasza wiadomo¶æ.
Zauwa¿cie, ¿e s± te¿ inne sposoby rozwi±zania tego crackme, np. edycja tekstu, z 150 na np. 200 lub 201, a program, te¿ wy¶wietli nam oczekiwan± wiadomo¶æ.
Je¶li znasz chocia¿ podstawy jakiego¶ jêzyka programowania, mo¿esz sobie pisaæ w³asne CrackMe. Np. w C++ jaki¶ program na has³o, potem to zakodowaæ, itp.
Trzecia czê¶æ artyku³u, powinna wyj¶æ za nied³ugo, jak tylko bêdê mia³ wiêcej czasu
A teraz, zapraszam do nauki asma, bo co to za cracking/reverse engineering, skoro masz ma³e pojêcie o asmie. Zawsze mo¿esz mnie czego¶ spytaæ na PM, je¶li czego¶ nie wiesz. Linki, które mog± Ci siê przydaæ:
http://www.haker.com.pl/viewtopic.php?t=36630
http://www.haker.com.pl/viewtopic.php?t=35958
http://www.haker.com.pl/viewtopic.php?t=34189
http://www.haker.com.pl/viewtopic.php?t=14414
Mam nadzieje, ¿e ta czê¶æ, czyli druga czê¶æ artyku³u o crackingu/reverse engineeringu, siê komu¶ przyda³a.


Ale po to poda³em najd³u¿szy aby to nie by³o takie krótkie.
