Skip to content


Cracking dla opornych cz. II

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

Posted in TechBlog.


7 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. Siegfried says

    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 says

    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 says

    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 says

    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 says

    :)
    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 says

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

  7. Bartek says

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

    Z gory dzieki ; )



Some HTML is OK

or, reply to this post via trackback.