Manual DeObfuscation

Ręczne Techniki De-obfuskacji

W dziedzinie bezpieczeństwa oprogramowania, proces przekształcania zatartego kodu w zrozumiały, znany jako de-obfuskacja, jest kluczowy. Ten przewodnik zagłębia się w różne strategie de-obfuskacji, koncentrując się na technikach analizy statycznej i rozpoznawaniu wzorców obfuskacji. Dodatkowo wprowadza ćwiczenie do praktycznego zastosowania i sugeruje dalsze zasoby dla tych, którzy są zainteresowani zgłębianiem bardziej zaawansowanych tematów.

Strategie dla Statycznej De-obfuskacji

Podczas pracy z zatartym kodem, można zastosować kilka strategii w zależności od charakteru obfuskacji:

  • Bytecode DEX (Java): Jednym z efektywnych podejść jest zidentyfikowanie metod de-obfuskacji aplikacji, a następnie odtworzenie tych metod w pliku Java. Plik ten jest wykonywany, aby odwrócić obfuskację na docelowych elementach.

  • Kod Java i Native: Inną metodą jest przetłumaczenie algorytmu de-obfuskacji na język skryptowy, taki jak Python. Ta strategia podkreśla, że głównym celem nie jest pełne zrozumienie algorytmu, ale skuteczne jego wykonanie.

Identyfikacja Obfuskacji

Rozpoznanie zatartego kodu to pierwszy krok w procesie de-obfuskacji. Kluczowe wskaźniki to:

  • brak lub zniekształcenie ciągów w Java i Android, co może sugerować obfuskację ciągów.

  • obecność plików binarnych w katalogu zasobów lub wywołania DexClassLoader, co sugeruje rozpakowywanie kodu i dynamiczne ładowanie.

  • użycie bibliotek natywnych obok nieidentyfikowalnych funkcji JNI, co wskazuje na potencjalną obfuskację metod natywnych.

Analiza Dynamiczna w De-obfuskacji

Poprzez wykonywanie kodu w kontrolowanym środowisku, analiza dynamiczna umożliwia obserwację, jak zatarte kody zachowują się w czasie rzeczywistym. Ta metoda jest szczególnie skuteczna w odkrywaniu wewnętrznych mechanizmów złożonych wzorców obfuskacji, które mają na celu ukrycie prawdziwego zamiaru kodu.

Zastosowania Analizy Dynamicznej

  • Deszyfrowanie w czasie rzeczywistym: Wiele technik obfuskacji polega na szyfrowaniu ciągów lub segmentów kodu, które są deszyfrowane tylko w czasie wykonywania. Dzięki analizie dynamicznej te zaszyfrowane elementy mogą być uchwycone w momencie deszyfrowania, ujawniając ich prawdziwą formę.

  • Identyfikacja Technik Obfuskacji: Monitorując zachowanie aplikacji, analiza dynamiczna może pomóc zidentyfikować konkretne techniki obfuskacji, które są używane, takie jak wirtualizacja kodu, pakowanie lub dynamiczne generowanie kodu.

  • Odkrywanie Ukrytej Funkcjonalności: Zatarte kody mogą zawierać ukryte funkcjonalności, które nie są widoczne tylko poprzez analizę statyczną. Analiza dynamiczna pozwala na obserwację wszystkich ścieżek kodu, w tym tych wykonywanych warunkowo, aby odkryć takie ukryte funkcjonalności.

Odniesienia i Dalsza Lektura

  • BlackHat USA 2018: “Unpacking the Packed Unpacker: Reverse Engineering an Android Anti-Analysis Library” [video]

  • Ta prezentacja omawia inżynierię wsteczną jednej z najbardziej złożonych bibliotek natywnych antyanalizacyjnych, jakie widziałem w użyciu przez aplikację Android. Skupia się głównie na technikach obfuskacji w kodzie natywnym.

  • REcon 2019: “The Path to the Payload: Android Edition” [video]

  • Ta prezentacja omawia szereg technik obfuskacji, wyłącznie w kodzie Java, które botnet Androida używał do ukrywania swojego zachowania.

Last updated