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

This commit is contained in:
Translator 2025-07-24 18:12:12 +00:00
parent 4c7065d853
commit 0b8d7618a0

View File

@ -1,40 +1,110 @@
# Manual De-obfuscation Techniques
{{#include ../../banners/hacktricks-training.md}}
## Ručne **Tehnike De-obfuskacije**
## Manual **De-obfuscation Techniques**
U oblasti **bezbednosti softvera**, proces pretvaranja obfuskovanog koda u razumljiv, poznat kao **de-obfuskacija**, je ključan. Ovaj vodič se bavi različitim strategijama za de-obfuskaciju, fokusirajući se na tehnike statičke analize i prepoznavanje obrazaca obfuskacije. Pored toga, uvodi vežbu za praktičnu primenu i predlaže dodatne resurse za one koji su zainteresovani za istraživanje naprednijih tema.
U oblasti **bezbednosti softvera**, proces pretvaranja zamagljenog koda u razumljiv, poznat kao **de-obfuscation**, je ključan. Ovaj vodič se bavi različitim strategijama za de-obfuscation, fokusirajući se na tehnike statičke analize i prepoznavanje obrazaca obfuscation. Pored toga, uvodi vežbu za praktičnu primenu i predlaže dodatne resurse za one koji su zainteresovani za istraživanje naprednijih tema.
### **Strategije za Statičku De-obfuskaciju**
### **Strategies for Static De-obfuscation**
Kada se radi sa **obfuskovanim kodom**, može se primeniti nekoliko strategija u zavisnosti od prirode obfuskacije:
Kada se radi sa **obfuscated code**, može se primeniti nekoliko strategija u zavisnosti od prirode obfuscation:
- **DEX bytecode (Java)**: Jedan efikasan pristup uključuje identifikaciju metoda de-obfuskacije aplikacije, a zatim repliciranje ovih metoda u Java datoteci. Ova datoteka se izvršava kako bi se obrnula obfuskacija na ciljnim elementima.
- **Java i Nativni Kod**: Druga metoda je prevođenje algoritma de-obfuskacije u skriptni jezik poput Pythona. Ova strategija naglašava da primarni cilj nije potpuno razumevanje algoritma, već njegovo efikasno izvršavanje.
- **DEX bytecode (Java)**: Jedan efikasan pristup uključuje identifikaciju metoda de-obfuscation aplikacije, a zatim repliciranje ovih metoda u Java datoteci. Ova datoteka se izvršava kako bi se obrnula obfuscation na ciljnim elementima.
- **Java and Native Code**: Druga metoda je prevođenje algoritma de-obfuscation u skriptni jezik poput Pythona. Ova strategija naglašava da primarni cilj nije potpuno razumevanje algoritma, već njegovo efikasno izvršavanje.
### **Prepoznavanje Obfuskacije**
### **Identifying Obfuscation**
Prepoznavanje obfuskovanog koda je prvi korak u procesu de-obfuskacije. Ključni indikatori uključuju:
Prepoznavanje obfuscated code je prvi korak u procesu de-obfuscation. Ključni indikatori uključuju:
- **odsustvo ili premeštanje stringova** u Javi i Androidu, što može sugerisati obfuskaciju stringova.
- **odsustvo ili premeštanje stringova** u Javi i Androidu, što može sugerisati obfuscation stringova.
- **prisutnost binarnih datoteka** u direktorijumu resursa ili pozivi ka `DexClassLoader`, što ukazuje na raspakivanje koda i dinamičko učitavanje.
- Korišćenje **nativnih biblioteka zajedno sa neidentifikovanim JNI funkcijama**, što ukazuje na potencijalnu obfuskaciju nativnih metoda.
- Korišćenje **native biblioteka zajedno sa neidentifikovanim JNI funkcijama**, što ukazuje na potencijalnu obfuscation native metoda.
## **Dinamička Analiza u De-obfuskaciji**
## **Dynamic Analysis in De-obfuscation**
Izvršavanjem koda u kontrolisanom okruženju, dinamička analiza **omogućava posmatranje kako se obfuskovani kod ponaša u realnom vremenu**. Ova metoda je posebno efikasna u otkrivanju unutrašnjih mehanizama složenih obrazaca obfuskacije koji su dizajnirani da sakriju pravu nameru koda.
Izvršavanjem koda u kontrolisanom okruženju, dinamička analiza **omogućava posmatranje kako se obfuscated code ponaša u realnom vremenu**. Ova metoda je posebno efikasna u otkrivanju unutrašnjih mehanizama složenih obrazaca obfuscation koji su dizajnirani da sakriju pravu nameru koda.
### **Primene Dinamičke Analize**
### **Applications of Dynamic Analysis**
- **Dešifrovanje u Vremenu Izvršavanja**: Mnoge tehnike obfuskacije uključuju enkripciju stringova ili kodnih segmenata koji se dešifruju samo u trenutku izvršavanja. Kroz dinamičku analizu, ovi enkriptovani elementi mogu se uhvatiti u trenutku dešifrovanja, otkrivajući njihov pravi oblik.
- **Prepoznavanje Tehnika Obfuskacije**: Praćenjem ponašanja aplikacije, dinamička analiza može pomoći u identifikaciji specifičnih tehnika obfuskacije koje se koriste, kao što su virtualizacija koda, pakovanje ili dinamičko generisanje koda.
- **Otkrivanje Sakrivenih Funkcionalnosti**: Obfuskovani kod može sadržati skrivene funkcionalnosti koje nisu očigledne samo kroz statičku analizu. Dinamička analiza omogućava posmatranje svih putanja koda, uključujući one koje se izvršavaju uslovno, kako bi se otkrile takve skrivene funkcionalnosti.
- **Runtime Decryption**: Mnoge tehnike obfuscation uključuju enkripciju stringova ili kodnih segmenata koji se dekriptuju samo u vreme izvršavanja. Kroz dinamičku analizu, ovi enkriptovani elementi mogu se uhvatiti u trenutku dekripcije, otkrivajući njihov pravi oblik.
- **Identifying Obfuscation Techniques**: Praćenjem ponašanja aplikacije, dinamička analiza može pomoći u identifikaciji specifičnih tehnika obfuscation koje se koriste, kao što su virtualizacija koda, pakovanje ili dinamičko generisanje koda.
- **Uncovering Hidden Functionality**: Obfuscated code može sadržati skrivene funkcionalnosti koje nisu očigledne samo kroz statičku analizu. Dinamička analiza omogućava posmatranje svih putanja koda, uključujući one koje se izvršavaju uslovno, kako bi se otkrile takve skrivene funkcionalnosti.
## Reference i Dalje Čitanje
### Automated De-obfuscation with LLMs (Androidmeda)
Dok se prethodni delovi fokusiraju na potpuno ručne strategije, 2025. godine pojavila se nova klasa *alatki pokretanih Velikim jezičkim modelima (LLM)* koja može automatizovati većinu dosadnog preimenovanja i oporavka kontrolnog toka.
Jedan reprezentativni projekat je **[Androidmeda](https://github.com/In3tinct/Androidmeda)** Python alat koji uzima *decompiled* Java izvore (npr. proizvedene od `jadx`) i vraća značajno očišćenu, komentarisanu i bezbednosno anotiranu verziju koda.
#### Key capabilities
* Preimenuje besmislene identifikatore generisane od ProGuard / DexGuard / DashO / Allatori / … u *semantička* imena.
* Otkriva i restrukturira **kontrolni tok**, zamenjujući neprozirne switch-case mašine stanja normalnim petljama / if-else konstrukcijama.
* Dekriptuje uobičajene **obrasce enkripcije stringova** kada je to moguće.
* Umeće **inline komentare** koji objašnjavaju svrhu složenih blokova.
* Izvodi *laganu statičku bezbednosnu analizu* i zapisuje nalaze u `vuln_report.json` sa nivoima ozbiljnosti (informativno → kritično).
#### Installation
```bash
git clone https://github.com/In3tinct/Androidmeda
cd Androidmeda
pip3 install -r requirements.txt
```
#### Priprema ulaza
1. Dekompajlirajte ciljni APK pomoću `jadx` (ili bilo kog drugog dekompilatora) i zadržite samo *source* direktorijum koji sadrži `.java` datoteke:
```bash
jadx -d input_dir/ target.apk
```
2. (Opcionalno) Skraćivanje `input_dir/` tako da sadrži samo aplikacione pakete koje želite da analizirate ovo značajno ubrzava obradu i troškove LLM-a.
#### Primeri korišćenja
Daljinski provajder (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 (local `ollama` backend with llama3.2):
```bash
python3 androidmeda.py \
--llm_provider ollama \
--llm_model llama3.2 \
--source_dir input_dir/ \
--output_dir out/ \
--save_code true
```
#### Izlaz
* `out/vuln_report.json` JSON niz sa `file`, `line`, `issue`, `severity`.
* Ogledalo paketa sa **de-obfuskiranim `.java` datotekama** (samo ako je `--save_code true`).
#### Saveti i rešavanje problema
* **Preskočena klasa** ⇒ obično uzrokovana neparsiranim metodom; izolujte paket ili ažurirajte regex parsera.
* **Sporo vreme izvršavanja / visoka potrošnja tokena** ⇒ usmerite `--source_dir` na *specifične* aplikacione pakete umesto na celu dekompilaciju.
* Uvek *ručno pregledajte* izveštaj o ranjivostima LLM halucinacije mogu dovesti do lažnih pozitivnih / negativnih rezultata.
#### Praktična vrednost Studija slučaja malvera Crocodilus
Provođenje snažno obfuskiranog uzorka iz 2025. *Crocodilus* bankarskog trojanca kroz Androidmeda smanjilo je vreme analize sa *sati* na *minute*: alat je povratio semantiku pozivnog grafa, otkrio pozive API-ima za pristupačnost i hard-kodirane C2 URL-ove, i proizveo sažet izveštaj koji se mogao uvesti u analitičke table.
---
## Reference i dalja literatura
- [https://maddiestone.github.io/AndroidAppRE/obfuscation.html](https://maddiestone.github.io/AndroidAppRE/obfuscation.html)
- BlackHat USA 2018: “Raspakivanje Pakovanog Raspakivača: Obrnuto Inženjerstvo Android Anti-Analiza Biblioteke” \[[video](https://www.youtube.com/watch?v=s0Tqi7fuOSU)]
- Ova prezentacija se bavi obrnutim inženjeringom jedne od najkompleksnijih anti-analiza nativnih biblioteka koje sam video da koristi Android aplikacija. Pokriva uglavnom tehnike obfuskacije u nativnom kodu.
- REcon 2019: “Put do Tereta: Android Izdanje” \[[video](https://recon.cx/media-archive/2019/Session.005.Maddie_Stone.The_path_to_the_payload_Android_Edition-J3ZnNl2GYjEfa.mp4)]
- BlackHat USA 2018: “Unpacking the Packed Unpacker: Reverse Engineering an Android Anti-Analysis Library” [[video](https://www.youtube.com/watch?v=s0Tqi7fuOSU)]
- Ova prezentacija se bavi obrnuto inženjerstvo jedne od najkompleksnijih anti-analitičkih nativnih biblioteka koje sam video da koristi Android aplikacija. Pokriva uglavnom tehnike obfuskacije u nativnom kodu.
- 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)]
- Ova prezentacija diskutuje o nizu tehnika obfuskacije, isključivo u Java kodu, koje je Android botnet koristio da sakrije svoje ponašanje.
- Deobfuscating Android Apps with Androidmeda (blog post) [mobile-hacker.com](https://www.mobile-hacker.com/2025/07/22/deobfuscating-android-apps-with-androidmeda-a-smarter-way-to-read-obfuscated-code/)
- Androidmeda izvorni kod [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)]
- Ova prezentacija se bavi obrnuto inženjerstvo jedne od najkompleksnijih anti-analitičkih nativnih biblioteka koje sam video da koristi Android aplikacija. Pokriva uglavnom tehnike obfuskacije u nativnom kodu.
- 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)]
- Ova prezentacija diskutuje o nizu tehnika obfuskacije, isključivo u Java kodu, koje je Android botnet koristio da sakrije svoje ponašanje.
{{#include ../../banners/hacktricks-training.md}}