## 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](https://maddiestone.github.io/AndroidAppRE/obfuscation.html) * BlackHat USA 2018: “Unpacking the Packed Unpacker: Reverse Engineering an Android Anti-Analysis Library” \[[video](https://www.youtube.com/watch?v=s0Tqi7fuOSU)] * 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](https://recon.cx/media-archive/2019/Session.005.Maddie_Stone.The_path_to_the_payload_Android_Edition-J3ZnNl2GYjEfa.mp4)] * Ta prezentacja omawia szereg technik obfuskacji, wyłącznie w kodzie Java, które botnet Androida używał do ukrywania swojego zachowania.