ADD4V3(4).TXT

(7 KB) Pobierz
------------------------------
TEMAT: Poznajemy nowa instrukcje (rol) i instrukcje jej odwrotna (ror) oraz sposob ich dzialania.
------------------------------

-----------------------------
CO MY TU MAMY?.. I ZACZYNAMY!
-----------------------------

W tej lekcji opisze tc nr 6 (Add4v3.exe).. ktore jak juz (prawdopodobnie) zauwazyles potrzebuje hasla do rejestracji, a my (crackerzy) mamy za zadanie dac mu to czego potrzebuje (haslo). Wiec zacznijmy wreszcie bo jest 05.00 nad ranem i chcialbym jeszcze dzisiaj isc
spac (chyba mi nie wyjdzie to spanie..) ale coz... od czego jest szkola i robota.. he.. dobrze.. od spania!
Dobra zacznijmy wreszcie.
Maly opisik poczynajac od instrukcji number uno jest due lini nizej ;):

015F:004010E2  E88F000000          CALL      USER32!GetWindowTextA <- wywolanie funkcji
015F:004010E7  33F6                XOR       ESI,ESI <-| juz bardzo
015F:004010E9  33FF                XOR       EDI,EDI <-|dobrze znamy

015F:004010EB  BEA8304000          MOV       ESI,004030A8

zobacz co jest pod przenoszonym adresem:

d 004030A8

he.. cos ci to przypomina... nic?? to dobrze bo mnie tez nie.. ale powiem ci ze to jest zakodowane haslo..

015F:004010F0  8B36                MOV       ESI,[ESI]

dword (cztery bajty) spod adresu w esi jest do tegoz rejestru przenoszone a innymi slowy 4 bajty naszego zakodowanego prawidlowego hasla w naszym przypadku jest to cale zakodowane i prawidlowe haslo...

015F:004010F2  BF00314000          MOV       EDI,00403100
015F:004010F7  8B3F                MOV       EDI,[EDI]

adres do tego co wpisalismy przenoszony jest do edi a nastepnie pierwsze cztery bajty (znaki) tego co wpisalismy rowniez jest przenoszone do tego rejestru...

015F:004010F9  81F721436587        XOR       EDI,87654321

xor'owanie.. he he.. pierwszych czterech wpisanych bajtow (znakow) z wartoscia 87654321h, jesli nie wiesz jak to dziala odsylam do lekcji 2 oraz 6...

015F:004010FF  C1C703              ROL       EDI,03

a tu mamy cos nowego... jest to instrukaja rol. Instrukcja ta operuje na bitach.. a w jaki sposob?? to juz mowie.
Zalozmy ze w rejestrze mamy liczbe 12121212h... jej odpowiednikiem binarnym jest:

10010000100100001001000010010

to wykonujac na tej liczbie rol'owanie o 03h (o tyle ile mamy w tc) zostaje wykonane na niej przesuniecie w lewo trzykrotnie a zmiany te zachodza nastepujaco:

Po przesunieciu o 1h - 00100001001000010010000100101
Po przesunieciu o 2h - 01000010010000100100001001010
Po przesunieciu o 3h - 10000100100001001000010010100

wiec jak juz pewnie zauwazyles instrukcja rol wykonujac przesuniecie w lewo z kazdorazowym przesunieciem (o jeden) przenosi pierwszy bit z lewej strony na pozycje pierwsza ze strony prawej nie nadpisujac jednoczesnie bitu ktory byl wczesniej tylko dopisu
jac go.
Pozwole sobie oznaczyc 9 bitow cyframi od 1 - 9 co pozwoli na lepsze zauwazenie zmian zachodzacych podczas rol'owania. W tym przykladzie bedziemy rolowac rowniez o 03h.

liczba poczatkowa to:

1 2 3 4 5 6 7 8 9

Po przesunieciu o 1h - 2 3 4 5 6 7 8 9 1
Po przesunieciu o 2h - 3 4 5 6 7 8 9 1 2
Po przesunieciu o 3h - 4 5 6 7 8 9 1 2 3

no to juz nie ma chyba co z tym rol'owaniem tlumaczyc bo juz chyba wszystko widac...
Instrukcja odwrotna do rol to ror a dziala ona na takiej samej zasadzie jednakze przenosi bity ze strony prawej na lewa... a nie tak jak to bylo podczas rol'owania ze z lewej na prawa...

015F:00401102  3BF7                CMP       ESI,EDI
015F:00401104  7418                JZ        0040111E

jesli po xor'owaniu i rol'owaniu wartosc w edi (nasze zakodowane haslo) jest rowna tak samo zakodowanemu haslu prawidlowemu to skok "jz" sie wykonuje i otrzymujemy wiadomosc o prawidlowym hasle a w przeciwnym wypadku... bash...

