Blog literacki, portal erotyczny - seks i humor nie z tej ziemi



!!!!!! ! ! (R)
!! ! ! ! !
!! ! ! !
!!!!!! !!!!! !!!!! !!!! ! !!!!! ! !!
!! ! ! ! ! ! ! ! !!
!! ! ! ! !!!! ! !!!!! !!
!! ! ! ! ! ! ! ! !!
!! !!! !!!!!!! !!!! !! !!!!! ! !!

Cel: LeapFTP 2.2
Co: serial
Czym: SoftICE
Skad: Pc Shareware 2/99

Zaczynamy!
Czytaj to najlepiej w notatniku winshita i z zawijanymi wierszami.

Uruchamiamy program i rozkoszujemy sie widokiem gradientowanego paska tytulowego programu.
Po chwili zachwytu pierwsze spostrzezenia:
Napis '(Unregistered)', oraz mozliwosc zarejestrowania proga przez /Help/Registering.
Trzeba wpisac username i serial. Robimy to:
'Ptasiek' i '30091981'
Wchodzimy do SI (CTRL+D) jezeli nie pojawia siê okno SI to sprawdz w autoexec'u czy jest zaladowany:
Powinna byc tam linia: C:\SIW95\WINICE.EXE
Jezeli jest REM C:\SIW95\WINICE.EXE to skasuj wyraz REM i zresetuj kompa. Po ponownym uruchomieniu winshita wszystko powinno byc OK. So po wejsciu do SI zastawiamy standardowe breakpointy:
->bpx getdlgitemtexta
->bpx getwindowtexta
Wychodzimy z SI i naciskamy OK. Program sie zatrzymuje, a my ladujemy w SI tuz za wywolaniem funkcji GetWindowTexta. Dla pewnosci sprawdzimy czy funkcja odwoluje sie do naszych stringow.

!------------------------------------------------------!
[Jak to zrobic?]
Funkcja GetWindowTexta zwraca dlugosc pobranego textu w rejestrze EAX
!------------------------------------------------------!

So 'Ptasiek' - 7 bajtow, '30091981' - 8 bajtow. Podgladamy rejestr EAX
->? EAX
I co uzyskujemy: EAX=11D (hex 0B)
Czyli cos tu nie gra. Skasujmy zastawione breakpointy i zastawmy nowy: przechwycimy odwolanie do funkcji API: hmemcpy.

!------------------------------------------------------!
hmemcpy kopiuje fragment pamieci w inne miejsce np: wpisany text pod adres ustalony przez program
!------------------------------------------------------!

->bc *
->bpx hmemcpy
Naciskamy OK i jestesmy w kodzie, niestety nie bezposrednim proga, ale w kodzie funkcji hmemcpy.
Wylaczamy breakpointy:
->bd *
Zeby nie wyskoczyc z SI pozwolmy wykonac te funkcje krok po kroku (naciskamy F10), az do momenty gdy sie zakonczy (po wykonaniu instrukcji RET)

!------------------------------------------------------!
Po przechwyceniu tej funkcji ladujemy w jakiejs bibliotece systemowej bo funkcja hmemcpy wchodzi w sklad wielu innych bardziej rozbudowanych funkcji API.
Informacje o tym, ze odwolania do tych funkcji wystapily z kodu glownego naszego proga uzyskujemy patrzac na prawy dolny rok ekranu. Jest nam nazwa proga odwolujacego sie do API
!------------------------------------------------------!

Jestesmy w bibliotece USER. Teraz mozemy naciskac F12, bez obawy ze wyskoczymy za wczesnie.

!------------------------------------------------------!
F12 powoduje wykonanie calej procedury lub funkcji w ktorej sie aktualnie znajdujemy
!------------------------------------------------------!

Naciskamy F12 do mementu, gdy znajdziemy sie w kodzie naszego proga. Nad linia polecen bedzie nazwa naszego proga. Ok, jestesmy, przeszukajmy teraz pamiec w poszukiwaniu naszych textow(UWAGA lepiej wroc na poczatek tego textu i wpisz inne dane bo bedzie za duzo Ptaskow w pamieci i sie nie polapiesz co jest co)
:
->s ds:0 l ffffff 'Ptasiek'

