Analiza FentCat's c/c++ Crackme
Spróbujmy rozłożyć na czynniki pierwsze takie oto CrackMe:
https://crackmes.one/crackme/68ff622c2d267f28f69b78de
Hasło do rozpakowania pliku ZIP standardowe, jak dla wszystkich CrackMe z crackmes.one 😉
Najpierw zobaczmy co to właściwie jest. Uruchamiam Detect It Easy i otwieram plik.
Po „File type: PE64” widzę, że jest to aplikacja 64-bitowa, więc będziemy używać x64dbg. Zgodnie z nazwą CrackMe została napisana w C/C++. Jest to aplikacja konsolowa.
Zatem uruchommy plik. Pierwsza rzecz, którą zauważyłem przy testowaniu: po wpisaniu testowego kodu pojawia się wiadomość z błędem.
Zobaczmy w x64dbg, o co tutaj chodzi. Otwieram plik w debuggerze, klikam „Run”, aż dojdziemy do Entry Point. Wyszukuję „Error” w String References (Shift+D)
Przechodzę do miejsca, gdzie ten string się pojawia, scrollując wyżej, szukam początku funkcji i odpalam graf. Tutaj już coś więcej widać.
Mamy tutaj kilka funkcji, które sprawdzają obecność debuggera, ale w naszym przypadku nie jest on wykrywany, więc zupełnie je pomijam.
Dużo ciekawszy jest ten fragment:
Ten call ustawia RAX na 0x1, przez co później następuje skok do kodu wyświetlającego wiadomość z błędem. Przyjrzyjmy się temu.
Ewidentnie mamy tutaj próbę detekcji maszyn wirtualnych, a tak się składa, że w takiej uruchamiam program.
Najlepiej będzie zrobić prosty patch:
Instrukcję JNE pod callem sprawdzającym obecność maszyny wirtualnej zamienię na NOP. Potem zpatchuję plik.
Zpatchowany plik wykonuje się poprawnie 😀 Brak jakichkolwiek błędów.
Mamy to! Teraz tylko zostało dojść do tego, jaki jest klucz… Wyszukujemy znowu String (Shift+D), ale tym razem szukamy „Enter serial key”, przełączamy na graf i analizujemy, co tu się dzieje… Ewidentnie w kilku miejscach pojawia się porównanie długości wprowadzonego ciągu znaków z 0x20 (czyli 32 w systemie dziesiętnym).
Spróbujmy wprowadzić 32-znakowy kod.
Po analizie w debuggerze okazuje się, że takiej długości kod powoduje, że wykonujemy kolejne poprawne skoki (i unikamy niepoprawnych) w stronę sukcesu. Wychodzi na to, że można wprowadzić dowolny ciąg znaków o długości 32 i dostaniemy poprawną wiadomość!
Mam nadzieję, że taka krótka analiza prostego CrackMe się podobała 😀 W krótce pojawi się więcej tego typu analiz.
