Teleport Pro 1.29 by Iwan

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)