Unpacking binaries

Zacznij naukę hakowania AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Identyfikacja spakowanych binariów

  • Brak ciągów znaków: Często zdarza się, że spakowane binaria praktycznie nie zawierają żadnych ciągów znaków.

  • Wiele nieużywanych ciągów znaków: Ponadto, gdy złośliwe oprogramowanie używa jakiegoś rodzaju komercyjnego pakera, często można znaleźć wiele ciągów znaków bez odwołań krzyżowych. Nawet jeśli te ciągi istnieją, nie oznacza to, że binarny plik nie jest spakowany.

  • Możesz również użyć narzędzi do próby znalezienia, który paker został użyty do spakowania binariów:

Podstawowe zalecenia

  • Zacznij analizować spakowany binarny od dołu w IDA i idź w górę. Unpackery kończą działanie, gdy kończy się kod rozpakowany, więc mało prawdopodobne jest, aby unpacker przekazał wykonanie do kodu rozpakowanego na początku.

  • Szukaj JMP lub CALLi do rejestrów lub obszarów pamięci. Szukaj również funkcji, które przekazują argumenty i adres kierunkowy, a następnie wywołują retn, ponieważ zwrócenie funkcji w tym przypadku może wywołać adres właśnie dodany na stosie przed jego wywołaniem.

  • Ustaw punkt przerwania na VirtualAlloc, ponieważ alokuje miejsce w pamięci, gdzie program może zapisać rozpakowany kod. "Uruchom do kodu użytkownika" lub użyj F8, aby uzyskać wartość w EAX po wykonaniu funkcji i "śledź ten adres w zrzucie". Nigdy nie wiesz, czy to jest obszar, w którym zostanie zapisany rozpakowany kod.

  • VirtualAlloc z wartością "40" jako argument oznacza Read+Write+Execute (niektóry kod wymagający wykonania zostanie skopiowany tutaj).

  • Podczas rozpakowywania kodu normalne jest znalezienie kilku wywołań operacji arytmetycznych i funkcji takich jak memcopy lub VirtualAlloc. Jeśli znajdziesz się w funkcji, która wydaje się wykonywać tylko operacje arytmetyczne i być może memcopy, zaleceniem jest spróbować znaleźć koniec funkcji (może to być JMP lub wywołanie do jakiegoś rejestru) lub przynajmniej wywołanie ostatniej funkcji i przejście do niej, ponieważ kod nie jest interesujący.

  • Podczas rozpakowywania kodu zauważ, kiedy zmieniasz obszar pamięci, ponieważ zmiana obszaru pamięci może wskazywać na początek kodu rozpakowywania. Możesz łatwo zrzucić obszar pamięci, używając Process Hacker (proces --> właściwości --> pamięć).

  • Próbując rozpakować kod, dobrym sposobem na sprawdzenie, czy już pracujesz z rozpakowanym kodem (aby go po prostu zrzucić), jest sprawdzenie ciągów znaków binariów. Jeśli w pewnym momencie wykonujesz skok (może zmieniając obszar pamięci) i zauważysz, że dodano znacznie więcej ciągów znaków, to możesz wiedzieć, że pracujesz z rozpakowanym kodem. Jednak jeśli pakowacz już zawiera wiele ciągów znaków, możesz sprawdzić, ile ciągów zawiera słowo "http" i zobaczyć, czy ta liczba wzrasta.

  • Gdy zrzucasz wykonywalny plik z obszaru pamięci, możesz naprawić niektóre nagłówki za pomocą PE-bear.

Zacznij naukę hakowania AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Last updated