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.