From c05a687430da46c213a9a2169851c914bba4ad37 Mon Sep 17 00:00:00 2001 From: Translator Date: Thu, 24 Jul 2025 18:12:15 +0000 Subject: [PATCH] Translated ['src/mobile-pentesting/android-app-pentesting/manual-deobfus --- .../manual-deobfuscation.md | 98 ++++++++++++++++--- 1 file changed, 84 insertions(+), 14 deletions(-) diff --git a/src/mobile-pentesting/android-app-pentesting/manual-deobfuscation.md b/src/mobile-pentesting/android-app-pentesting/manual-deobfuscation.md index 99138ab58..a08b393ca 100644 --- a/src/mobile-pentesting/android-app-pentesting/manual-deobfuscation.md +++ b/src/mobile-pentesting/android-app-pentesting/manual-deobfuscation.md @@ -1,39 +1,109 @@ +# Ręczne techniki deobfuskacji + {{#include ../../banners/hacktricks-training.md}} -## Ręczne **Techniki Deobfuskacji** +## 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. +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 Deobfuskacji Statycznej** +### **Strategie deobfuskacji statycznej** -Podczas pracy z **zatartym kodem**, można zastosować kilka strategii w zależności od charakteru 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 deobfuskacji aplikacji, a następnie odtworzenie tych metod w pliku Java. Plik ten jest wykonywany, aby odwrócić obfuskację na docelowych elementach. - **Kod Java i natywny**: 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. -### **Identyfikacja Obfuskacji** +### **Rozpoznawanie obfuskacji** Rozpoznanie zatartego kodu to pierwszy krok 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. +- **brak lub zatarcie 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 do `DexClassLoader`, co sugeruje rozpakowywanie kodu i dynamiczne ładowanie. -- użycie **bibliotek natywnych obok nieidentyfikowalnych funkcji JNI**, co wskazuje na potencjalną obfuskację metod natywnych. +- Użycie **bibliotek natywnych obok nieidentyfikowalnych funkcji JNI**, co wskazuje na potencjalną obfuskację metod natywnych. -## **Analiza Dynamiczna w Deobfuskacji** +## **Analiza dynamiczna w deobfuskacji** -Wykonując kod 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. +Wykonując kod w kontrolowanym środowisku, analiza dynamiczna **pozwala na obserwację, jak zatarte kody zachowują się w czasie rzeczywistym**. Metoda ta 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** +### **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ą oczywiste tylko poprzez analizę statyczną. Analiza dynamiczna pozwala na obserwację wszystkich ścieżek kodu, w tym tych wykonywanych warunkowo, aby odkryć takie ukryte funkcjonalności. +- **Identyfikacja technik obfuskacji**: Monitorując zachowanie aplikacji, analiza dynamiczna może pomóc w identyfikacji konkretnych technik obfuskacji, takich 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 +### Zautomatyzowana deobfuskacja z LLM (Androidmeda) + +Podczas gdy poprzednie sekcje koncentrują się na w pełni ręcznych strategiach, w 2025 roku pojawiła się nowa klasa narzędzi zasilanych *modelami językowymi (LLM)*, które mogą zautomatyzować większość żmudnej pracy związanej z renamingiem i odzyskiwaniem przepływu kontrolnego. +Jednym z reprezentatywnych projektów jest **[Androidmeda](https://github.com/In3tinct/Androidmeda)** – narzędzie w Pythonie, które przyjmuje *dekompilowane* źródła Java (np. produkowane przez `jadx`) i zwraca znacznie oczyszczoną, skomentowaną i zabezpieczoną wersję kodu. + +#### Kluczowe możliwości +* Zmienia nazwy bezsensownych identyfikatorów generowanych przez ProGuard / DexGuard / DashO / Allatori / … na *semantyczne* nazwy. +* Wykrywa i restrukturyzuje **spłaszczanie przepływu kontrolnego**, zastępując nieprzezroczyste maszyny stanowe switch-case normalnymi pętlami / konstrukcjami if-else. +* Deszyfruje powszechne **wzorce szyfrowania ciągów**, gdy to możliwe. +* Wstrzykuje **komentarze w linii**, które wyjaśniają cel złożonych bloków. +* Wykonuje *lekkie skanowanie bezpieczeństwa statycznego* i zapisuje wyniki do `vuln_report.json` z poziomami powagi (informacyjne → krytyczne). + +#### Instalacja +```bash +git clone https://github.com/In3tinct/Androidmeda +cd Androidmeda +pip3 install -r requirements.txt +``` +#### Przygotowanie wejść +1. Dezaktywuj docelowy APK za pomocą `jadx` (lub innego dekompilatora) i zachowaj tylko katalog *source*, który zawiera pliki `.java`: +```bash +jadx -d input_dir/ target.apk +``` +2. (Opcjonalnie) Przytnij `input_dir/`, aby zawierał tylko pakiety aplikacji, które chcesz analizować – znacznie przyspiesza to przetwarzanie i koszty LLM. + +#### Przykłady użycia + +Zdalny dostawca (Gemini-1.5-flash): +```bash +export OPENAI_API_KEY= +python3 androidmeda.py \ +--llm_provider google \ +--llm_model gemini-1.5-flash \ +--source_dir input_dir/ \ +--output_dir out/ \ +--save_code true +``` +Offline (lokalny `ollama` backend z llama3.2): +```bash +python3 androidmeda.py \ +--llm_provider ollama \ +--llm_model llama3.2 \ +--source_dir input_dir/ \ +--output_dir out/ \ +--save_code true +``` +#### Wynik +* `out/vuln_report.json` – tablica JSON z `file`, `line`, `issue`, `severity`. +* Odbity drzewo pakietów z **deobfuskowanymi plikami `.java`** (tylko jeśli `--save_code true`). + +#### Wskazówki i rozwiązywanie problemów +* **Pominięta klasa** ⇒ zazwyczaj spowodowana nieparsowalną metodą; izoluj pakiet lub zaktualizuj wyrażenie regularne parsera. +* **Wolny czas działania / wysokie zużycie tokenów** ⇒ wskaźnik `--source_dir` na *konkretne* pakiety aplikacji zamiast całego dekompilatu. +* Zawsze *ręcznie przeglądaj* raport o podatnościach – halucynacje LLM mogą prowadzić do fałszywych pozytywów / negatywów. + +#### Wartość praktyczna – studium przypadku złośliwego oprogramowania Crocodilus +Przetwarzanie mocno obfuskowanego próbki z 2025 *Crocodilus* trojana bankowego przez Androidmeda skróciło czas analizy z *godzin* do *minut*: narzędzie odzyskało semantykę grafu wywołań, ujawniło wywołania do API dostępności i zakodowane na stałe adresy URL C2, a także wygenerowało zwięzły raport, który można było zaimportować do pulpitów analityków. + +--- + +## 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 dotyczy inżynierii odwrotnej jednej z najbardziej złożonych natywnych bibliotek antyanalizacyjnych, jakie widziałem w aplikacji Android. Dotyczy głównie technik 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. +- Deobfuskowanie aplikacji Android z Androidmeda (post na blogu) – [mobile-hacker.com](https://www.mobile-hacker.com/2025/07/22/deobfuscating-android-apps-with-androidmeda-a-smarter-way-to-read-obfuscated-code/) +- Kod źródłowy Androidmeda – [https://github.com/In3tinct/Androidmeda](https://github.com/In3tinct/Androidmeda) - [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. Dotyczy głównie technik obfuskacji w kodzie natywnym. +- Ta prezentacja dotyczy inżynierii odwrotnej jednej z najbardziej złożonych natywnych bibliotek antyanalizacyjnych, jakie widziałem w aplikacji Android. Dotyczy głównie technik 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.