Wyniki konkursu Pimp My Crackme

Konkurs Pimp My Crackme doczekał się finału, nagrodą w konkursie na stworzenie ciekawego CrackMe była wejściówka na konferencję CONFidence 2011.

Wyniki

Otrzymałem łącznie 3 zgłoszenia, po przeanalizowaniu nadesłanych prac, wyniki prezentują się następująco:

Miejsce 1 – Mateusz „j00ru” Jurczyk & Gynvael Coldwind

Za ciekawe podejście do problemu weryfikacji numeru seryjnego, techniczne aspekty związane z funkcjonowaniem CrackMe oraz nietypowy interfejs.

Miejsce 2 – hasherezade

Za custom encryptora (i trud włożony w jego poprawne funkcjonowanie) oraz interesujący algorytm weryfikujący.

Miejsce 3 – Grzegorz „haker500” Jastrzębski

Za sam fakt chęci uczestnictwa w konkursie oraz stworzenie CrackMe w assemblerze.

Nagrody

Chciałbym w tym miejscu podziękować wszystkim uczestnikom za to, że dają jeszcze nadzieję przetrwania dziedzinie jaką jest reverse-engineering i w ramach podziękowania, udało mi się namówić organizatorów konferencji CONFidence (podziękowania należą się panu Sławomirowi Jabsowi, który podzielił moje zdanie, że warto wspierać takie inicjatywy i ludzi, którzy w nich uczestniczą) do przyznania wszystkim uczestnikom nagrody w postaci 3 wejściówek!

Download

Wszystkie CrackMe są do ściągnięcia poniżej:

SecurityNews-Pimp-My-Crackme.zip (2,46 MB)

Rozwiązania

Rozwiązania CrackMe zostaną opublikowane po około miesiącu czasu wraz z komentarzami autorów oraz ich kodami źródłowymi.

Fin

Dziękuję wszystkim uczestnikom konkursu i zachęcam do brania udziału w innych konkursach, które wkrótce ruszą na stronie.

Pozostałych czytelników zachęcam do uczestnictwa w konferencji CONFidence, bo zostało już niewiele czasu, będzie można na niej spotkać m.in. naszych laureatów (i jedną laureatkę).

Konkurs Pimp My CrackMe

Serwis SecurityNews organizuje konkurs na stworzenie wyjątkowego CrackMe. Do wygrania wejściówka na konferencję CONFidence 2011 odbywającą się w Krakowie w dniach 24-25 maja o wartości 700 zł.

Wymagania:

  • tylko Windows 32 bit
  • 1 plik PE exe
  • dowolny język programowania

Co będzie oceniane:

  • skala trudności
  • pomysłowość
  • innowacyjność
  • wizualne walory

Co nie jest akceptowane:

  • użycie publicznych pakerów / protektorów / obfuscatorów (custom jak najbardziej, z tym, że trzeba będzie podać opis techniczny jego działania, jako dodatkowego narzędzia użytego do zabezpieczenia)
  • z założenia niełamliwe CrackMe odpadają (czyli bez RSA-2048 itp.)

Co należy dostarczyć:

  • plik binarny CrackMe
  • pliki źródłowe CrackMe
  • krótki opis CrackMe w pliku tekstowym (wymagania sprzętowe, cel CrackMe)
  • rozwiązanie wraz z opisem mechanizmu zabezpieczenia (krótki)

CrackMe należy wysłać do 14 maja 2011 na redakcyjny adres e-mail. Autor zwycięskiego CrackMe zostanie ogłoszony 16 maja i otrzyma darmową wejściówkę na konferencję CONFidence 2011 (imienna, nie można jej sprzedać!).

Wszystkie zgłoszone CrackMe będą później stopniowo publikowane na łamach naszego serwisu niosąc rozrywkę wszystkim czytelnikom, a po miesiącu czasu będzie publikowane oficjalne rozwiazanie do kolejnego CrackMe.

CONFidence 2011

CONFidence to coroczna konferencja dotycząca ogólnie pojętej tematyki bezpieczeństwa komputerowego, odbywa się ona od 2005 roku i przyciąga światowej sławy specjalistów z całego świata.

Konferencja odbywa się w dniach 24-25 maja w Krakowie w klimacie postindustrialnej przepompowni wody na Bielanach.

Oprócz ciekawych wykładów, wsród których nie zabraknie tematyki reverse-engineeringu, uczestnicy będą mogli wziąć udział w grach i konkursach (wśród, których prym wiedzie coroczne CrackMe firmy ESET).

Agenda — http://2011.confidence.org.pl/agenda

Rejestracja — http://rejestracja.confidence.org.pl/

 

Stuxnet

Miażdząca krytyka jednego z najbardziej ciekawych wirusów komputerowych ostatnich lat, wytyka brak wykorzystania nowoczesnych metod obfukacji, wirtualizacji kodu czy ukrywania payloadu:

Stuxnet is embarrassing, not amazing

Jak się tak zastanowić, to sam mam wątpliwości czy istnieją jeszcze wirusy z polimorficznymi czy metamorficznymi silnikami?

