NULL-ZERO.COM

Good Things Come to Those Who Wait…

Cracking dla opornych cz. II

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)

Zpatchowalismy crackmes (http://www.quequero.org/crackme/filez/crackme04.zip), ale nie o to tu chodzilo. Jako że autor crackmes’a napisał że trzeba znaleźć właściwy numer seryjny dla nazwy użytkownika to nie będziemy gorsi i poszukamy tego numeru bez zmiany czegokolwiek w pliku wykonywalnym.


Wracamy do Ollydbg. Ładujemy plik i tym razem musimy ustawić breakpointy (pułapki) na odpowiednie adresy pamięci. Crackmes jest łatwy dlatego nie będzie problemów z określeniem miejsca postawienia breakpointów. W OlyyDbg breakpoint stawiamy klawiszem F2.

Zaczynamy więc analizę kodu. Patrzymy w miejsca gdzie program próbuje skoczyc do 00401547 (miejsca gdzie nie chcemy aby skoczył). Instrukcje

00401407 . 83F8 05 CMP EAX,5

0040140A . 0F8C 37010000 JL Crackme0.00401547

sprawdzają długość nazwy użytkownika (5 znaków). Potem

00401427 . 85C0 TEST EAX,EAX

00401429 . 0F84 18010000 JE Crackme0.00401547

sprawdza czy serial nie jest pusty. Potem jest kawałek kody z jakimiś wyliczeniami :) i dopiero pod :

004014A4 . 85C0 TEST EAX,EAX

004014A6 . 0F84 9B000000 JE Crackme0.00401547

jest kolejne sprawdzenie. Tutaj należy się na chwilę zatrzymać – pomiędzy 00401419 a 004014A4 są wyliczenia, a potem program coś porównuje. Sprawdźmy. Co ciekawe mamy coś takiego :

00401487 . 52 PUSH EDX ; /s

00401488 . 88440C 34 MOV BYTE PTR SS:[ESP+ECX+34],AL ; |

0040148C . FF15 A4214000 CALL DWORD PTR DS:[] ; \_strupr

co oznacza, że program przeprowadza na zawartości rejestru EDX – operację Uppercase na zmiennej typu tekstowego (string). Hmmm, ciekawe. W takim razie może podejrzyjmy co ma w sobie ten rejestr. Ustawiamy breakpointa (F2 w Ollydbg) na instrukcji 00401487 : PUSH EDX. Uruchamiamy program F9, wpisujemy np. Lamas i 12345 w polach nazwy użytkownika i serialu, klikamy Register i….ups – jesteśmy pod adresem 00401487!! W oknie Olly mamy podgląd zawartości rejestrów, patrzymy co jest w EDX. A jest tam : EDX 0012F758 ASCII “57fj-3ihdb28″. Ha! Może to nasz numer seryjny!!

Ponieważ funkcja strupr robi na nim funkcję Uppercase, więc jeśli założymy breakpoint na adres 004014A6 i puścimy dalej wykonywanie programu dostaniemy EDX 0012F758 ASCII “57FJ-3IHDB28″. Spisujemy serial i próbujemy już bez Ollydbg – odpalamy program i wpisujemy „Lamas” i „57FJ-3IHDB28”. Rejestrujemy i….”Well done, cracker!”.

Znów udało się nam złamać crackmes’a.

Any comments ??

Krzysiek SQ7RO

http://rosetta.null-zero.com/wp-content/plugins/sociofluid/images/digg_32.png http://rosetta.null-zero.com/wp-content/plugins/sociofluid/images/reddit_32.png http://rosetta.null-zero.com/wp-content/plugins/sociofluid/images/delicious_32.png http://rosetta.null-zero.com/wp-content/plugins/sociofluid/images/newsvine_32.png http://rosetta.null-zero.com/wp-content/plugins/sociofluid/images/technorati_32.png http://rosetta.null-zero.com/wp-content/plugins/sociofluid/images/google_32.png http://rosetta.null-zero.com/wp-content/plugins/sociofluid/images/myspace_32.png http://rosetta.null-zero.com/wp-content/plugins/sociofluid/images/facebook_32.png

Nie ma podobnych postów.

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
7 comments

7 Comments so far

  1. Siegfried August 17th, 2006 15:15

    a powiedz mi jeszcze jedno – na razie mowimy tutaj o crackmes. jak ma sie sprawa z ollydbg i zywymi celami? bo np na amigach exeki byly najczesciej kilkakrotnie spakowane roznymi cruncherami i zeby dostac sie do miesa to trzeba bylo najpierw je rozpakowac (co czasami bylo problematyczne). jest jakis uniwersalny depacker na pc?

  2. SQ7RO August 17th, 2006 15:31

    nie ma uniwersalnego. Jest co najmniej kilkanascie programow ktorymi mozna pakowac pliki PE + kilka(nascie) crypterow do plikow wykonywalnych… :) Nie ma lekko. Oczywiscie mowie teraz o w miare “uniwersalnych” rozwiazaniach – czyli pakerach dostepnych w necie (pomijam samoróbki) :) Do rozpoznawania jakim pakerem jest plik spakowany polecam np. program FI (fileinfo) albo PEScan

  3. SQ7RO August 17th, 2006 15:36

    aha, trzeba też powiedzieć o plikach zabezpieczonych w jeszcze inny sposób – nie spakowanych, ale z roznymi trikami, np. zmieniony Entry point. Takich pułapek też jest trochę. Dodatkowo zdarza się że wkompilowane w exe są moduły “antidebug” – wtedy nawet softice’m ani olly nie wejdziesz do pliku ;]

  4. SQ7RO August 17th, 2006 15:42

    jedno z bardziej ciekawych zabezpieczeń dotyczyło gry Settlers. Tam zastosowali dość skomplikowane oprogramowanie które wykrywało debugger, nie można było zdisassemblować pliku i ogólnie cięzko było gdziekolwiek się uczepić. Oczywiście zabezpiczenie zostało złamane. Problem w tym że po jakimś czasie w grze zamiast wydobywać się żelazo “wydobywały” się świnki :D CAŁA MASA ŚWINEK :D

  5. Siegfried August 17th, 2006 16:11

    :)
    no obecnie np Skype oznajmia radosnie ze nie jest kompatybilny z softice :) nie wiem dlaczego;)
    tak czy siak nie da sie wykryc emulatora programowego – niestety zadnego nie znam.

    co do omijania “wstepnej” fazy zabawy z plikiem – swego czasu zamiast grzebac sie w tych depakerach to patchowalem sobie po prostu jakas funkcje systemowa (np wyswietl okienko) tak ze czekala na wywolanie z danymi parametrami (np string ENTER SERIAL), nastepnie po prostu zrzucala fragment kodu ktory ja wywolywal na dysk. Potem trzeba to bylo sobie obejrzec, pozmieniac odpowiednie rzeczy, poobliczac offsety i napisac patcha ;) mysle za na PC tez da rade w ten sposob zaatakowac ;)

  6. sq7ro August 17th, 2006 18:23

    Mozna pathowac bezposrednio program w pamieci – tam bedzie przewaznie w rozpakowanej postaci :)

  7. Bartek June 14th, 2008 19:29

    Wszystko OK ale dalej nie wiem skad sie wzial ‘Lukas’.
    Moze mi to ktos wytlumaczyc?

    Z gory dzieki ; )

Leave a reply