ADD4V2(4).TXT

(9 KB) Pobierz
----------------------------------------
TEMAT: Praktycznie, Jak odwrocic xor'owanie i jego zastosowanie w kodowaniu.
----------------------------------------

----------------------
        WSTEPNIAK
----------------------

uuuf... juz ktory to?? he he.. tak.. szosty tutorial... i jak juz pewnie zauwazyles przeslismy na nastepny poziom... poziom? zapytasz... tak wlasnie.. poziom..
Bo na pierwszym poziomie lamalismy test_crackmes'y ktore maja za ikonke usmiechnieta buzke a teraz... spinacz.. poziom ten rozni sie od poprzedniego tym ze ma lekka modyfikacj
e prawidlowego seriala/hasla... a jaka?? he.. to zobaczysz. Ten poziom rozni sie tym ze juz nie omawiamy typu zabezpieczenia tylko najpopularniejsze instrukcje wykorzystywane w kodowaniu, instrukcje im odwrotne i techniki ich odwracania. Te instrukcje kt
ore juz omawialismy omawiane nie beda, jedynie w przypadku jakiegos innego zastosowania jak np. zademonstrowany w tym test crackme przyklad z instrukcja xor. Mysle ze juz czas zaczac wiec common everybody... ;-))
A i jeszcze jedno... ze wzgledu ze bardzo czesto uzywam zwrotu test_crackme i szczerze mowiac jest zbyt dlugi abym go pisal tyle razy.. wiec postanowilem uzywac zamiast test_crackme symbolu "TC", czyli jesli widzisz zwrot, "w tym TC mamy takie a takie za
bezpieczenie" to powinienes wiedziec ze chodzi o test_crackme.. zamiennie moge uzywac "tc, Tc, tC".. itp...
Mam nadzieje ze sie w tym polapiesz.

----------------------
   ZACZYNAMY ;-)
----------------------

Uruchom tc nr 5 (Add4v2.exe). I co widzisz?? tak masz wpisac serial.. wiec dawaj.. wpisuj... ja wpisalem: 1234 a ty mozesz cokolwiek innego no ale nic.. wpisales?? oki.. no to zaloz pulapke na.. getwindowtexta i mozemy powoli analizowac kod:

015F:004010E2  E88B000000          CALL      USER32!GetWindowTextA <- wywolanie funkcji

015F:004010E7  33F6                XOR       ESI,ESI <-|zerowanie
015F:004010E9  33FF                XOR       EDI,EDI <-|rejestrow

015F:004010EB  BEF6304000          MOV       ESI,004030F6

zajrzyj pod adres ktory jest przenoszony do esi:

d 004030F6

i co??.. nic?? widzisz jakies krzaczki?? ehh tam... nic ciekawego... a moze?? moze to jest jakos kodowany serial?? no nic zobaczymy pozniej...

015F:004010F0  BF0C314000          MOV       EDI,0040310C <- adres tego co wpisales do edi

015F:004010F5  8B3F                MOV       EDI,[EDI] <-|wartosci spod adresow
015F:004010F7  8B36                MOV       ESI,[ESI] <-|zawartych w edi i esi przenoszone sa do tychze rejestrow a konkretnie cztery bajty (double word)

015F:004010F9  81F778563412        XOR       EDI,12345678

he.. co my tu mamy xor'owanie.... jezeli niewiesz jak dziala ta komenda to odsylam do lekcji 2...

015F:004010FF  3BF7                CMP       ESI,EDI

porownanie zxor'owanego edi z "krzaczkami" z esi...

015F:00401101  7418                JZ        0040111B

jesli rowne to skok czyli jesli wpisales dobry serial...

No ale juz myslisz ze cie tak zostawie z tym?? otoz nie... nie opisywalem tym razem od razu aby ci dac szanse na wykombinowanie tego samemu.. no ale jesli nie pokapowales jeszcze co i jak trzeba zrobic aby znalezc serial'a to oto jestem...

