Translated ['src/mobile-pentesting/android-app-pentesting/manual-deobfus

This commit is contained in:
Translator 2025-07-24 18:12:15 +00:00
parent 66e4e848d3
commit c05a687430

View File

@ -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=<your_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.