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.