!------------------------------------------------------!
Co oznacza ds:0 Jest to adres poczatkowy segmentu danych
ffffff - dlugosc obszaru do przeszukania (troche na wyrost)
!------------------------------------------------------!

Ale name na razie nas nie interesuje.
Znadujemy nasz serial:
->s ds:0 l ffffff '30091981'
No i mamy adres(jest widoczny w oknie danych):
C11954(u Ciebie niekoniecznie bedzie taki sam).
Ustawiamy breakpoint na ten adres:
-> bpmd c11954

!------------------------------------------------------!
bmpd adres_pamieci RW- nakazuje SI zatrzymac prog w chwili gdy zacznie dobierac sie do danych pod adres_pamieci (R-odczyt,W-zapis), a dokladnie do
pierwszych 4 bajtow.
!------------------------------------------------------!

I naciskamy F5. Zatrzymujemy sie na 403944:
REPNZ SCASB
Ta sekwencja rozkazow assemblera oznacza:
REPNZ rozkaz - powtarzaj rozkaz ECX razy, ale przerwij gdy flaga Z=1
SCASB - sprawdz czy bajt pod [EDI]=AL. Jesli tak to
wpisz Z=1. Poza tym zawsze zwieksza EDI o 1.
Innymi slowy te instrukcje szukaja pierwszego wystapienia bajtu rownego AL, i zatrzymuja na nim adres [EDI].
Co jest pod [EDI]?:
->d edi
Nasz serial->
Czegoz moze prog szukac w naszym serialu:
Sprawdzamy zawartosc rejestru al:
->? al
Znajdujemy myslnik '-' - a wiec ten znak wchodzi w sklad poprawnego seriala. Ustawiamy breakpoint na ten adres, zeby szybko do niego wrocic:
-> bpx 403944
i Wychodzimy z SI (CTRL+D), wstawiamy myslnik w serial i naciskamy OK. Ladujemy wiadomo gdzie( dla mniej pojetnych - pod 403944) i naciskamy pare razy F10.
Dochodzimy do
REPNZ COMPSB - COMPSB porownuje bajt [ESI] z bajtem [EDI] i ustawia z=1 gdy sa rowne oraz zwieksza ESI i EDI o 1 czyli powoduje, ze wskazuja na kolejne znaki stringa, REPNZ - patrz wyzej.
Co jest w tych rejestrach:
-> d edi !!!nasz serial!!!
-> d esi ???jakies bzdury???
Ale EDX=0
wiec prog sprawdza tylko, czy przypadkiem nasz serial nie konczy sie myslnikiem. Dlaczego sprawdzilem EDX chcac znac ilosc porownan?
Otoz po REP..., ECX zmniejsza sie o 1, a w naszym przypadku przed tymi instrukcjamy bylo:
MOV ECX,EDX.

!------------------------------------------------------!
Kazdy standardowy string konczy sie niewidocznym znakiem o kodzie ASCII=0, co
pozwala okreslic jego dlugosc
!------------------------------------------------------!

Dobra idziemy(F10) i skaczemy. Az napotkamy taki kod:
MOV EAX,[EBP-38]
MOV EDX,[EBP-08]
CALL costam
JNZ gdziestam
Sprawdzamy na co wskazuja te rejestry(w oknie danych):
-> d eax ;czesc naszego seriala przed myslnikiem
-> d edx ;ciekawe rzeczy - zapisujemy numer
Wyglada na to ze procka 'costam' porownuje oba numery a skok jest wynikiem porownania. Oczywiscie bedzie do skok do bad procki wiec zmienmy flage:
->r fl z
aby przejsc dalej. Idziemy na piechote uzywajac F10 az natrafimy na:
MOV EAX,[EBP-38]
MOV EDX,[EBP-14]
CALL porownanie
JNZ gdziestam
Sprawdzamy na co wskazuja rejestry chyba wiesz jak.
Spisujemy poprawna druga czesc seriala(spod [EDX]). Usuwamy breakpointy:
->bc *
Wychodzimy z SI i rejestrujemy LeapFTP 2.2.Nie zapomnij o myslniku miedzy obiema czesciami seriala.p
Jesli cos jest niezrozumiale to napisz.
Koniec
Ptasiek
dreadpl@polbox.com
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • qualintaka.pev.pl
  •