diff --git a/src/mobile-pentesting/android-app-pentesting/android-applications-basics.md b/src/mobile-pentesting/android-app-pentesting/android-applications-basics.md
index 30eebde6a..723aada14 100644
--- a/src/mobile-pentesting/android-app-pentesting/android-applications-basics.md
+++ b/src/mobile-pentesting/android-app-pentesting/android-applications-basics.md
@@ -9,18 +9,18 @@
- **OS**, koji drži instalirane aplikacije izolovane jedna od druge.
- **sama aplikacija**, koja omogućava programerima da **izlože određene funkcionalnosti** i konfigurišu mogućnosti aplikacije.
-### UID Razdvajanje
+### Razdvajanje UID
-**Svakoj aplikaciji se dodeljuje specifični User ID**. Ovo se dešava tokom instalacije aplikacije tako da **aplikacija može da komunicira samo sa datotekama koje pripadaju njenom User ID-u ili deljenim** datotekama. Stoga, samo sama aplikacija, određeni delovi OS-a i root korisnik mogu pristupiti podacima aplikacije.
+**Svakoj aplikaciji se dodeljuje specifični ID korisnika**. Ovo se dešava tokom instalacije aplikacije tako da **aplikacija može da komunicira samo sa datotekama koje pripadaju njenom ID-u korisnika ili deljenim** datotekama. Stoga, samo sama aplikacija, određene komponente OS-a i root korisnik mogu pristupiti podacima aplikacije.
-### UID Deljenje
+### Deljenje UID
**Dve aplikacije mogu biti konfigurisane da koriste isti UID**. Ovo može biti korisno za deljenje informacija, ali ako je jedna od njih kompromitovana, podaci obe aplikacije će biti kompromitovani. Zato se ovo ponašanje **ne preporučuje**.\
-**Da bi delile isti UID, aplikacije moraju definisati istu `android:sharedUserId` vrednost u svojim manifestima.**
+**Da bi delile isti UID, aplikacije moraju definisati istu vrednost `android:sharedUserId` u svojim manifestima.**
-### Sandbox
+### Sandboxing
-**Android Application Sandbox** omogućava da se **svaka aplikacija** pokreće kao **poseban proces pod posebnim korisničkim ID-om**. Svaki proces ima svoju virtuelnu mašinu, tako da se kod aplikacije izvršava u izolaciji od drugih aplikacija.\
+**Android aplikacioni sandbox** omogućava da se **svaka aplikacija** pokreće kao **poseban proces pod posebnim ID-om korisnika**. Svaki proces ima svoju virtuelnu mašinu, tako da se kod aplikacije izvršava u izolaciji od drugih aplikacija.\
Od Android 5.0(L) **SELinux** se primenjuje. U suštini, SELinux je odbio sve interakcije procesa i zatim stvorio politike da **dozvoli samo očekivane interakcije između njih**.
### Dozvole
@@ -33,11 +33,11 @@ Element dozvole ima tri atributa:
- **ime** dozvole
- **permission-group** atribut, koji omogućava grupisanje povezanih dozvola.
-- **protection-level** koji označava kako se dozvole dodeljuju. Postoje četiri vrste:
+- **protection-level** koji označava kako se dozvole dodeljuju. Postoje četiri tipa:
- **Normal**: Koristi se kada nema **poznatih pretnji** za aplikaciju. Korisnik **nije obavezan da je odobri**.
-- **Dangerous**: Ukazuje da dozvola dodeljuje traženoj aplikaciji neki **povišeni pristup**. **Korisnici se traže da ih odobre**.
-- **Signature**: Samo **aplikacije potpisane istim sertifikatom kao onaj** koji izlaže komponentu mogu dobiti dozvolu. Ovo je najjači tip zaštite.
-- **SignatureOrSystem**: Samo **aplikacije potpisane istim sertifikatom kao onaj** koji izlaže komponentu ili **aplikacije koje rade sa pristupom na sistemskom nivou** mogu dobiti dozvole.
+- **Dangerous**: Ukazuje da dozvola dodeljuje tražećoj aplikaciji neku **povišenu pristupnost**. **Korisnici se traže da ih odobre**.
+- **Signature**: Samo **aplikacije potpisane istim sertifikatom kao onaj** koji izvozi komponentu mogu dobiti dozvolu. Ovo je najjači tip zaštite.
+- **SignatureOrSystem**: Samo **aplikacije potpisane istim sertifikatom kao onaj** koji izvozi komponentu ili **aplikacije koje rade sa pristupom na sistemskom nivou** mogu dobiti dozvole.
## Preinstalirane Aplikacije
@@ -50,7 +50,7 @@ Ove aplikacije se obično nalaze u **`/system/app`** ili **`/system/priv-app`**
## Rootovanje
Da biste dobili root pristup na fizičkom android uređaju, obično morate **iskoristiti** 1 ili 2 **ranjivosti** koje su obično **specifične** za **uređaj** i **verziju**.\
-Kada eksploatacija uspe, obično se Linux `su` binarni fajl kopira na lokaciju koja je navedena u korisničkoj PATH env varijabli kao što je `/system/xbin`.
+Kada je eksploatacija uspela, obično se Linux `su` binarni fajl kopira na lokaciju koja je navedena u korisničkoj PATH env varijabli kao što je `/system/xbin`.
Kada je su binarni fajl konfiguran, koristi se druga Android aplikacija za interakciju sa `su` binarnim fajlom i **obrađivanje zahteva za root pristup** kao što su **Superuser** i **SuperSU** (dostupni u Google Play prodavnici).
@@ -66,11 +66,11 @@ Napomena da **nije uvek potrebno rootovati uređaj** da bi se instalirao prilago
### Implikaacije
-Kada je uređaj rootovan, svaka aplikacija može zatražiti pristup kao root. Ako zlonamerna aplikacija dobije taj pristup, moći će da pristupi gotovo svemu i moći će da ošteti telefon.
+Kada je uređaj rootovan, svaka aplikacija može zatražiti pristup kao root. Ako zlonamerna aplikacija dobije taj pristup, imaće pristup gotovo svemu i moći će da ošteti telefon.
-## Osnovni principi Android Aplikacija
+## Osnovni principi Android aplikacija
-- Format Android aplikacija se naziva _APK format datoteke_. To je u suštini **ZIP datoteka** (preimenovanjem ekstenzije datoteke u .zip, sadržaj se može ekstrahovati i pregledati).
+- Format Android aplikacija se naziva _APK format datoteke_. U suštini, to je **ZIP datoteka** (preimenovanjem ekstenzije datoteke u .zip, sadržaj se može izdvojiti i pregledati).
- Sadržaj APK-a (nije iscrpan)
- **AndroidManifest.xml**
- resources.arsc/strings.xml
@@ -81,21 +81,21 @@ Kada je uređaj rootovan, svaka aplikacija može zatražiti pristup kao root. Ak
- **classes.dex**
- Sadrži Dalvik bajtkod, koji predstavlja kompajlirani Java (ili Kotlin) kod koji aplikacija izvršava po defaultu.
- lib/
-- Sadrži native biblioteke, razdvojene po CPU arhitekturi u poddirektorijumima.
+- Sadrži nativne biblioteke, razdvojene po CPU arhitekturi u poddirektorijumima.
- `armeabi`: kod za ARM procesore
- `armeabi-v7a`: kod za ARMv7 i više procesore
- `x86`: kod za X86 procesore
- `mips`: kod samo za MIPS procesore
- assets/
-- Čuva razne datoteke potrebne aplikaciji, potencijalno uključujući dodatne native biblioteke ili DEX datoteke, ponekad korišćene od strane autora malvera za prikrivanje dodatnog koda.
+- Čuva razne datoteke potrebne aplikaciji, potencijalno uključujući dodatne nativne biblioteke ili DEX datoteke, ponekad korišćene od strane autora malvera za prikrivanje dodatnog koda.
- res/
- Sadrži resurse koji nisu kompajlirani u resources.arsc.
### **Dalvik & Smali**
-U Android razvoju, **Java ili Kotlin** se koriste za kreiranje aplikacija. Umesto korišćenja JVM-a kao u desktop aplikacijama, Android kompajlira ovaj kod u **Dalvik Executable (DEX) bajtkod**. Ranije je Dalvik virtuelna mašina obrađivala ovaj bajtkod, ali sada, Android Runtime (ART) preuzima u novijim verzijama Android-a.
+U Android razvoju, **Java ili Kotlin** se koriste za kreiranje aplikacija. Umesto korišćenja JVM-a kao u desktop aplikacijama, Android kompajlira ovaj kod u **Dalvik izvršne (DEX) bajtkod**. Ranije je Dalvik virtuelna mašina obrađivala ovaj bajtkod, ali sada, Android Runtime (ART) preuzima u novijim verzijama Android-a.
-Za obrnuto inženjerstvo, **Smali** postaje ključan. To je ljudski čitljiva verzija DEX bajtkoda, koja deluje kao asemberski jezik prevodeći izvorni kod u bajtkod instrukcije. Smali i baksmali se odnose na alate za asembler i disassembler u ovom kontekstu.
+Za obrnuto inženjerstvo, **Smali** postaje ključan. To je ljudski čitljiva verzija DEX bajtkoda, koja deluje kao asemblažni jezik prevodeći izvorni kod u instrukcije bajtkoda. Smali i baksmali se odnose na alate za asemblažu i disasembliranje u ovom kontekstu.
## Intenti
@@ -114,11 +114,11 @@ Ako su ranjivi, **Intenti se mogu koristiti za izvođenje raznih napada**.
### Intent-Filter
-**Intent Filteri** definišu **kako aktivnost, usluga ili Broadcast Receiver mogu interagovati sa različitim tipovima Intenta**. U suštini, oni opisuju mogućnosti ovih komponenti, kao što su koje akcije mogu izvršiti ili koje vrste emitovanja mogu obraditi. Primarno mesto za deklarisanje ovih filtera je unutar **AndroidManifest.xml datoteke**, iako je za Broadcast Receivere kodiranje takođe opcija.
+**Intent Filteri** definišu **kako aktivnost, usluga ili Broadcast Receiver mogu interagovati sa različitim tipovima Intent-a**. U suštini, oni opisuju mogućnosti ovih komponenti, kao što su koje akcije mogu izvršiti ili koje vrste emitovanja mogu obraditi. Primarno mesto za deklarisanje ovih filtera je unutar **AndroidManifest.xml datoteke**, iako je kodiranje za Broadcast Receivere takođe opcija.
Intent Filteri se sastoje od kategorija, akcija i filtera podataka, sa mogućnošću uključivanja dodatnih metapodataka. Ova postavka omogućava komponentama da obrađuju specifične Intente koji se poklapaju sa deklarisanim kriterijumima.
-Kritičan aspekt Android komponenti (aktivnosti/usluge/content provideri/broadcast receiveri) je njihova vidljivost ili **javnost**. Komponenta se smatra javnom i može interagovati sa drugim aplikacijama ako je **`exported`** sa vrednošću **`true`** ili ako je Intent Filter deklarisan za nju u manifestu. Međutim, postoji način za programere da eksplicitno zadrže ove komponente privatnim, osiguravajući da ne interaguju sa drugim aplikacijama nenamerno. Ovo se postiže postavljanjem **`exported`** atributa na **`false`** u njihovim manifest definicijama.
+Kritičan aspekt Android komponenti (aktivnosti/usluge/provideri sadržaja/broadcast receiveri) je njihova vidljivost ili **javnost**. Komponenta se smatra javnom i može interagovati sa drugim aplikacijama ako je **`exported`** sa vrednošću **`true`** ili ako je za nju deklarisan Intent Filter u manifestu. Međutim, postoji način za programere da eksplicitno zadrže ove komponente privatnim, osiguravajući da ne interaguju sa drugim aplikacijama nenamerno. Ovo se postiže postavljanjem **`exported`** atributa na **`false`** u njihovim manifest definicijama.
Pored toga, programeri imaju opciju da dodatno osiguraju pristup ovim komponentama zahtevajući specifične dozvole. **`permission`** atribut može biti postavljen da osigura da samo aplikacije sa dodeljenom dozvolom mogu pristupiti komponenti, dodajući dodatni sloj sigurnosti i kontrole nad tim ko može da interaguje sa njom.
```java
@@ -134,7 +134,7 @@ Intent email = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:"));
```
**Akcija** prethodno deklarisanog namera je **ACTION_SEND** i **Ekstra** je mailto **Uri** (Ekstra je dodatna informacija koju namera očekuje).
-Ova namera treba da bude deklarisana unutar manifest-a kao u sledećem primeru:
+Ova namera treba da bude deklarisana unutar manifesta kao u sledećem primeru:
```xml
@@ -145,7 +145,7 @@ Ova namera treba da bude deklarisana unutar manifest-a kao u sledećem primeru:
```
An intent-filter treba da odgovara **akciji**, **podacima** i **kategoriji** da bi primio poruku.
-Proces "rezolucije intencija" određuje koja aplikacija treba da primi svaku poruku. Ovaj proces uzima u obzir **atribut prioriteta**, koji može biti postavljen u **deklaraciji intent-filter-a**, i **ona sa višim prioritetom će biti odabrana**. Ovaj prioritet može biti postavljen između -1000 i 1000, a aplikacije mogu koristiti `SYSTEM_HIGH_PRIORITY` vrednost. Ako dođe do **konflikta**, pojavljuje se "chooser" prozor kako bi **korisnik mogao da odluči**.
+Proces "rezolucije intencija" određuje koja aplikacija treba da primi svaku poruku. Ovaj proces uzima u obzir **atribut prioriteta**, koji može biti postavljen u **deklaraciji intent-filter-a**, i **onaj sa višim prioritetom će biti izabran**. Ovaj prioritet može biti postavljen između -1000 i 1000, a aplikacije mogu koristiti `SYSTEM_HIGH_PRIORITY` vrednost. Ako dođe do **konflikta**, pojavljuje se "chooser" prozor kako bi **korisnik mogao da odluči**.
### Eksplicitne Intencije
@@ -161,30 +161,30 @@ context.startService(intent);
```
### Pending Intents
-Oni omogućavaju drugim aplikacijama da **preuzmu akcije u ime vaše aplikacije**, koristeći identitet i dozvole vaše aplikacije. Prilikom konstruisanja Pending Intent-a, treba **navesti intent i akciju koja se izvršava**. Ako **deklarisani intent nije Eksplicitan** (ne navodi koji intent može da ga pozove), **maliciozna aplikacija bi mogla da izvrši deklarisanu akciju** u ime žrtvinske aplikacije. Štaviše, **ako akcija nije navedena**, maliciozna aplikacija će moći da izvrši **bilo koju akciju u ime žrtve**.
+Oni omogućavaju drugim aplikacijama da **preduzimaju akcije u ime vaše aplikacije**, koristeći identitet i dozvole vaše aplikacije. Prilikom konstruisanja Pending Intent-a, **treba da se specificira intent i akcija koja će se izvršiti**. Ako **deklarisani intent nije eksplicitan** (ne navodi koji intent može da ga pozove), **maliciozna aplikacija bi mogla da izvrši deklarisanu akciju** u ime žrtvovane aplikacije. Štaviše, **ako akcija nije specificirana**, maliciozna aplikacija će moći da izvrši **bilo koju akciju u ime žrtve**.
### Broadcast Intents
-Za razliku od prethodnih intent-a, koji se primaju samo od jedne aplikacije, broadcast intent-i **mogu biti primljeni od više aplikacija**. Međutim, od API verzije 14, **moguće je odrediti aplikaciju koja treba da primi** poruku koristeći Intent.setPackage.
+Za razliku od prethodnih intent-a, koji se primaju samo od jedne aplikacije, broadcast intent-i **mogu biti primljeni od više aplikacija**. Međutim, od API verzije 14, **moguće je specificirati aplikaciju koja treba da primi** poruku koristeći Intent.setPackage.
-Alternativno, takođe je moguće **navesti dozvolu prilikom slanja broadcast-a**. Aplikacija primaoc će morati da ima tu dozvolu.
+Alternativno, takođe je moguće **specificirati dozvolu prilikom slanja broadcast-a**. Aplikacija primaoc će morati da ima tu dozvolu.
-Postoje **dva tipa** Broadcast-a: **Normalni** (asinkroni) i **Poručeni** (sinhroni). **Redosled** se zasniva na **konfigurisanoj prioritetu unutar elementa primaoca**. **Svaka aplikacija može obraditi, preneti ili odbaciti Broadcast.**
+Postoje **dva tipa** Broadcast-a: **Normalni** (asinkroni) i **Ordered** (sinhroni). **Redosled** se zasniva na **konfigurisanoj prioritetu unutar elementa primaoca**. **Svaka aplikacija može obraditi, preneti ili odbaciti Broadcast.**
-Moguće je **poslati** **broadcast** koristeći funkciju `sendBroadcast(intent, receiverPermission)` iz klase `Context`.\
+Moguće je **poslati** **broadcast** koristeći funkciju `sendBroadcast(intent, receiverPermission)` iz `Context` klase.\
Takođe možete koristiti funkciju **`sendBroadcast`** iz **`LocalBroadCastManager`** koja osigurava da **poruka nikada ne napusti aplikaciju**. Koristeći ovo, nećete ni morati da izvozite komponentu primaoca.
### Sticky Broadcasts
Ova vrsta Broadcast-a **može se pristupiti dugo nakon što su poslati**.\
-Oni su obeleženi kao zastareli u API nivou 21 i preporučuje se da **ih ne koristite**.\
+Oni su deprecated u API nivou 21 i preporučuje se da **ih ne koristite**.\
**Oni omogućavaju bilo kojoj aplikaciji da prisluškuje podatke, ali i da ih modifikuje.**
Ako pronađete funkcije koje sadrže reč "sticky" kao što su **`sendStickyBroadcast`** ili **`sendStickyBroadcastAsUser`**, **proverite uticaj i pokušajte da ih uklonite**.
## Deep links / URL schemes
-U Android aplikacijama, **deep links** se koriste za pokretanje akcije (Intent) direktno putem URL-a. To se postiže deklarisanjem specifičnog **URL shema** unutar aktivnosti. Kada Android uređaj pokuša da **pristupi URL-u sa ovom shemom**, određena aktivnost unutar aplikacije se pokreće.
+U Android aplikacijama, **deep links** se koriste za pokretanje akcije (Intent) direktno putem URL-a. To se postiže deklarisanjem specifičnog **URL shema** unutar aktivnosti. Kada Android uređaj pokuša da **pristupi URL-u sa ovom shemom**, specificirana aktivnost unutar aplikacije se pokreće.
Shema mora biti deklarisana u **`AndroidManifest.xml`** datoteci:
```xml
@@ -198,7 +198,7 @@ Shema mora biti deklarisana u **`AndroidManifest.xml`** datoteci:
[...]
```
-Šema iz prethodnog primera je `examplescheme://` (napomena takođe **`kategorija BROWSABLE`**)
+Šema iz prethodnog primera je `examplescheme://` (napomena takođe **`category BROWSABLE`**)
Zatim, u polju podataka, možete navesti **host** i **path**:
```xml
@@ -225,7 +225,7 @@ Saznajte kako da [pozovete deep linkove bez korišćenja HTML stranica](#exploit
- **Messenger**: Kao povezani servis, Messenger olakšava IPC sa fokusom na obradu podataka putem metode `onBind`. Bitno je pažljivo pregledati ovu metodu zbog bilo kakvog nesigurnog rukovanja podacima ili izvršavanja osetljivih funkcija.
-- **Binder**: Iako je direktna upotreba klase Binder manje uobičajena zbog AIDL-ove apstrakcije, korisno je razumeti da Binder deluje kao drajver na nivou kernela koji olakšava prenos podataka između memorijskih prostora različitih procesa. Za dalju pomoć, resurs je dostupan na [https://www.youtube.com/watch?v=O-UHvFjxwZ8](https://www.youtube.com/watch?v=O-UHvFjxwZ8).
+- **Binder**: Iako je direktna upotreba klase Binder manje uobičajena zbog apstrakcije AIDL-a, korisno je razumeti da Binder deluje kao drajver na nivou jezgra koji olakšava prenos podataka između memorijskih prostora različitih procesa. Za dalju pomoć, resurs je dostupan na [https://www.youtube.com/watch?v=O-UHvFjxwZ8](https://www.youtube.com/watch?v=O-UHvFjxwZ8).
## Komponente
@@ -235,7 +235,7 @@ Ove uključuju: **Aktivnosti, Servise, Broadcast Receivere i Provajdere.**
U Android aplikacijama, **aktivnosti** su poput ekrana, prikazujući različite delove korisničkog interfejsa aplikacije. Aplikacija može imati mnogo aktivnosti, od kojih svaka predstavlja jedinstveni ekran za korisnika.
-**Aktivnost pokretača** je glavni ulaz u aplikaciju, pokreće se kada dodirnete ikonu aplikacije. Definisana je u manifest fajlu aplikacije sa specifičnim MAIN i LAUNCHER intencijama:
+**Aktivnost pokretača** je glavni ulaz u aplikaciju, pokreće se kada dodirnete ikonu aplikacije. Definisana je u manifestu aplikacije sa specifičnim MAIN i LAUNCHER namerama:
```html
@@ -244,9 +244,9 @@ U Android aplikacijama, **aktivnosti** su poput ekrana, prikazujući različite
```
-Не све апликације требају активност покретача, посебно оне без корисничког интерфејса, као што су позадинске услуге.
+Неће све апликације требати активност покретача, посебно оне без корисничког интерфејса, као што су позадинске услуге.
-Активности могу бити доступне другим апликацијама или процесима означавањем као "извозне" у манифесту. Ова подешавања омогућавају другим апликацијама да покрену ову активност:
+Активности могу бити доступне другим апликацијама или процесима означавањем као "извозне" у манифесту. Овај параметар омогућава другим апликацијама да покрену ову активност:
```markdown
```
@@ -274,19 +274,19 @@ super.onCreate();
```
### Usluge
-[Usluge](https://developer.android.com/guide/components/services) su **pozadinski operativci** sposobni za izvršavanje zadataka bez korisničkog interfejsa. Ovi zadaci mogu nastaviti da se izvršavaju čak i kada korisnici pređu na različite aplikacije, što usluge čini ključnim za **dugotrajne operacije**.
+[Usluge](https://developer.android.com/guide/components/services) su **pozadinske operacije** sposobne za izvršavanje zadataka bez korisničkog interfejsa. Ovi zadaci mogu nastaviti da se izvršavaju čak i kada korisnici pređu na različite aplikacije, što usluge čini ključnim za **dugotrajne operacije**.
Usluge su svestrane; mogu se pokrenuti na različite načine, pri čemu su **Intents** primarna metoda za njihovo pokretanje kao ulaznu tačku aplikacije. Kada se usluga pokrene koristeći metodu `startService`, njena metoda `onStart` se aktivira i nastavlja da radi dok se ne pozove metoda `stopService`. Alternativno, ako je uloga usluge zavisna od aktivne klijentske veze, koristi se metoda `bindService` za povezivanje klijenta sa uslugom, angažujući metodu `onBind` za prenos podataka.
-Zanimljiva primena usluga uključuje reprodukciju muzike u pozadini ili preuzimanje mrežnih podataka bez ometanja interakcije korisnika sa aplikacijom. Pored toga, usluge se mogu učiniti dostupnim drugim procesima na istom uređaju putem **izvoza**. Ovo nije podrazumevano ponašanje i zahteva eksplicitnu konfiguraciju u Android Manifest datoteci:
+Zanimljiva primena usluga uključuje reprodukciju muzike u pozadini ili preuzimanje mrežnih podataka bez ometanja interakcije korisnika sa aplikacijom. Štaviše, usluge se mogu učiniti dostupnim drugim procesima na istom uređaju putem **izvoza**. Ovo nije podrazumevano ponašanje i zahteva eksplicitnu konfiguraciju u Android Manifest datoteci:
```xml
```
### Broadcast Receivers
-**Broadcast receivers** deluju kao slušatelji u sistemu poruka, omogućavajući više aplikacija da reaguju na iste poruke iz sistema. Aplikacija može **registrovati prijemnik** na **dva osnovna načina**: kroz **Manifest** aplikacije ili **dinamički** unutar koda aplikacije putem **`registerReceiver`** API-ja. U Manifestu, emitovanja se filtriraju sa dozvolama, dok dinamički registrovani prijemnici takođe mogu specificirati dozvole prilikom registracije.
+**Broadcast receivers** deluju kao slušatelji u sistemu poruka, omogućavajući više aplikacija da reaguju na iste poruke iz sistema. Aplikacija može **registrovati prijemnik** na **dva osnovna načina**: kroz **Manifest** aplikacije ili **dinamički** unutar koda aplikacije putem **`registerReceiver`** API-ja. U Manifestu, emitovanja se filtriraju sa dozvolama, dok dinamički registrovani prijemnici takođe mogu odrediti dozvole prilikom registracije.
-**Intent filteri** su ključni u obe metode registracije, određujući koja emitovanja aktiviraju prijemnik. Kada se pošalje odgovarajuće emitovanje, poziva se **`onReceive`** metoda prijemnika, omogućavajući aplikaciji da reaguje u skladu sa tim, kao što je prilagođavanje ponašanja u odgovoru na upozorenje o niskoj bateriji.
+**Intent filteri** su ključni u obe metode registracije, određujući koja emitovanja aktiviraju prijemnik. Kada se pošalje odgovarajuće emitovanje, poziva se **`onReceive`** metoda prijemnika, omogućavajući aplikaciji da reaguje u skladu s tim, kao što je prilagođavanje ponašanja u odgovoru na upozorenje o niskoj bateriji.
Emitovanja mogu biti **asinkrona**, dostižući sve prijemnike bez reda, ili **sinhrona**, gde prijemnici dobijaju emitovanje na osnovu postavljenih prioriteta. Međutim, važno je napomenuti potencijalni bezbednosni rizik, jer svaka aplikacija može dati prioritet sebi da presretne emitovanje.
@@ -296,7 +296,7 @@ Da biste razumeli funkcionalnost prijemnika, potražite **`onReceive`** metodu u
**Content Providers** su ključni za **deljenje strukturiranih podataka** između aplikacija, naglašavajući važnost implementacije **dozvola** za obezbeđivanje bezbednosti podataka. Oni omogućavaju aplikacijama da pristupaju podacima iz različitih izvora, uključujući baze podataka, datotečne sisteme ili web. Specifične dozvole, kao što su **`readPermission`** i **`writePermission`**, su ključne za kontrolu pristupa. Pored toga, privremeni pristup može biti odobren putem **`grantUriPermission`** podešavanja u manifestu aplikacije, koristeći atribute kao što su `path`, `pathPrefix` i `pathPattern` za detaljnu kontrolu pristupa.
-Validacija ulaza je od suštinskog značaja za sprečavanje ranjivosti, kao što je SQL injekcija. Content Providers podržavaju osnovne operacije: `insert()`, `update()`, `delete()`, i `query()`, olakšavajući manipulaciju i deljenje podataka među aplikacijama.
+Validacija unosa je od suštinskog značaja za sprečavanje ranjivosti, kao što je SQL injekcija. Content Providers podržavaju osnovne operacije: `insert()`, `update()`, `delete()`, i `query()`, olakšavajući manipulaciju i deljenje podataka među aplikacijama.
**FileProvider**, specijalizovani Content Provider, fokusira se na sigurno deljenje datoteka. Definisan je u manifestu aplikacije sa specifičnim atributima za kontrolu pristupa folderima, označenim sa `android:exported` i `android:resource` koji upućuju na konfiguracije foldera. Preporučuje se oprez prilikom deljenja direktorijuma kako bi se izbeglo nenamerno izlaganje osetljivih podataka.
@@ -316,25 +316,25 @@ I primer specificiranja deljenih foldera u `filepaths.xml`:
```
-For further information check:
+Za dodatne informacije proverite:
- [Android Developers: Content Providers](https://developer.android.com/guide/topics/providers/content-providers)
- [Android Developers: FileProvider](https://developer.android.com/training/secure-file-sharing/setup-sharing)
## WebViews
-WebViews su kao **mini web pregledači** unutar Android aplikacija, koji povlače sadržaj ili sa interneta ili iz lokalnih datoteka. Suočen su sa sličnim rizicima kao obični pregledači, ali postoje načini da se **smanje ovi rizici** kroz specifične **postavke**.
+WebViews su kao **mini web pregledači** unutar Android aplikacija, koji preuzimaju sadržaj ili sa interneta ili iz lokalnih datoteka. Suočavaju se sa sličnim rizicima kao i obični pregledači, ali postoje načini da se **smanje ovi rizici** kroz specifične **postavke**.
-Android nudi dva glavna tipa WebView:
+Android nudi dve glavne vrste WebView:
- **WebViewClient** je odličan za osnovni HTML, ali ne podržava JavaScript alert funkciju, što utiče na to kako se XSS napadi mogu testirati.
- **WebChromeClient** deluje više kao potpuno iskustvo Chrome pregledača.
Ključna tačka je da WebView pregledači **ne dele kolačiće** sa glavnim pregledačem uređaja.
-Za učitavanje sadržaja, dostupne su metode kao što su `loadUrl`, `loadData`, i `loadDataWithBaseURL`. Ključno je osigurati da su ovi URL-ovi ili datoteke **sigurni za korišćenje**. Bezbednosne postavke mogu se upravljati putem `WebSettings` klase. Na primer, onemogućavanje JavaScripta sa `setJavaScriptEnabled(false)` može sprečiti XSS napade.
+Za učitavanje sadržaja dostupne su metode kao što su `loadUrl`, `loadData` i `loadDataWithBaseURL`. Ključno je osigurati da su ovi URL-ovi ili datoteke **sigurni za korišćenje**. Bezbednosne postavke mogu se upravljati putem `WebSettings` klase. Na primer, onemogućavanje JavaScripta sa `setJavaScriptEnabled(false)` može sprečiti XSS napade.
-JavaScript "Bridge" omogućava Java objektima da komuniciraju sa JavaScript-om, zahtevajući da metode budu označene sa `@JavascriptInterface` radi bezbednosti od Android 4.2 nadalje.
+JavaScript "Bridge" omogućava Java objektima interakciju sa JavaScript-om, zahtevajući da metode budu označene sa `@JavascriptInterface` radi bezbednosti od Android 4.2 pa nadalje.
Dozvoljavanje pristupa sadržaju (`setAllowContentAccess(true)`) omogućava WebView-ima pristup Content Providers, što može predstavljati rizik osim ako su URL-ovi sadržaja verifikovani kao sigurni.
@@ -342,19 +342,19 @@ Da biste kontrolisali pristup datotekama:
- Onemogućavanje pristupa datotekama (`setAllowFileAccess(false)`) ograničava pristup datotečnom sistemu, sa izuzecima za određene resurse, osiguravajući da se koriste samo za nesenzitivni sadržaj.
-## Other App Components and Mobile Device Management
+## Ostale komponente aplikacija i upravljanje mobilnim uređajima
-### **Digital Signing of Applications**
+### **Digitalno potpisivanje aplikacija**
- **Digitalno potpisivanje** je obavezno za Android aplikacije, osiguravajući da su **autentično napisane** pre instalacije. Ovaj proces koristi sertifikat za identifikaciju aplikacije i mora biti verifikovan od strane menadžera paketa uređaja prilikom instalacije. Aplikacije mogu biti **samo-potpisane ili sertifikovane od strane eksternog CA**, štiteći od neovlašćenog pristupa i osiguravajući da aplikacija ostane neizmenjena tokom isporuke na uređaj.
-### **App Verification for Enhanced Security**
+### **Verifikacija aplikacija za poboljšanu bezbednost**
- Počevši od **Android 4.2**, funkcija pod nazivom **Verify Apps** omogućava korisnicima da provere aplikacije na bezbednost pre instalacije. Ovaj **proces verifikacije** može upozoriti korisnike na potencijalno štetne aplikacije, ili čak sprečiti instalaciju posebno zlonamernih, poboljšavajući bezbednost korisnika.
-### **Mobile Device Management (MDM)**
+### **Upravljanje mobilnim uređajima (MDM)**
-- **MDM rešenja** pružaju **nadzor i bezbednost** za mobilne uređaje putem **Device Administration API**. Oni zahtevaju instalaciju Android aplikacije za efikasno upravljanje i obezbeđivanje mobilnih uređaja. Ključne funkcije uključuju **sprovodjenje politika lozinki**, **obavezno šifrovanje skladišta**, i **dozvoljavanje daljinskog brisanja podataka**, osiguravajući sveobuhvatan nadzor i bezbednost nad mobilnim uređajima.
+- **MDM rešenja** pružaju **nadzor i bezbednost** za mobilne uređaje putem **Device Administration API**. Oni zahtevaju instalaciju Android aplikacije za efikasno upravljanje i obezbeđivanje mobilnih uređaja. Ključne funkcije uključuju **sprovođenje politika lozinki**, **obavezno šifrovanje skladišta**, i **dozvoljavanje daljinskog brisanja podataka**, osiguravajući sveobuhvatan nadzor i bezbednost mobilnih uređaja.
```java
// Example of enforcing a password policy with MDM
DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
@@ -365,4 +365,109 @@ if (dpm.isAdminActive(adminComponent)) {
dpm.setPasswordMinimumLength(adminComponent, 8);
}
```
+## Enumerating and Exploiting AIDL / Binder Services
+
+Android *Binder* IPC izlaže mnoge **sistemske i usluge koje pruža dobavljač**. Te usluge postaju **površina za napad** kada se izvezu bez odgovarajuće provere dozvola (AIDL sloj sam ne vrši *nikakvu* kontrolu pristupa).
+
+### 1. Otkrijte aktivne usluge
+```bash
+# from an adb shell (USB or wireless)
+service list # simple one-liner
+am list services # identical output, ActivityManager wrapper
+```
+1. Razumevanje Android aplikacija
+2. Osnovne komponente Android aplikacija
+3. Razvoj Android aplikacija
+4. Sigurnosni aspekti Android aplikacija
+5. Tehnike testiranja sigurnosti Android aplikacija
+6. Alati za pentesting Android aplikacija
+7. Analiza i inženjering povratnog koda
+8. Uobičajene ranjivosti u Android aplikacijama
+9. Pristup podacima i skladištenje
+10. Mrežne komunikacije u Android aplikacijama
+```
+145 mtkconnmetrics: [com.mediatek.net.connectivity.IMtkIpConnectivityMetrics]
+146 wifi : [android.net.wifi.IWifiManager]
+```
+* **Indeks** (prva kolona) se dodeljuje u vreme izvršavanja – ***ne*** oslanjajte se na njega između ponovnih pokretanja.
+* **Binder ime** (npr. `mtkconnmetrics`) je ono što će biti prosleđeno `service call`.
+* Vrednost unutar zagrada je potpuno kvalifikovani **AIDL interfejs** iz kojeg je stub generisan.
+
+### 2. Dobijanje deskriptora interfejsa (PING)
+Svaki Binder stub automatski implementira **transakcioni kod `0x5f4e5446`** (`1598968902` decimalno, ASCII "_NTF").
+```bash
+# "ping" the service
+service call mtkconnmetrics 1 # 1 == decimal 1598968902 mod 2^32
+```
+Važeći odgovor vraća ime interfejsa kodirano kao UTF-16 string unutar `Parcel`.
+
+### 3. Pozivanje transakcije
+Sintaksa: `service call [type value ...]`
+
+Uobičajeni specifikatori argumenata:
+* `i32 ` – potpisana 32-bitna vrednost
+* `i64 ` – potpisana 64-bitna vrednost
+* `s16 ` – UTF-16 string (Android 13+ koristi `utf16`)
+
+Primer – započnite praćenje mreže sa uid **1** na MediaTek uređaju:
+```bash
+service call mtkconnmetrics 8 i32 1
+```
+### 4. Brute-forcing unknown methods
+Kada header datoteke nisu dostupne, možete **iterirati kod** dok se greška ne promeni iz:
+```
+Result: Parcel(00000000 00000000) # "Not a data message"
+```
+na normalan `Parcel` odgovor ili `SecurityException`.
+```bash
+for i in $(seq 1 50); do
+printf "[+] %2d -> " $i
+service call mtkconnmetrics $i 2>/dev/null | head -1
+done
+```
+Ako je usluga kompajlirana **sa proguard-om**, mapiranje mora biti pogodjeno – vidi sledeći korak.
+
+### 5. Mapiranje kodova ↔ metoda putem onTransact()
+Dekompajlirajte jar/odex koji implementira interfejs (za AOSP stubove proverite `/system/framework`; OEM-ovi često koriste `/system_ext` ili `/vendor`).
+Pretražite `Stub.onTransact()` – sadrži ogroman `switch(transactionCode)`:
+```java
+case TRANSACTION_updateCtaAppStatus: // 5
+data.enforceInterface(DESCRIPTOR);
+int appId = data.readInt();
+boolean ok = data.readInt() != 0;
+updateCtaAppStatus(appId, ok);
+reply.writeNoException();
+return true;
+```
+Sada su prototip i **tipovi parametara** kristalno jasni.
+
+### 6. Uočavanje nedostajućih provera dozvola
+Implementacija (često unutrašnja klasa `Impl`) je odgovorna za autorizaciju:
+```java
+private void updateCtaAppStatus(int uid, boolean status) {
+if (!isPermissionAllowed()) {
+throw new SecurityException("uid " + uid + " rejected");
+}
+/* privileged code */
+}
+```
+Odsustvo takve logike ili bele liste privilegovanih UID-ova (npr. `uid == 1000 /*system*/`) je **indikator ranjivosti**.
+
+Studija slučaja – *MediaTek* `startMonitorProcessWithUid()` (transakcija **8**) potpuno izvršava Netlink poruku **bez** ikakvih dozvola, omogućavajući neprivilegovanoj aplikaciji da komunicira sa Netfilter modulom jezgra i spamuje sistemski log.
+
+### 7. Automatizacija procene
+Alati / skripte koje ubrzavaju Binder istraživanje:
+* [binderfs](https://android.googlesource.com/platform/frameworks/native/+/master/cmds/binderfs/) – izlaže `/dev/binderfs` sa čvorovima po usluzi
+* [`binder-scanner.py`](https://github.com/adenflare/binder-scanner) – prolazi kroz binder tabelu i štampa ACL-ove
+* Frida prečica: `Java.perform(()=>console.log(android.os.ServiceManager.listServices().toArray()))`
+
+---
+
+## Reference
+
+- [Android Services 101 – Pentest Partners](https://www.pentestpartners.com/security-blog/android-services-101/)
+- [Android Developer Docs – AIDL](https://developer.android.com/guide/components/aidl)
+- [Android Developer Docs – IBinder](https://developer.android.com/reference/android/os/IBinder)
+- [Understanding Binder, Talk @ Google](https://www.youtube.com/watch?v=O-UHvFjxwZ8)
+
{{#include ../../banners/hacktricks-training.md}}