No to pewnie sie domyslasz co bedziemy  teraz robili.. he.. odkrecali zakodowane prawidlowe haslo tak aby otrzymac wynik prawidlowy... proste?? no wiedzialem ze ty tez tak myslisz.
Wlasciwie do odkrecenia mamy tylko dwie instrukcje:

015F:004010F9  81F721436587        XOR       EDI,87654321
015F:004010FF  C1C703              ROL       EDI,03

w zasadzie zeby otrzymac prawidlowe haslo wystarczy przepuscic wynik kodowania na prawidlowym hasle (30A9624Fh) przez odwrotnosc tego przez co bylo przepuszczane oryginalne haslo czyli:

ror edi, 03h
xor edi, 87654321h

zakladajac ze w edi jest wynik operacji na oryginalnym hasle (30A9624Fh) to po przejsciu przez ta procke w edi bedziesz mial prawidlowe haslo...
ta procke mozemy wykonac na dwa sposoby.
Pierwszy sposob to z lini komend czyli tak samo jak w poprzedniej lekcji uzywajac odpowiednich operatorow, czyli:

? 30A9624F >> 03

nastepnie:

? wynik_poprzedniej_operacji ^ 87654321

i wynikiem tego bedzie prawidlowe haslo pisane od tylu (of course ;))...

Drugim sposobem jest zmiana kodu crackme w taki sposob aby wyliczyl nam odpowiednie haslo, a mozesz to zrobic np. tak:
gdy sie znajdziesz na tej lini:

015F:004010F9  81F721436587        XOR       EDI,87654321

wpisujesz:

a [enter]

i wpisujesz nasza procke.. z tym jednak ze mozesz wykorzystac to ze w esi jest juz wynik operacji na prawidlowym hasle a ze uznalem ze mozesz nie zauwazyc wiekszych roznic to postanowilem po lewej stronie umiescic zapis oryginalny a po prawej zmodyfikowa
ny:
_____________________________________________________________________
|       ORYGINALNY              |       ZMODYFIKOWANY                |
|_______________________________|____________________________________|
|       xor edi, 87654321       |       ror esi, 03                  |
|       rol edi, 03             |       xor esi, 87654321            |
|_______________________________|____________________________________|

i jesli tego jeszcze nie zrobiles to:

a [enter]

i kazda zakonczona linie kodu potwierdz jednokrotnie enter'em a gdy zakonczysz wpisywanie potwierdz to dwukrotnym nacisnieciem klawisza enter....
Kiedy juz dokonasz odpowiednich zmian to naciskaj F10 az do momentu w ktorym znajdziesz sie zaraz za ostatnia zmodyfikowana instrukcja czyli to bedzie na instrukcji "cmp". Jesli juz tam jestes to teraz:

? esi [enter]

co pozwoli wyswietlic zawartosc esi w postaci hex, dec i ascii ;-)
he.. wpisales juz?? to dobrze... teraz jesli czegos nie pochrzaniles powinienes widziec cos takiego:

61706F68  1634758504  "apoh"

nas interesuje tylko odpowiednik ascii czyli:

"apoh"

ale nie spiesz sie tak jeszcze.. "apoh" to nie jest prawidlowe haslo... prawidlowe bedzie wtedy gdy je przepiszesz od tylu czyli to bedzie:

Oryginal:      apoh
Po odwroceniu: hopa

no to widac tu bardzo dokladnie ze apoh czytany od tylu daje hopa i to wlasnie powinno byc prawidlowym haslem.. a jesli nie jest... to masz nie mojego crackmes'a ;)) a jak masz mojego to jest to prawidlowe haslo...

Jesli tak na to wszystko rzucic okiem to jest to bardzo proste. Jedyna informacja jaka z tej lekcji powinnismy wyciagnac to ze mozemy sobie w pamieci (o ile jest to mozliwe) napisac odpowiednia procke dekodujaca, o czym (mniej, wiecej) bylo w jednej z wc
zesniejszych lekcji oraz to ze instrukacja rol jest odwrotna do ror i odwrotnie...

Coz mnie nie pozostaje nic innego jak sie isc przekimac.. teraz... albo napisze jeszcze jednego tutka.. tak zeby mi sie lepiej kimalo ;))


pozdrawia, muSzyn^Un,
-----------------
Jesli chcesz cos ode mnie prywatnie.. przeslac pieniadze czy rzucic milym slowem to wal tu:
muszyn@hoga.pl
-----------------
Jesli chcesz sie czegos dopytac odnosnie craczenia to wal tutaj:
crk_pomoc@poland.com
-----------------
Na prosby o cracki nie odpowiadam. W dyskusje na temat piractwa, religii itp.. sie nie wdaje. ;))
Zgłoś jeśli naruszono regulamin