015F:004010F9  81F778563412        XOR       EDI,12345678
015F:004010FF  3BF7                CMP       ESI,EDI
015F:00401101  7418                JZ        0040111B

zajmiemy sie tymi trzema instrukcjami... jak dobrze pamietasz w edi jest to co wpisales.. dla nas 1234 (w rejestrze 34333231h) i jest to xor'owane z wartoscia 12345678h, wynikiem czego jest liczba 26076449h a nastepnie porownywana jest z esi, a w esi mam
y te krzaczki co byly na poczatku przenoszone, ale pomysl... po co wyniki operacji na twoim serialu bylyby porownywane z esi. Otoz mozna przypuszczac ze w esi jest wynik tych samych operacji tylko ze na serialu prawidlowym... a dlaczego nie mozna by zapo
dac prawidlowemu serialowi inne kodowanie niz wpisywanemu??? ot dlatego ze cudem byloby gdyby wyniki sie zgadzaly.. czyli prosty przepis:

Jesli twoj serial/haslo jest poddawane jakiejs obrobce/mieszaniu majaca na celu zakodowanie tego co wpisales a nastepnie wynik tych operacji jest porownywany z jakas nieznana ci wartoscia to ta wartosc jest wynikiem tych samych operacji tylko ze na seria
lu/hasle prawidlowym.

Jedyna recepta na odnalezienie prawidlowego hasla/seriala majac dany tylko wynik i operacje przeprowadzane na wpisanym serialu/hasle jest przepuszczenie tego wyniku tylko ze przez operacje ktore sa odwrotne do kolejno przeprowadzanych na wpisanym hasle/s
erialu, a mowiac tak po polsku to musimy to co jest porownywane z naszym wynikiem przepuscic przez to samo co kodowalo nasz wpisany serial/haslo ale od tylu, a obrazowo to wyglada tak:

mamy operacje A, B, C kodujace nasz wpisany serial/haslo.
Nasz serial/haslo jest kodowany najpierw operacja

A

nastepnie

B

a pozniej

C

wynikiem czego jest D i zalozmy ze mamy E ktore jest wynikiem operacji A, B, C tylko ze na hasle/serialu prawidlowym to na tym wyniku przeprowadzamy operacje kolejno C, B i A. Oczywiscie nie w oryginalnej ich postaci tylko poprzez ich odwrotne odpowiedni
ki, wyjatkiem jest tu operacja xor ktora jest odwracalna sama w sobie o czym w lekcji 2. Dla naszego wpisanego seriala "1234" wynikiem po xor'owaniu jest 26076449h no to przepuscmy ta liczbe jeszcze raz przez xor'owanie z liczna 12345678h.. teraz pewnie
nie wiesz jak to mozesz zrobic?? mozesz wyjsc z si i wyliczyc to kalkulatorem lub.. wyliczyc to w si.. ja zademonstruje ci jak to sie robi w si. Teraz zapamietaj sobie komende

?

tak.. zwykly pytajnik (?).... dzieki tej instrukcji mozesz wykonywac bardzo wiele operacji matematycznych uzywajac tylko odpowiedniego operatora. Operator zas jest to np. znak dodawania (+), dzielenia (/), mnozenia (*) i wszystkie inne matematyczne...
Operatorem xor'owania jest znak ^. Tak zwykly ^.... niepowiem jak sie na niego mowi bo niewiem (jak wiesz to mailme). Uzywa sie go w ten sposob:

? pierwszy_argument ^ drugi_argument

Argumentem moze byc rejestr jak rowniez konkretna wartosc... my wpiszemy konkretna wartosc.. bedzie ciekawiej... dla naszego xor'owania w ktorym xor'owana byla wartosc:

34333231h

ze stala wartoscia:

12345678h

a wynikiem czego bylo:

26076449h

czyli:

34333231h ^ 12345678h == 26076449h

