____________________________________________________________________________________                                                          
                    _________\          |            __________  
                   /          \      __-+-  __      |         /\ 
                  /___________/     /'( |_  )`\     |________/  \
                 |   \       /     / . \/^\/ . \            /   /
                  \   \           /  _)_`-'_(_  \          /   / 
                   \   \         /.-~   ).(   ~-.\        /   /  
                    \   \       /'     /\_/\     `\      /   /   
                     \  /     __  ___  " __"  __  _ _  \/   /    
                      \/     / _)(  ,)  (  ) / _)( ) )  \__/_    
                            ( (_  )  \  /()\( (_  )  \           
                             \__)(_)\_)(_)(_)\__)(_)\_)          
                                ___             __               
                               (  ,\o l a n d  (  )              
                                ) _/ cRACKING   )(__             
                               (_)      gROUP  (____)            
                                    ____     /\                  
                                   /  \     /  \                 
                                  /\   \   /   /                 
                                    \   \ /   /                  
                                     \___\___/                   
_______________________________________________________________________________________

                                CrackPl prezentuje 
				iwan's tutorial#2
_______________________________________________________________________________________

Cel: mIRC 5.41
Czym: Softice

UWAGA! Jesli nie jestes newbie, nie trac czasu na czytanie.
Po przeczytaniu daj mi znac, czy ten tut Ci sie na cos przydal ---> iwy@friko.onet.pl 


No to do dziela. Uruchamiamy Mirc32.exe, z menu Help wybieramy Register...
Wpisujemy nasze dane. U mnie wyglada to tak:

Full Name: Iwan'98
Registration Code: 34343434

Jak szybko mozna zauwazyc, pulapki na GETWINDOWTEXTA czy tez GETDLGITEMTEXTA nie dzialaja.
Jakie jest wyjscie? Tradycyjnie jest ich kilka. Jako, ze w ostatnim tutorialu namawialem
Was do wyprobowania pulapki na HMEMCPY (kto probowal? ;)). Czemu nie? Wskakujemy wiec do
SoftIce i:

BPX HMEMCPY

Wracamy do windozy i naciskamy Register. Bach... i znow w SofIce. Jeszcze jedno wyjscie, potem F11 i jestesmy w kodzie. No tak, tylko na kod mIRC to to nie wyglada :(. Nie martw sie, to normalne przy uzyciu HMEMCPY, ze od razu nie wyladujesz w kodzie programu, ktory Cie interesuje. Musisz dopiero do niego dojsc. A wiec palec na F10 i w droge! I przygotuj sie na kilkadziesiat nacisniec. Od razu po dojsciu do kodu mIRCa zatrzymaj sie (jak poznac, ze jestes juz w tym kodzie - na pewno wiesz, jesli czytales moj poprzedni tutorial :)).

---------------------------
Newbies Note!
Warto zwrocic uwage, ze zazwyczaj, gdy szukamy kodu naszego programu po uzyciu pulapki na
HMEMCPY, jest on poprzedzony kodem KERNEL32!_FREQASM.
---------------------------

OK. Jak juz sie doczlapiemy do kodu mIRCa, zobaczymy cos takiego:

:0043D1B5	PUSH 004D1E70
:0043D1BA	PUSH 004D1BB4
:0043D1BF	CALL 0048E608

Sprawdzmy, co pchane jest na stos.

D 4D1E70

Nasz serial.

D 4D1BB4

Nasze imie.
Warto zapamietac te adresy.
No to chyba jestesmy w dobrym miejscu, zeby zaczac ;)
Wchodzimy (F8) w wywolanie w linii 0043D1BF i po paru F10 dochodzimy do:

:0048E606	MOV ESI,[EBP+0C]
:0048E611	MOV EBX,[EBP+08]
:0048E614	PUSH EBX
:0048E615	CALL 004B39C8

Hmm, moze zastanawiales sie, co tez takiego poleci do ESI po przejsciu linii 0048E606?
Sprawdzmy.

D EBP+0C

W oknie danych z pozoru nic nie ma, ale... pamietasz zabieg z czytaniem 'od konca' z poprzedniego tutorala? Pierwsza linia w oknie danych zaczyna sie tak:

:0087F9F8	70 1E 4D 00 ....itd.

Pamietasz, gdzie byl nasz serial? 004D1E70. A jakby tak zapisac to, co widzimy w oknie danych, tyle, ze w druga strone? Kewl, mamy adres naszego seriala! 
Teraz tak samo mozesz przeanalizowac MOV EBX,[EBP+08].

OK, jedziemy dalej. Wskakujemy (F8) w CALL 0044B39C8. Zauwaz, ze przed tym CALL'em na stos poleciala zawartosc EBX, a wiec 'name'.

---------------------------
Newbies Note!
Zazwyczaj kiedy w rejestrze ECX wmieszczana jest wartosc FFFFFFFF, procedura oblicza ilosc znakow w serialu, nazwie.
---------------------------

Dochodzimy (F10) do RET wracamy. Jak widac, w rejestrze EAX znalazla sie 7. Iwan'98 na 7 znakow. Wszystko gra.
Dalej znajdujemy:

:0048E61B	CMP EAX,05
:0048E61B	JAE 0048E624

Liczba znakow w 'name' jest porownywana z 5, jump linijke nizej 'przepuszcza' jedynie, gdy wieksza lub rowna. Ten warunek udalo wiec sie nas spelnic :)
Jedziemy dalej do:

