Manual DeObfuscation

Ręczne Techniki Deobfuskacji

W dziedzinie bezpieczeństwa oprogramowania, proces przekształcania zatartego kodu w zrozumiały, znany jako deobfuskacja, jest kluczowy. Ten przewodnik zagłębia się w różne strategie deobfuskacji, 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 Deobfuskacji

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 deobfuskacji aplikacji, a następnie odtworzenie tych metod w pliku Java. Plik ten jest wykonywany, aby cofnąć obfuskację na docelowych elementach.

  • Kod Java i Native: Inną metodą jest przetłumaczenie algorytmu deobfuskacji 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.

Rozpoznawanie Obfuskacji

Rozpoznanie zatartego kodu jest pierwszym krokiem w procesie deobfuskacji. 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 Deobfuskacji

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