zauwaz ze 34333231h to nic innego jak 4321 w ascii.. czyli odwrotnosc tego co wpisales.. no ale tak juz jest zbudowany ten komp ze tak sie dzieje.. gdybys zapisal to gdzies w pamieci mialbys znow odwrotny wynik czyli: 1234.. rozumiesz?? no to dobrze.. al
e my teraz sobie zrobimy taki tescik.. czyli odwrocimy xor'owanie.. a jak?? no ot prosze bardzo... wiemy ze kazda wpisana wartosc jest przenoszona do edi a nastepnie xor'owana z 12345678h czyli mozemy uznac ze 12345678h jest stala i w xor'owaniu bierze u
dzial zawsze natomiast zmieniaja sie wpisywane wartosci, czyli zawartosc edi. Nam daje to taka informacje ze 12345678h zawsze bierze udzial w xor'owaniu (w tym przykladzie of course) zmienia sie jedynie zawartosc edi.. wiec mozemy napisac w si:

? 12345678

ale dobra jeszcze brakuje nam drugiej liczby.. jako ze zakladamy ze niewiemy z czym bylo xor'owane 12345678h ze dalo wynik 26076449h wiec niewiemy... my natomiast ten wynik chcemy poznac a wg zaleznosci jaka przedstawia xor'owanie:

A xor B = C
B xor C = A
C xor A - B

czyli jesli uznamy ze:

A == 12345678h
B - jest tym z czym xor'owane bylo A
C == 26076449h (czyli wynik xor'owania A^B)

to:

A xor C powinno dac B czyli co?? tak wlasnie.. to B jest tym z czym xor'owane bylo 12345678h czyli w naszym przypadku jest wartoscia ktora trzeba wpisac w polu edycyjnym a innymi slowy jest serialem.. no to jesli wiemy juz wszystko o xor'owaniu to:

A xor C

czyli dla nas w si robimy tak:

? 12345678 ^ 26076449

po potwierdzeniu tego enter'em otrzymamy cos takiego:

34333231  0875770417  "4321"
 ^^^^^      *****       &&

wynik podawany jest hex'adecymalnie, dec'ymalnie, ascii
Wartosci hex oznaczylem ^^^
Wartosci dec oznaczylem ***
W postaci znakow oznaczylem &&&

No to widzisz teraz ze w ^^^ jest to co bylo xor'owane z 12345678h przed wystapieniem tego xorowania. A pod &&& jest odpowiednik tego ciagu ale w postaci znakow ascii czyli jest to, to co wpisalismy pisane od tylu czyli wpisalismy 1234 to tu mamy 4321, g
dybysmy wpisali 5678 to tu mielibysmy 8765....
Wniosek z tego calego testu jest taki ze xor'ujac liczbe 12345678h z wynikiem tego xor'owania czyli 26076449h otrzymamy w wyniku liczbe ktora zostala zxor'owana z 12345678h i czego wynikiem bylo 26076449h.. mam nadzieje ze to zrozumiales.. a jesli tak to
 teraz analogicznie zrob to samo tylko ze z tym wynikiem co byl porownywany z nim wynik z xor'owania naszego wpisanego seriala czyli to bylo 615B2213h .. no co?? jeszcze nie wiesz co masz zrobic?? he... powiem tylko ze zxor'uj interesujacy cie wynik (615
B2213h) z nasza stala (12345678h) a wynikiem bedzie pisany od tylu prawidlowy serial czyli jesli w wyniku bys otrzymal:

34333231  0875770417  "4321"

to w polu edycyjnym wpisujesz:

1234

mysle ze sobie poradzisz bo juz bardzo duzo napisalem o xor'owaniu (az za duzo) wiec zdziwilbym sie jakbys jeszcze czegos w tym temacie nie rozumial ale jesli tak by bylo to poprostu przestudiuj jeszcze raz tego tutoriala i lekcje nr 2 a jakby to nic nie
 pomoglo to jeszcze raz przestudiuj a jak to nie pomoze to sie przespi albo polukaj za innym tutorialem (mNICH'a), bo moze cos zle lub niejasno tlumacze a ty potrzebujesz cos duuuzo baardziej rozwleklego niz moj tutorial...

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 ...
Zgłoś jeśli naruszono regulamin