____________________________________________________________________________________
_________\ | __________
/ \ __-+- __ | /\
/___________/ /'( |_ )`\ |________/ \
| \ / / . \/^\/ . \ / /
\ \ / _)_`-'_(_ \ / /
\ \ /.-~ ).( ~-.\ / /
\ \ /' /\_/\ `\ / /
\ / __ ___ " __" __ _ _ \/ /
\/ / _)( ,) ( ) / _)( ) ) \__/_
( (_ ) \ /()\( (_ ) \
\__)(_)\_)(_)(_)\__)(_)\_)
___ __
( ,\o l a n d ( )
) _/ cRACKING )(__
(_) gROUP (____)
____ /\
/ \ / \
/\ \ / /
\ \ / /
\___\___/
_______________________________________________________________________________________
CrackPl prezentuje
GetRight cracking tutorial
_______________________________________________________________________________________
Cel: GetRight 3.3.1
Skad: CHIP CD 2/99
Rozmiar: ok. 2MB
Czym: SoftIce
--------------------------------------------------------------------------------------
Wstep:
Jest to bardzo przydatny program jak na polskie warunki. Umozliwia sciaganie plikow
z netu z mozliwoscia wznowienia transmisji od miejsca w ktorym ja przerwano.
Aby odblokowac program nalezy wpisac jedynie s/n w okienku Enter Code.
---------------------------
Newbies Note!
Wydawac by sie moglo, ze programy zabezpieczone wylacznie s/n sa latwiejsze do
zlamania od zabezpieczen typu name i s/n. W praktyce jest na odwrot. Np jesli
zastosowana jest metoda name i s/n to w ktoryms miejscu kodu programu musi byc
procedura porownujaca kod, ktory wpisales z tym wygenerowanym z twojago name.
Jesli jest sam s/n to mozna w jakis sposob uzaleznic wlasciwy kod od tego co
wpisales.
---------------------------
Jesli nie jestes kompletnym Newbie to zamknij tego tutora i sprobuj sam skraczyc
ten program.
Jesli w tym tutorze chcesz znalezc s/n to tez go nie znajdziesz.
--------------------------------------------------------------------------------------
Opis:
Na poczatek uruchamiamy GetRighta razem z SI. Wchodzimy do menu
Help|About GetRight|Enter Code... Zobaczymy tam okieno bardzo nas zachecajace do
wpisania kodu rejestracyjnego. Dobra, wpiszmy jakis dowolny kod np. 12131415
i zobaczmy co sie stanie.
No tak! Program nas uprzejme informuje, ze wpisalismy ZLY KOD REJESTRACYJNY.
No to zrobmy inaczej.
Wchodzimy do SI (Ctrl+D) i zakladamy standadowe pulapki:
bpx GetWindowTextA
bpx GetDlgItemTextA
Teraz wychodzimy z SI (znowu Ctrl+D lub w linii komend wpisujemy X) i wciskamy OK.
Przyneta zadzialala. GetRight zlapal sie na przynete GetWindowTextA :)
Teraz wciskamy F11 aby wrocic do miejsca skad zostala wywolana procedura
GetWindowTextA.
---------------------------
Newbies Note!
Podstawowe klawisze SI:
F5 - wyjdz z SI
F8 - analizuj krokowo kod programu z wchodzeniem w procedury (CALL'e)
F10 - analizuj krokowo kod programu bez wchodzenia w procedury (CALL'e)
F11 - skocz do miejsca skad zostala wywolana procedura
F12 - skocz do konca bierzacej procedury i wyjdz z niej
---------------------------
Teraz poszukajmy w pamieci naszego kodu. W moim przypadku
s ds:0 L FFFFFFFF "12131415"
W okienku danych (jesli go nie widzisz wpisz wd) zobaczymy nasz wpisany serial.
W jego poblizu znajdziemu takze inne numery, ktore wygladaja zachecajaco :)
Powiem Ci od razu, ze to nie sa wlasciwe s/n. Jesli chcesz to mozesz wpisac
jeden z nich. Oczywiscie przed jego wpisaniem wylacz na chwile pulapki (bd *).
Zobaczmy co sie stanie ....
Wpisuje: 431916083877 & OK
...
Otrzymamy komunikat
"This registration number was received from a fraudulent or cancelled order.
It has been disabled."
i od tej pory nie mozemy juz wpisywac s/n. Dobre co ?
Zapewne powiesz - Jak ja mam teraz zlamac ten program skoro nie moge wpisac s/n ?
Wystarczy usunac z rejestru klucz
HKEY_CURRENT_USER\SOFTWARE\HeadLight\GETRIGHT
i wszystko wroci do normy :)
Zrobmy wszystko od poczatku jescze raz:
- wlanczamy pulapki (be *)
- wpisujemy nasz s/n i wciskamy OK
- wychodzimy z GetWindowTextA klawiszem F11
W oknie ASM zobaczysz taki wiersz:
MOV ECX, [EBP+10]
Zobaczmy co jest w rejestrze ECX, ale najpierw musimy wcisnac F10
d ECX
Znajdziemy tam jekis smieci. W sumie nic ciekawego prawda ?
NIEPRAWDA !!!
Pierwsze cztery bajty wyswietlone w oknie kodu wygladaja nastepujaco:
3C 22 FF 00
Zastanawiasz sie dlaczego pierwsze 4 bajty ? Poniewaz ECX jest rejestrem 32 bitowym
i mozna w nim "zapisac" wlasnie 4 bajty (8 bitow - 1 bajt, 32 bity - 4 bajty).
No to juz wiesz dlaczego tak jest ale ciagle nie wiesz po co mi te 4 bajty.
Oto odpowiedz, wpisz:
d 00FF22C3
Oooo! W oknie danych pojawil sie nasz s/n !
Hmmm... Ale dlaczego wpisalismy 00FF22C3 zamiast 3C22FF00 ? Ano dlatego,
ze w rejestrach liczby "zapisywane" sa od tylu. No to juz wszystko jasne.
Jaki z tego wniosek ?
Nie mozemy zalozyc pulapki bpm, poniewaz w rejestrze ECX zapisywane jest odwolanie
do miejsca w pamieci do miejsca, gdzie znajduje sie kolejne odwolanie do miejsca w
pamieci, gdzie zapisany jest nasz s/n. Troche to zagmatwane :) ale jakos musisz to
zrozumiec.
Jesli nie to zawsze mozna pograc w kuaka :))
---------------------------
Newbies Note!
bpm - [Breakpoint on memory access] - jest to taka pulapka, ktora zadziala
w momencie zapisu/odczytu danej z pamieci. Np:
bpm 00FFC567
Przerwie program tylko wtedy gdy jakas instrukcja bedzie wczytywala/zapisywala
dana do komorki pamieci o podanycm adresie (00FFC567).
---------------------------
Skoro nie mozemy zalozyc bpm to pozostaje nam dokladnie analizowac kod programu.
W tej procedurze nie jest sprawdzany nasz s/n czy jest wlasciwy. Ewentualnie
w ktoryms z CALL'i sa procedury sprawdzajace nasz kod z tymi "zakazanymi",
ale my nie bedziewmy sie w nie zaglebiac ze wzgledu na to, ze nie tego szukamy :)
A wiec wciskamy F10 do momentu wyjscia w bierzacej procedurki czyli do momenu,
w ktorym w oknie kodu ASM zobaczymy polecenie RET (wyjscie z procedury i powrot
do miejsca z ktorego zostala wywolana).
W nastepnej tez nic nie bedzie ciekawego i w nastepnej tez nie :)
W sumie to mozemy sobie ulatwic zycie 3 razy wciskajac F12.
Jeszcze kilka razy wcisniemy F10 i zobaczymy cos takiego:
LEA ECX,[EBP-10] << Hmmm.. cos mi sie to wydaje znajome :)
CALL 0043C8B3 << Ciekawe co tu sie dzieje ? :)
TEST EAX,EAX
JZ 004411E9 << Jesli EAX = 0 to skok
Zobaczmy ECX:
d ECX
W okienku danych znajdzie sie cos takiego
6C 01 FF 00
A wiec:
d 00FF016C
Mam nadzieje, ze wiesz o co chodzi, jak nie to kuejk czeka :))
Ooo! Znowu nasz s/n. Skoro program zapisuje sobie gdzie ma szukac naszego seriala
to ciekawe co on robi w tej procedurce ? Zaraz sie tym zajmiemy :)
Narazie przejdzmy przez tego CALL'a wciskajac i kursor ustawmy na polecenu
skoku (JZ). Teraz zobaczmy w oknie rejestrow (jesli go nie widzisz to wpisz wr)
jaka wartosc ma EAX. No tak, EAX jest rowny 0. jesli znasz sie troche na ASM
to wiesz, ze program wykona skok. Jesli nie wiesz dlaczego to przeczytaj Newbies Note!
---------------------------
Newbies Note!
Polecenie TEST porownuje ze soba np dwa rejestry. Np:
TEST EAX,EAX
Pomyslisz sobie - Po jaka cholere porownywac ze soba to samo ? Przeciez to nielogiczne !
Masz racje. Ale komenda TEST poza porownywaniem rejestrow, sprawdza czy sa one wieksze
od zera. Jesli sa wieksze to flaga zerowa (Z) jest ustawiana na 0, jesli sa rowne 0 to
flaga Z jest ustawiana na 1. Mam nadzieje, ze rozumiesz, jesli nie ...
Musze jeszcze jedna rzecz wyjasnic. Co to sa te flagi ?
Flagi to sa takie "cyfrowe choragiewki", ktore mozna podniesc do gory lub opuscic,
ustawic na 1 lub 0. Jesli w programie wykonywane sa jakies instrukcje, to np jako wynik
porownywania dwoch rejestrow ustawiane beda rozne flagi w zaleznosci od tego czy te
rejestry sa sobie rowne, czy tez jeden z nich jest wiekszy.
---------------------------
Program wykona ten skok dlatego, ze flaga zerowa jest ustawionan na 1. Mozna to latwo
sprawdzic:
W oknie rejestrow do prawej stronie zauwazysz taki ciag znakow:
o d i s z a p c
To sa wlasnie rozne flagi. Jesli dana flaga jest ustawiona na 1 to ta flaga jest opisana
duza litera, a jesli na 0 to mala literka.
Czyli w naszym przypadku jest duze Z, czyli flaga zerowa (Z) jest ustawiona na 1.
Cziekawe co by sie stalo gdybysmy przestawili ta flage na 0 ?
Mazna to sprawdzic poleceniem:
r fl z
Po takim poleceniu nasza flaga zostanie ustawiona na 0, a skok nie zostanie
wykonany.
Wcisnijmy tylko i zobaczymy:
"Thank you for buying GetRight! Your support will help make GetRight even better."
WOW! Udalo nam sie go zarejestrowac ? NIE !!! zmienilismy tylko chwilowo program
aby myslal, ze wpisalismy wlasciwy kod. Aby to utrwalic musimy zmienic kod ASM.
Wydawaloby sie, ze wystarczy zmienic tylko JZ na JNZ i bedzi GIT !
---------------------------
Newbies Note!
JZ - skok jesli flaga zerowa = 1
JNZ - skok jesli flaga zerowa = 0
---------------------------
Niestety, nic z tego. Ano dlatego, ze kod rejestracyjny mozna wpisywac w roznych
miejscach, a poza tym GetRight przy kazdym uruchomienu sprawdza czy rzeczywiscie jest
wpisany dobry kod. W ten sposob musielibysmy zmieniac wszystkie procedury
gdzie jest wykonywany skok, jesli s/n jest zly. Ale zawsze mozna zmienic procedure
sprawdzajaca nasz s/n ! W koncu ona musi byc wywolywana przed wszystkimi skokami
zlego kodu. Dobra, no to zobaczy co jest w tym CALL'u. W tym celu musimy jescze raz
wpisac dowolny kod wcisnac potem 3 razy i jescze troche az do tego
miejsca:
LEA ECX,[EBP-10]
CALL 0043C8B3 << Tu wchodzimy
TEST EAX,EAX
JZ 004411E9
Aby wejsc do tej procedury nalezy ustawic na nia kursor i wcisnac F8.
Wciskamy teraz kilkanascie razy az dojdziemy do miejsca:
MOV EAX,[EBX] << w EAX nasz serial !
CMP DWORD PTR [EAX-08],0C << sprawdz czy nasz serial ma 12 znakow dlugosci
JZ 0043C8DE << jesli ma 12 znakow dlugosci to skok
XOR EAX,EAX << jesli nie to zeruj EAX ...
JMP 0043CDB7 << ... i skacz
Jak latwo sie domyslic (czytajac komentarze) w tym miejscu sprawdzana jest dlugosc
Musi ona wynosci 12 znakow (0C w HEX = 12), bo jak nie to program zeruje EAX i skacze
na sam koniec procedury i wychodzi z niej. Jak nie trudno sie domyslic wyzerowany
EAX spowoduje skok do procedury wyswietlajacej komunikat o zlym kodzie.
---------------------------
Newbies Note!
XOR - jest to funkcja metematyczna. Nie bede sie tu zaglebial jak ona dziala (odsylam
do ksiazek), ale moge powiedziec, ze jesli XOR'owana jest ta sama liczba to wynik
zawsze bedzie rowny 0. Czyli:
XOR EAX,EAX
Spowoduje, ze EAX = 0
---------------------------
My wpisalismy s/n o dlugosci 8 znakow. Musimy to zmienic. Wpiszmy inny serial np:
121314151617
Teraz skok zostanie wykonanay. Program zacznie sprawdzac nasz s/n. Troche to jest
zagmatwane. Szczerze mowiac to nie mam zielonego pojecia w jaki sposob GetRight
sprawdza nasz serial i wcale mi sie nie chce tego dowiadywac :)
Jedno jest pewne. Jesli po wykonaniu tej procedury EAX bedzie wiekszy od 0 to program
uzna, ze nasz serial jest OK. Zatem mozemy zmienic nieco kod programu, tak aby
EAX zawsze byl wiekszy od 0. W tym celu udajmy sie na sam koniec tej procedury.
Wciskaj aż zobaczysz:
CALL 0043CDBB
JZ 0043CDB3
AND DWORD PTR [EBP-08],00
MOV EAX,[EBP-08] << tutaj trzeba nieco przerobic kod
... << tutaj jest jeszcze kilka instrukcji, ale mi sie ich nie chcialo pisac
RET
Wystarczy nieco zmienic instrukcje:
MOV EAX,[EBP-08]
Na przyklad na:
MOV EAX,ECX
I od tej pory EAX zawsze bedzie wiekszy od zera. No dobra jak to zrobic ?
Ustawiamy kursor na MOV ... i wpisujemy
a
...teraz mozemy zmienic kod...
MOV EAX,ECX
i jescze musimy dodac
NOP
...i od tej pory kazdy wpisany serial bedzie uznawany za dobry :))))
Drobne wyjasnienie. Po co ten NOP ? Aby Ci to wyjasnic musisz najpierw sobie wpisac
code on
Teraz przed instrukcjami bedziesz mial wypisane kody instrukcji (kazda instrukcja
w ASM ma swuj kod zapisany w HEX). Dlugosc kodu instrukcji polecenia
MOV EAX,[EBP-08] wynosila 3 bajty, a dlugosc MOV EAX,ECX 2 bajty. Wiec trzeba bylo
dodac ten jeden bajt wlasnie za pomoca NOP'a. Dlugosc NOP'a wynosi wlasnie jeden bajt
a ta instrukcja dokladnie nic nie robi. Za pomoca niej crackerzy uzupelniaja
takie luki w ASM'ie.
No to teraz juz prawie jest wszystko OK. PRAWIE ! Dlatego, ze po zamknieciu
GetRight'a i ponownym jego uruchomieniu okazuje sie, ze jest on dalej
niezarejestrowany :( Dlaczego ?
Ano dlatego, ze my za pomoca SI dokonalismy zmian tylko w pamieci, a nie we wlasciwym
programie.
Musimy jeszcze raz dojsc na sam koniec tej procedurki sprawdzajacej seriala.
7404 JZ 0043CDB3
8365F800 AND DWORD PTR [EBP-08],00
8B45F8 MOV EAX,[EBP-08]
Spisujemy kody instrukcji kilku polecen w poblizu MOV EAX,[EBP-08].
Czyli tak:
7404
8365F800
8B45F8
Teraz zmieniamy na MOV EAX,ECX i dopisujemy NOP. Znowu zapisujemy sobie kod instrukcji
8BC1
90
Aby program na stale uwazal, ze wpisujemy dobry s/n musimy zmienic go w dowolnym
hex editorze. Polecam program Hiev 6.01 jest bardzo dobry. Jest dostepny na mojej
stronie domowej (link na koncu tego tutora).
Ladujemy getright.exe to Hiew'a. Teraz musimy znalezc to co mamy zmienic. W tym celu
wciskamy F7 (szukanie) i wpisujemy
74048365F8008B45F8
Znalazl! Teraz zmienmy 8B45F8 na 8BC190 (chyba nie musze tlumaczyc dlaczego bo ....)
Zapisujemy zmiany i juz teraz GetRight bedzie skraczony !!!!!!!!!
UFFF!!! Rozpisalem sie. Mam nadzieje, ze ten tutor bedzie Ci pomocny. Jesli masz jakies
uwagi to napisz do mnie.
--------------------------------------------------------------------------------------
Jezeli szukasz tu jedynie seriali, to zle trafiles.
Dzialania opisane powyzej maja na celu analize kodu programu i poznanie schematu jego
zabezpieczenia. Jezeli masz zamiar uzywac tego programu dluzej, kup go (nie dotyczy M$).
Pozwoli to producentom udoskonalac oferowane programy, jak rowniez ich zabezpieczenia.
--------------------------------------------------------------------------------------
28.03.1999 by Gonzo (sebgonzo@alpha.net.pl http://www.free.com.pl/sebgonzo)
Wyszukiwarka
Podobne podstrony:
cracokwanie kurs musk1[1]
cracokwanie kurs u crack3
cracokwanie kurs katcd
cracokwanie kurs VCLCRK
cracokwanie kurs ftpcontr
cracokwanie kurs winpopplus
cracokwanie kurs winzip70
cracokwanie kurs tutorial2
cracokwanie kurs Tiger
cracokwanie kurs janio1
cracokwanie kurs u crack2
cracokwanie kurs How to XARA 3D
cracokwanie kurs WINFAX
cracokwanie kurs ?Plus
cracokwanie kurs locus32
cracokwanie kurs ?lphi5
więcej podobnych podstron