Reversing Clipper

Clipper – czyli czego się nie nauczyłem

Clipper to język programowania z czasów DOS-a, ściśle związany z operowaniem na bazach danych, można powiedzieć, że to protoplasta Visual FoxPro.

Piszę o tym, ponieważ przed świętami otrzymałem zlecenie na modyfikację starego programu napisanego w środowisku Clipper, modyfikacja miała polegać na zmianie stawki VAT z 22% na 23% i 7% na 8%, czyli popularny ostatnio temat, związany z noworoczną zmianą stawki podatkowej.

Opiszę jedynie jak zabrać się za tego typu oprogramowanie, ponieważ w sieci nie znalazłem praktycznie żadnych materiałów o analizie aplikacji Clippera.

Rozpoznanie

Po czym poznać, że stara aplikacja DOS jest utworzona w Clipperze? Ja poznałem po tym, że jak załadowałem ją do IDA to nic nie rozumiałem z kodu ani żadnych ciekawych tekstowych referencji nie znalazłem, po prostu syf w czystej postaci, nawet sobie pomyślałem, że to jakaś aplikacja z DOSowego piekła rodem.

Przeglądając binarkę pod HIEW dostrzegłem jednak ciekawe informacje:

A więc wiadomo, że to Clipper w wersji 5.2. Mamy jakiś punk zaczepny.

Analiza

Aplikacje w Clipperze kompilowane są do pseudokodu (p-code), więc jeszcze lepiej zapowiadała się analiza, nawet nie wiedziałem, że w czasach DOSu ludzie mieli taką fantazję, żeby już tworzyć podwaliny pod platformę .net 🙂

Jednak ku mojemu zaskoczeniu i długim wyszukiwaniu, udało mi się znaleźć działający dekompilator, co uznałem wręcz za cud (w końcu były święta), ponieważ wiek samego anailzowanego programu jak i dekompilatora był już dość spory.

Odnaleziony dekompilator to Valkyrie 5, stworzony przez tą samą firmę, która jest odpowiedzialna za środowisko CA-Clipper.

Po otworzeniu głównego pliku aplikacji w dekompilatorze, ukaże się nam okno z informacjami i statystykami dla aplikacji:

Co ważne i na co należy zwrócić uwagę, to że aplikacja w Clipperze oprócz funkcji samego Clippera posiada również funkcje napisane w C/Assemblerze, które nie zostaną zdekompilowane, a jedynie uzyskamy dostęp do informacji o ich położeniu w pliku binarnym.

Domyślnym oknem w dekompilatorze jest lista modułów, z których zbudowana jest aplikacja oraz ich funckje:

Składnia języka Clipper nie jest zbyt skomplikowana (przypomina trochę Pascala) i można w miarę szybko ją zrozumieć, co ciekawe i co zwróciło moją uwagę to funkcja EVAL, która pozwala wykonać podany blok kodu źródłowego (jak eval z PHP).

Przykładowa zdekompilowana funkcja:

Oprócz kodu w HLL, można samą funkcję obejrzeć w p-code (i jak się można domyśleć modyfikacje również muszą być dokonywane manipulując na p-code):

Oprócz funkcji napisanych w języku Clipper, wspominałem wyżej, że plik może również zawierać natywny kod, listę tych funkcji możemy podejrzeć po wybraniu Menu -> View -> Externals:

Do ich podglądu należy skorzystać już z HIEW.

Bazy danych

Aplikacje Clipper domyślnie są aplikacjami bazodanowymi, a format plików jakim operują to *.DBF, muszę przyznać, że trochę czasu mi zajęło znalezienie odpowiedniej aplikacji do podglądu tego typu plików i pierwsza z nich, którą polecam to DBF Viewer 2000, a jeśli posiadacie środowisko Visual FoxPro to również z jego poziomu można przeglądać bazy danych w tym formacie, co było małym zaskoczeniem, że obsługiwane są bazy w tak starym formacie.

Uruchamianie

Z aplikacją, z którą ja pracowałem, miałem problem, żeby w ogóle ją uruchomić, pod konsolą DOS w systemie Windows odmawiała posłuszeństwa, DOSBox 0.74 również niewiele pomógł, ratunkiem okazał sie po prostu natywny MS-DOS 6.22 uruchamiany pod VMWare.

Przy okazji próbowałem dobrać się do tej aplikacji jakimś starym debuggerem jednak bez większych efektów, bo jak się okazało Clipper i SoftICE za bardzo się nie lubią, ale na pamiątkę strzeliłem screenshota:

Czego się nie nauczyłem?

Głównie tego jak poprawnie debugować tego typu aplikacje i jak modyfikować więcej niż kilka instrukcji, nie mówiąc o podmianie całych bloków kodu. Clipper należy już z zasadzie do przeszłości, ale mimo wszystko warto czasami zobaczyć jak zbudowane były i jak funkcjonowały stare aplikacje, bo wiele z tych technik (czy zamysłów) jest obecnie wykorzystywanych.