RE – analiza wsteczna prostego programu

W tym poście zacznę serię z inżynierii wstecznej. Zakładam, że czytający ma bardzo podstawową wiedzę, która wystarczy do zrozumienia tego co tu piszę. Wykorzystam tu darmowe oprogramowanie IDA Pro.

Będziemy analizować ten plik o sumie kontrolnej MD5 CAE438D44DA5126403D6201741B6B1E0 będącej jednak równocześnie nazwą pliku. Wiemy, że plik ten nie jest złośliwy, więc możemy go bezpiecznie uruchomić. Otrzymujemy taki rezultat:

Zrzut ekranu 2016-04-01 23.02.29

Pokazuje się konsola, więc wiemy że program ten jest konsolowy. Program wykrzacza się jednak. Wymaga więc prawdopodobnie parametrów. Zobaczymy zwracaną wartość programu za pomocą komendy echo %errorlevel% oraz przetestujemy kilka standardowych parametrów ( /?, –?, –help, /help, –h, /h).Zrzut ekranu 2016-04-01 23.08.52

Aplikacja zwraca nam liczbę -1073741819, czyli zwyczajnie się wykrzacza. Żaden ze standardowych argumentów pomocy również nam nie pomaga. Musimy więc rozpocząć proces diassemblacji za pomocą IDY. Po uruchomieniu widzimy coś takiego:
1
Możemy zacząć od szukania funkcji main (Graph View z pewnością by nam w tym pomógł), lecz najpierw spójrzmy w „Strings window”, może znajdziemy tam coś ciekawego. Większość z nich nas nie interesuje, są to dodatki dorzucane przez kompilator. Możemy jednak zauważyć kilka ciekawych pozycji:

2Znajdujemy tam takie pozycje jak:

  • „Analyzing… \n”
  • „Printing ASCII… \n”
  • „analyze”
  • „noSound”
  • „\nRunning without sound”
  • „ascii”
  • „calc”
  • „calc.exe”
  • „Started calc.exe with PID: %u, waiting for exit…”
  • „Process exited”

Zacznijmy od pierwszej czyli „Analyzing… \n”. Od razu rzuca nam się w oczy znak ‚\n’ przenoszący nas do nowej lini. Kontynuujmy. Znajdujemy dużą ilość skoków do funkcji:

3Więc zwyczajnie do niej przejdźmy. Jak można było się spodziewać, mamy offset właśnie na ten string. Widzimy tam typową pętle (mnemonik jmp wskazujący na loc_40153A, który zaczyna pętle z dekrementacją pewnego typu(nazwijmy go n) o jeden) zaznaczoną strzałką po lewej stronie. Wypisuje ona zapewne aktualną wartość n.

4

Wiemy więc już, że string „Analyzing… \n” jest powiązany z wypisywaniem n w nowej lini co każdą iteracje pętli, i że n jest zmniejszane o jeden. Przejdźmy teraz do analogicznego stringu „analyze”. Jak można zobaczyć, rzutuje on na część kod powiązany z loc_40153A, czyli naszej pętli. Stąd wniosek, że „analyze” może być naszym pierwszym znalezionym argumentem programu. Sprawdźmy to:
Zrzut ekranu 2016-04-02 19.35.52
Jak widać nasza aplikacja wykonała się, oraz zwróciła 0. Przejdźmy do kolejnych stringów: „ascii” i „Printing ASCII\n”. Znajdujemy tak rzutowanie na loc_401587, w którym widzimy to:

Bez tytułu

Czyli jak można się domyślić funkcja ta wypisuje tablicę ASCII. Sprawdźmy to:

Zrzut ekranu 2016-04-02 20.30.36.png
Zgodnie z przewidywaniem otrzymaliśmy wyjście w postaci tablicy ASCII.
Sprawdźmy też inne stringi, spróbujmy uruchomić tę aplikację z nimi jako argumentami:

Zrzut ekranu 2016-04-02 20.33.55.png

Kilka z nich faktycznie działa jako argumenty. Możemy więc podsumować:

  • Program ten bez podanych argumentów „wykrzacza się”
  • Program ten obsługuje 4 argumenty: „ascii”, „analyze”, „calc” oraz „noSound”
  • „ascii” powoduje wypisanie na standardowe wyjście tablicy ASCII
  • „analyze” jest prostą pętlą wypisującą cyfry od dziesięciu do jednego
  • „noSound” powoduje wypisanie na standardowe wyjście napisu „Running without sound”
  • „calc” powoduje uruchomienie kalkulatora i oczekuje na jego zamknięcie

Z grubsza tyle, następnym razem przeanalizujemy już szkodliwe oprogramowanie :3

 

Reklamy

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Zdjęcie na Google+

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s