hacktricks/mobile-pentesting/android-app-pentesting/manual-deobfuscation.md

3.7 KiB

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

  • https://maddiestone.github.io/AndroidAppRE/obfuscation.html
  • 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.