:0048E626	CALL 0048E528

Tam, oprocz PUSHy nazwy i seriala zauwazamy:

:0048E534	PUSH 2D

Sprawdzamy, co kryje sie pod 2D:

? 2D

No tak, myslnik ('-'). Dwie linie nizej jest CALL, ktory wywoluje m.in. cos takiego:

:004B3989	MOV EDI,EDX
:004B398B	MOV AL,(EBP+0C]
:004B398E	REPNZ SCASB
:004B3990	JNZ 00483998

W EDI jest nasz serial, do AL trafia '-' (czyli w EAX jest 2D). Jezeli myslnik nie zostanie w serialu znaleziony, jump wysyla nas ostatecznie do Bad_Boy_Go_Away. Coz, wiemy juz teraz, ze w serialu MUSI znalezc sie myslnik. Musimu wiec na chwile przerwac analize kodu i wrocic do okna rejestracyjnego.
Proponuje przedtem zawiesic pulapke na HMEMCPY (BD 0). Poprawmy nasz serial, np. z 34343434 na 3434-5656. Wracamy do SoftIce, uruchamiamy znow nasza pulapke 
(BE 0). Co dalej? Jedziemy od poczatku tak, jak to wyzej przerobilismy, az do linii :004B3990. Teraz, jak widac, skok nie zostanie wykonany, mozemy wiec badac dalej.

:004B3992	LEA EAX,[EDI-01]

Do EAX wpisywana jest czesc seriala od myslnika wzwyz.

Przechodzimy przez RET i znajdujemy:

:0048E550	CALL 004B8D5C

i pozniej

:0048E577	CALL 004B39C8

Szczegolowa analize tych wywolan pozostawiam wytrwalym, podpowiem tylko, ze:
- pierwszy CALL sprawdza, czy znaki w serialu meiszcza sie w przedziale <0;9>, drugi naatomiast ponownie oblicza liczbe znakow w 'name' (???).

Poczawszy od linii 0048E594	MOVZX ESI,BYTE PTR [ECX] obliczany jest prawdziwy serial (a wlasciwie jego czesc przed myslnikiem), nalezy wiec cierpliwie przez ten fragment przebrnac. Jump w linii :0048E5AE bedzie nas odsylal tak dlugo do :0048E594, az nie wyczerpia sie kolejne cyfry w serialu przed myslnikiem. Kiedy to nastapi, mozemy juz spokojnie zejsc do kolejnej linii:

:0048E5B0	CMP EBX,[EBP-04]

Hmm, coz to za mile porownanie? Sprawdzmy, co kryje w sobie [EBP-04]

D EBP-4

Znacie juz sposob na 'czytanie od konca'? Przerabialismy go w tym i w poprzednim tutorialu. Widzimy wiec pierwsza linijke w oknie danych:

:0087F9CC	6A 0D 00 ....

Wiemy wiec, ze nalezy sprawdzic to 'od konca':

? 0D6A

Kewl, nasz wpisany serial (do myslnika). Jak myslicie, z czym moze byc porownywany?

? EBX

Tak, to pierwsza czesc PRAWDZIWEGO seriala :)). Zapisz ja! W naszym przypadku to 3085.

Linia nizej to jump:

: 0048E5B3	JZ 0048E5B9

W tej chwili program ani mysli skakac pod wskazany adres. Dlaczego? Po prostu powyzsze porownanie nie dalo w rezultacie zero (bo obie strony nie byly sobie rowne).

---------------------------
Newbies Note!
Porownanie (CMP) polega na tym, ze jedna wartosc zostaje odjeta od drugiej. Jezeli wiec porowna sie te same wartosci, otrzymamy zero. 
---------------------------

Ooops, chyba przesadzilem z ta lopatologia ;)

Wrocmy do kodu. Aby ten skok zostal wykonany, powinnismy wrocic do okna rejestracyjnego, poprawic pierwszy czlon naszego seriala na wlasciwy i dojsc znow do tego miejsca. OK, kto chce moze tak zrobic. Ja proponuje szybsze rozwiazanie. Pamietacie, jak pod koniec poprzedniego tuta pisalem o flagach?
Well, wykorzystajmy to!
Znajdujac sie wiec w linii:
:0048E5AE	JZ 0048E5B9
zmienmy flage zerowa:

R FL Z

I program od razu bedzie chetny do wspolpracy :). Kewl.
Po skoku widzimy fragment, ktory wydaje sie znajomy. Zaczynajac od linii :0048E5CD kalkulowany jest drugi czlon seriala. Znow musimy cierpliwie przebrnac przez kolejne skoki w linii :0048E5EE (w naszym przypadku cztery razy), az dojdziemy do:

:0048E5F0	CMP EBX,[EBP-08]

Chyba wiecie juz co to oznacza. Jak poprzednio pod EBP-08 jest wpisany przez nas serial (jego druga czesc), czyli:

D EBP-8

I

? 1618

Czas na zakonczenie zabawy.

? EBX

Tak, to drugi czlon naszego seriala (w naszym przypadku 21..., a zreszta widac).

Teraz juz znasz mechanizm generowania seriala w mIRC 5.41 Jezeli cos bylo niejasne, z czyms sie nie zgadzasz, napisz.

--------------------------------------------------------------------------------------
17/12/98 by iwan (iwy@friko.onet.pl)
