Cel : Teleport Pro 1.29 Czym: Softice
UWAGA! Jesli nie jestes ZUPELNYM newbie, nie trac czasu na czytanie.
Wszelkie uwagi i pytania ---> iwy@friko.onet.pl
No to do dziela. Uruchamiamy pro.exe, z menu Help wybieramy Register... Wpisujemy nasze dane. U mnie wyglada to tak:
Name : Iwan'98 Company : Damage Inc. Registration Code: 34343434
Zwroc uwage, ze jezeli wpiszemy Name o liczbie znakow mniejszej niz 6, program nawet nie zabierze sie do obliczania wlasciwego kodu i zobaczymy komunikat: "You haven't entered a valid username. Your username must be at least six letters long"
Newbies Note! Wybierz sobie jakis serial, ktory bedziesz zazwyczaj uzywal i zapoznaj sie tez z jego wygladem w systemie szesnastkowym. Latwiej bedzie go potem zauwazyc w rejestrze.
W naszym przypadku 34343434 dziesietnie to 020C0A0A. Zapamietajmy to.
OK, czas zajrzec do Softice. Naciskamy CTRL+D i zakladamy podstawowa pulapke na pobranie tekstu z okienka dialogowego:
BPX GETWINDOWTEXTA
Newbies Note! Jezeli po nacisnieciu CTRL+D ten czarny ekran niewiele ci jeszcze mowi, zajrzyj najpierw do jakiegos tutorial o Softice dla poczatkujacych. Polecam zajrzec pod adres: http://www.crackpl.site.pl/tutory.htm
Tam na pweno znajdziesz opis wygladu Softice oraz opis podstawowych komend :)
Teraz mozemy wrocic do Windows (CTRL+D lub X+ENTER lub F5). W oknie rejestracyjnym klikamy OK i ... bec, jestesmy znow w Softice. Co sie stalo? Nasza pulapka zadzalala (jezeli chcesz wiedziec co zrobic, gdyby ta pulapka nie zadzialala, dowiesz sie o tym pod koniec tego tuta) i program zatrzymal sie na skutek pobrania danych z okna dialogowego. Ktorych danych? A ktore byly pierwsze? Name! Nas jednak bardziej interesuje serial. Wychodzimy wiec z Softice - CTRL+D i ... wiesz juz, co zostalo pobrane? Oczywiscie Company. Naciskamy CTRL+D po raz ostatni ;). W koncu pobrany zostal nasz serial. Teraz tylko F11 i juz jestesmy w kodzie programu :))
Newbies Note! Jezeli chcesz szybko zorientowac sie, gdzie jestes, spojrz na zielony napis na granicy okna kodu i komend.
Naszym oczom ukazuje sie cos takiego:
:0044BB60 CALL [USER32!GetWindowTextA] :0044BB66MOV ECX,[EBP+10]<---- tu wyladowalismy :0044BB69 PUSH FF :0044BB6B CALL 00444EA7 :0044BB70 JMP 0044BB7D
Zanim zaczniemy sledzic kod programu, sprobujmy zlokalizowac nasze dane. Szukamy wiec seriala:
S 30:0 L FFFFFFFF '34343434'
i otrzymujemy:
Pattern found at 0030:0082236C (0082236C)
Widzimy go teraz z prawej strony okna danych. Na wszelki wypadek zapiszmy jego adres (0082236C). UWAGA! Adres ten moze sie troche roznic, a serial mozna znalezc w kilku miejscach, nie poddawaj sie wiec za szybko :)
W ramach eksperymentu spojrzmy, co znajduje sie ponad serialem w oknie danych (do poruszania sie w oknie danych uzywamy strzalek przy wcisnietym ALT). Co widzimy? Nasza firme (Damage Inc.) i dalej imie (Iwan'98). Ich adresy tez zapiszmy.
OK, czas zabrac sie do sledzenia kodu.
Zakladam, ze nie znasz jeszcze za dobrze asemblera i to, co widzisz w Softice troszke cie przeraza. Wiesz juz z grubsza, za co odpowiadaja komendy takie, jak CALL, JMP (i wszystkie jego waracje), MOV, PUSH, POP, CMP, XOR. To nam na razie wystarczy. Analizujac kod czasami nie do konca bedziemy wiedziec, co sie dzieje, skorzystamy wtedy z intuicji :) Wazne jest jednak, by obserwowac zmiany zachodzace w rejestrach (gorne okno, jezeli wartosc rejestru sie zmienia, zostaje podswietlony) w trakcie sladzenia kodu.
Newbies Note! Do przejscia do kolejnych instrukcji uzywamy:
F8 - T - wykonuje krok jednej instrukcji - w przypadku call wchodzi w te procedury
F10 - P - wykonuje krok jednej instrukcji ale pomija call, czyli cale procedury traktuje jako jedna instrukcje
F12 - P RET - wykonanie kodu az do momentu powrotu (ret) z funkcji
F11 - skok do punktu wywolania danej fukcji.
(dzieki GustawKit)
Do sprawdzania zawartosci rejestrow uzywamy komendy:
? rejestr czyli na przyklad:
? EAX
Otrzymany wynik to kolejno wartosc rejestru w postaci szesnastkowej, dziesietnej i ascii
Aby przejsc do adresu kryjacego sie w rejestrze, wpisujemy:
D rejestr czyli np.:
D EAX
Rezultat komendy znajdujemy w oknie danych.
Na poczatku sprawdzmy, co kryje sie w EAX. Widzimy tam wartosc 00000008. 8 hex to 8 dec ;) Co oznacza ta liczba? Otoz jest to liczba znakow w naszym serialu. Zauwaz, ze jesli weszlibysmy do kodu programu w momencie wywolania imienia, w EAX znalezlibysmy 7 (Iwan'98), a dla firmy (Damage Inc.) wartosc ta wynosilaby B, czyli 11. Kewl :)
Jedziemy w dol kodu, sledzac zmiany tak dlugo, az znajdziemy cos ciekawego ;)
Dochodzimy do miejsca:
:0042562C PUSH DWORD PTR [EDI+000000DD] :00425632 CALL 0042C9A0
Po raz kolejny (ktory to juz) sprawdzamy, co w rejestrach drzemie. Piszemy wiec:
D EDI+000000DD
lub po prostu
D EDI+DD
Na pierwszy rzut oka nic nie widac.
Newbies Note! Jezeli bedziesz oceniac wszystko 'na pierwszy rzut oka', wiele rzeczy przeoczysz :))
W oknie danych nie widac co prawda nic 'przyjaznego' z prawej strony. Znaleziony adres zaczyna sie mniej wiecej tak:
:006FFA316C 23 82 00 ... itd.
Hmm, pamietasz jak zapisywalismy adres wpisanego przez nas seriala? Spojrz teraz na te dane. Zapisz je od konca i sprawdz:
D 0082236C
Tak, to jest nasz serial. Kewl. Na pewno CALL ponizej cos miesza ;). Zauwaz, co znajdziemy w EAX po przejsciu tego CALL'a. Pamietasz nasz serial w trybie szesnastkowym. Czyzby?
? EAX
Tak, nasz serial!
OK, skoro doszlismy do tego, co sie kryje w tym PUSH'u, na pewno nie bedziesz mial problemow, by rozgryzc ten fragment (kilka linii nizej):
:0042565C PUSH DWORD PTR [EDI+000000D5] :00425662 CALL 00425FFB
Oczywiscie, to nasze imie! Polaczmy ten fragment z liniami bezposrednio po nim:
:0042565C PUSH DWORD PTR [EDI+000000D5] :00425662 CALL 00425FFB :00425667 CMP DWORD PTR [EBP-14], EAX :0042566A POP ECX :0042566B JNE 004256A7
Po PUSH'u znow CALL (co on tym liczy? ;)), po przejsciu ktorego wartosc EAX znow sie zmienia i jest z czyms porownywana. Sprawdzmy, co znajdziemy w EAX:
? EAX
Tak, decymalny odpowiednik wartosci tego rejestru to wlasciwy serial (076..... eee, zreszta sam widzisz ;)). Zapisz go i wpisz w oknie rejestracyjnym. Kewl. We're there, dude! Konczac analize tego fragmentu kodu, spojrzmy na ostatnia linie. Ten skok (skok, kiedy rozne) ma najprawdopodobniej za zadanie wyslac nas do procedury Bad_Boy_Go_Away. Jesli wiec zmienimy flage zerowa komenda:
R FL Z
to skok nie zostanie wykonany i po paru kolejnych krokach wyladujemy spowrotem w Windows, a program zostanie zarejestrowany z naszym falszywym serialem (niestety jedynie do czasu ponownego uruchomienia programu :)). Btw, wspomnialem cos o flagach. Jesli ktos ich nie rozumie, podaje najprostsze wyjasnienie (cytuje za tata)
Newbies Note!
Najkrocej - oto hipotetyczny listing:
Call costam - kontrola "poprawnosci SN" xor EAX,EAX - EAX=0 jesli OK jz Dobry_Chlopczyk_Zna_SN Dupa_Blada: jmp far Zabic_Drania . . .
Zatrzymanie Sice na trzecim rozkazie, gdzie program decyduje czy urwac Ci leb czy zaczac sie lasic pozwoli ci na podjecie decyzji za niego np. za pomoca polecenia "r fl z" czyli zmien flage "z" !
I juz zupelnie na koniec - co bysmy zrobili gdyby GETWINDOWTEXTA nie zadzialalo? Ano sprobowali bysmy GETDLGITEMTEXTA (tu akurat nie dziala) i dalej tak samo.
Jesli i tym sposobem nic bysmy nie zdzialali, moznaby sprobowac BPX HMEMCPY i po kilkudziesieciu F10 (lub kilku F12) znalezlibysmy sie w kodzie naszego programu. Sprobuj!
To tyle na dzis. Jak widac i z 2+2 mozna zrobic referat :)))
08/12/98 by iwan (iwy@friko.onet.pl)