From 73b3d300dc517c7f9d954085ec4b5801929f627e Mon Sep 17 00:00:00 2001 From: Translator Date: Mon, 8 Sep 2025 01:55:00 +0000 Subject: [PATCH] Translated ['', 'src/mobile-pentesting/android-app-pentesting/avd-androi --- .../android-app-pentesting/README.md | 463 +++++++++--------- ...-instrumentation-and-ssl-pinning-bypass.md | 141 ++++-- .../avd-android-virtual-device.md | 168 ++++--- .../frida-tutorial/README.md | 111 ++++- .../install-burp-certificate.md | 70 ++- 5 files changed, 582 insertions(+), 371 deletions(-) diff --git a/src/mobile-pentesting/android-app-pentesting/README.md b/src/mobile-pentesting/android-app-pentesting/README.md index 89cf11dc5..93303c47e 100644 --- a/src/mobile-pentesting/android-app-pentesting/README.md +++ b/src/mobile-pentesting/android-app-pentesting/README.md @@ -1,10 +1,10 @@ -# Pentesting Android aplikacija +# Android aplikacije Pentesting {{#include ../../banners/hacktricks-training.md}} ## Osnove Android aplikacija -Preporučuje se da prvo pročitate ovu stranicu kako biste saznali o **najvažnijim delovima vezanim za Android bezbednost i najopasnijim komponentama u Android aplikaciji**: +Preporučuje se da počnete sa čitanjem ove stranice kako biste saznali o **najvažnijim delovima vezanim za Android bezbednost i najopasnijim komponentama u Android aplikaciji**: {{#ref}} @@ -13,15 +13,15 @@ android-applications-basics.md ## ADB (Android Debug Bridge) -Ovo je glavni alat koji vam treba da se povežete na Android uređaj (emulirani ili fizički).\ -**ADB** omogućava kontrolu uređaja preko **USB** ili **Network** sa računara. Ovaj alat omogućava **kopiranje** fajlova u oba smera, **instalaciju** i **deinstalaciju** aplikacija, **izvođenje** shell komandi, **pravljenje backup-a** podataka, **čitanje** logova, između ostalih funkcija. +Ovo je glavni alat koji vam je potreban da se povežete sa Android uređajem (emuliranim ili fizičkim).\ +**ADB** omogućava kontrolu uređaja bilo preko **USB** ili **Network** sa računara. Ovaj alat omogućava **kopiranje** fajlova u oba smera, **instalaciju** i **deinstalaciju** aplikacija, **izvršavanje** shell komandi, **pravljenje rezervnih kopija** podataka, **čitanje** logova, između ostalih funkcija. -Pogledajte sledeću listu [**ADB komande**](adb-commands.md) da naučite kako da koristite adb. +Pogledajte sledeću listu [**ADB Commands**](adb-commands.md) da naučite kako da koristite adb. ## Smali -Ponekad je zanimljivo **izmeniti kod aplikacije** da biste pristupili **skrivenim informacijama** (možda dobro obfuskovane lozinke ili flagovi). U tom slučaju može biti korisno dekompilovati APK, izmeniti kod i ponovo ga kompajlirati.\ -[**U ovom tutorijalu** možete **naučiti kako dekompilovati APK, izmeniti Smali kod i ponovo kompajlirati APK** sa novom funkcionalnošću](smali-changes.md). Ovo može biti vrlo korisno kao **alternativa za nekoliko testova tokom dinamičke analize** koja će biti predstavljena. Dakle, **uvek imajte na umu ovu mogućnost**. +Ponekad je zanimljivo da **izmenite kod aplikacije** da biste pristupili **skrivenim informacijama** (možda dobro obfuskovanim lozinkama ili flags). Zato može biti korisno decompile-ovati APK, izmeniti kod i ponovo ga recompile-ovati.\ +[**In this tutorial** you can **learn how to decompile and APK, modify Smali code and recompile the APK** with the new functionality](smali-changes.md). Ovo može biti veoma korisno kao **alternativa za nekoliko testova tokom dinamičke analize** koji će biti predstavljeni. Zato, **uvek imajte na umu ovu mogućnost**. ## Ostali zanimljivi trikovi @@ -29,8 +29,8 @@ Ponekad je zanimljivo **izmeniti kod aplikacije** da biste pristupili **skriveni - [Shizuku Privileged API (ADB-based non-root privileged access)](shizuku-privileged-api.md) - [Exploiting Insecure In-App Update Mechanisms](insecure-in-app-update-rce.md) - [Abusing Accessibility Services (Android RAT)](accessibility-services-abuse.md) -- **Preuzimanje APK-ova**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd) -- Ekstraktovanje APK-a sa uređaja: +- **Download APKs**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd) +- Izdvajanje APK-a sa uređaja: ```bash adb shell pm list packages com.android.insecurebankv2 @@ -61,39 +61,39 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed ../../linux-hardening/privilege-escalation/android-rooting-frameworks-manager-auth-bypass-syscall-hook.md {{#endref}} -## Statička analiza +## Static Analysis -Prvo, za analizu APK-a trebalo bi da **pogledate Java kod** koristeći dekompajler.\ -Molimo, [**pročitajte ovde za informacije o različitim dostupnim dekompajlerima**](apk-decompilers.md). +Pre svega, za analiziranje APK-a trebalo bi da **pogledate Java kod** koristeći dekompajler.\ +Molimo, [**pročitajte ovde da biste pronašli informacije o različitim dostupnim dekompajlerima**](apk-decompilers.md). -### Traženje zanimljivih informacija +### Potraga za zanimljivim informacijama -Samo pregledanjem **strings** iz APK-a možete tražiti **passwords**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** keys, **encryption**, **bluetooth uuids**, **tokens** i sve što je interesantno... tražite čak i code execution **backdoors** ili authentication backdoors (hardcoded admin credentials u aplikaciji). +Samo pregledom **strings** iz APK-a možete tražiti **passwords**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** keys, **encryption**, **bluetooth uuids**, **tokens** i sve što je interesantno... čak i tražiti code execution **backdoors** ili authentication backdoors (hardcoded admin credentials u aplikaciji). **Firebase** -Obratite posebnu pažnju na **firebase URLs** i proverite da li je loše konfigurisan. [More information about whats is FIrebase and how to exploit it here.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md) +Obratite posebnu pažnju na **firebase URLs** i proverite da li je loše konfigurisano. [Više informacija o tome šta je Firebase i kako ga eksploatisati ovde.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md) ### Osnovno razumevanje aplikacije - Manifest.xml, strings.xml -Ispitivanje aplikacionih _Manifest.xml_ i **_strings.xml_** fajlova može otkriti potencijalne bezbednosne ranjivosti. Ovi fajlovi se mogu pristupiti pomoću dekompajlera ili preimenovanjem APK fajla u .zip i njegovim raspakivanjem. +Pregled datoteka aplikacije _Manifest.xml_ i _strings.xml_ može otkriti potencijalne bezbednosne ranjivosti. Ove datoteke se mogu pristupiti koristeći dekompajlere ili preimenovanjem APK ekstenzije u .zip i zatim raspakivanjem. -Ranjivosti identifikovane iz **Manifest.xml** uključuju: +**Ranjivosti** identifikovane iz **Manifest.xml** uključuju: -- **Debuggable Applications**: Aplikacije označene kao debuggable (`debuggable="true"`) u _Manifest.xml_ predstavljaju rizik jer omogućavaju konekcije koje mogu dovesti do eksploatacije. Za dodatno razumevanje kako eksploatisati debuggable aplikacije, pogledajte tutorijal o pronalaženju i eksploatisanju debuggable aplikacija na uređaju. -- **Backup Settings**: Atribut `android:allowBackup="false"` treba eksplicitno podesiti za aplikacije koje rade sa osetljivim informacijama kako bi se sprečili neovlašćeni backupi podataka putem adb-a, posebno kada je USB debugging omogućen. -- **Network Security**: Custom network security konfiguracije (`android:networkSecurityConfig="@xml/network_security_config"`) u _res/xml/_ mogu specificirati detalje bezbednosti kao što su certificate pins i podešavanja za HTTP saobraćaj. Primer je dozvoljavanje HTTP saobraćaja za specifične domene. -- **Exported Activities and Services**: Identifikovanje exported activities i services u manifestu može otkriti komponente koje se mogu zloupotrebiti. Dalja analiza tokom dinamičkog testiranja može pokazati kako te komponente eksploatisati. -- **Content Providers and FileProviders**: Izloženi content providers mogu omogućiti neovlašćen pristup ili izmenu podataka. Konfiguracija FileProviders takođe zahteva detaljnu proveru. -- **Broadcast Receivers and URL Schemes**: Ove komponente se mogu iskoristiti za eksploataciju, sa posebnom pažnjom na način na koji su URL schemes upravljane zbog mogućih input ranjivosti. -- **SDK Versions**: Atributi `minSdkVersion`, `targetSDKVersion`, i `maxSdkVersion` ukazuju na podržane Android verzije, naglašavajući važnost nepodrške zastarelih, ranjivih Android verzija iz bezbednosnih razloga. +- **Debuggable Applications**: Aplikacije označene kao debuggable (`debuggable="true"`) u _Manifest.xml_ predstavljaju rizik jer omogućavaju konekcije koje mogu dovesti do eksploatacije. Za više informacija o tome kako eksploatisati debuggable aplikacije, pogledajte tutorijal o pronalaženju i eksploataciji debuggable aplikacija na uređaju. +- **Backup Settings**: Atribut `android:allowBackup="false"` treba eksplicitno biti postavljen za aplikacije koje rade sa osetljivim informacijama kako bi se sprečili neovlašćeni backup-i podataka preko adb-a, posebno kada je usb debugging omogućen. +- **Network Security**: Prilagođene konfiguracije network security (`android:networkSecurityConfig="@xml/network_security_config"`) u _res/xml/_ mogu odrediti detalje bezbednosti poput certificate pins i podešavanja HTTP saobraćaja. Primer je dozvoljavanje HTTP saobraćaja za određene domene. +- **Exported Activities and Services**: Identifikacija exported activities i services u manifestu može ukazati na komponente koje se mogu zloupotrebiti. Dalja analiza tokom dynamic testing-a može otkriti kako eksploatisati ove komponente. +- **Content Providers and FileProviders**: Izloženi content providers mogu dozvoliti neovlašćen pristup ili izmenu podataka. Konfiguracija FileProviders-a takođe treba detaljno da se pregleda. +- **Broadcast Receivers and URL Schemes**: Ove komponente se mogu iskoristiti za eksploataciju, sa posebnom pažnjom na način na koji su URL schemes upravljani u pogledu input vulnerabilities. +- **SDK Versions**: Atributi `minSdkVersion`, `targetSDKVersion` i `maxSdkVersion` ukazuju na podržane Android verzije, naglašavajući važnost nepodržavanja zastarelih, ranjivih Android verzija iz bezbednosnih razloga. -Iz **strings.xml** fajla mogu se otkriti osetljive informacije kao što su API keys, custom schemas i drugi developer notes, što ističe potrebu za pažljivim pregledom ovih resursa. +Iz datoteke **strings.xml** mogu se otkriti osetljive informacije poput API keys, custom schemas i drugih developer napomena, što naglašava potrebu za pažljivim pregledom tih resursa. ### Tapjacking -**Tapjacking** je napad gde se pokrene maliciozna aplikacija i postavi iznad ciljane aplikacije. Kada vizuelno zakloni ciljnu aplikaciju, njen korisnički interfejs je dizajniran tako da prevari korisnika da interaguje sa njim, dok se ta interakcija prosleđuje ciljnoj aplikaciji.\ -U suštini, to zaslepljuje korisnika pa ne zna da zapravo izvodi radnje u ciljnoj aplikaciji. +**Tapjacking** je napad u kome se pokrene zlonamerna aplikacija i postavi iznad ciljne aplikacije. Kada vizuelno zakloni ciljnu aplikaciju, njen korisnički interfejs je dizajniran tako da prevari korisnika da interaguje sa njim, dok se interakcija prosleđuje ciljnoj aplikaciji.\ +U suštini, to je **oslepljivanje korisnika tako da ne zna da zapravo izvršava radnje u ciljnoj aplikaciji**. Find more information in: @@ -104,7 +104,7 @@ tapjacking.md ### Task Hijacking -Aktivnost sa `launchMode` postavljenim na `singleTask` bez definisanog `taskAffinity` je ranjiva na Task Hijacking. To znači da se može instalirati aplikacija koja, ako se pokrene pre prave aplikacije, može preuzeti task prave aplikacije (tako da će korisnik interagovati sa malicioznom aplikacijom misleći da koristi pravu). +An **activity** sa **`launchMode`** postavljenim na **`singleTask` bez definisanog `taskAffinity`** je ranjiva na Task Hijacking. To znači da se može instalirati zlonamerna aplikacija koja, ako se pokrene pre prave aplikacije, može preuzeti task prave aplikacije (tako da će korisnik interagovati sa zlonamernom aplikacijom misleći da koristi pravu). More info in: @@ -113,73 +113,73 @@ More info in: android-task-hijacking.md {{#endref}} -### Nezaštićeno čuvanje podataka +### Insecure data storage -Internal Storage +**Internal Storage** -U Androidu, fajlovi koji se čuvaju u internal storage su dizajnirani da budu dostupni isključivo aplikaciji koja ih je kreirala. Ova bezbednosna mera je sprovođena od strane Android operativnog sistema i generalno je dovoljna za bezbednosne potrebe većine aplikacija. Međutim, developeri ponekad koriste režime kao što su `MODE_WORLD_READABLE` i `MODE_WORLD_WRITABLE` da bi omogućili deljenje fajlova između različitih aplikacija. Ipak, ovi režimi ne ograničavaju pristup tim fajlovima drugim aplikacijama, uključujući potencijalno maliciozne. +U Androidu, fajlovi smešteni u internal storage su dizajnirani da budu dostupni isključivo aplikaciji koja ih je kreirala. Ova mera bezbednosti se sprovodi od strane Android operativnog sistema i generalno je dovoljna za bezbednosne potrebe većine aplikacija. Međutim, programeri ponekad koriste režime kao što su `MODE_WORLD_READABLE` i `MODE_WORLD_WRITABLE` da bi dozvolili deljenje fajlova među različitim aplikacijama. Ipak, ovi režimi ne ograničavaju pristup tim fajlovima drugim aplikacijama, uključujući potencijalno zlonamerne. 1. **Static Analysis:** -- **Ensure** da se upotreba `MODE_WORLD_READABLE` i `MODE_WORLD_WRITABLE` pažljivo proveri. Ovi režimi **mogu potencijalno izložiti** fajlove neželjenom ili neautorizovanom pristupu. +- **Proverite** da li se upotreba `MODE_WORLD_READABLE` i `MODE_WORLD_WRITABLE` pažljivo analizira. Ovi režimi **mogu potencijalno izložiti** fajlove neželjenom ili neovlašćenom pristupu. 2. **Dynamic Analysis:** -- **Verify** permisije postavljene na fajlovima koje aplikacija kreira. Konkretno, **proverite** da li su neki fajlovi **postavljeni kao readable ili writable worldwide**. Ovo može predstavljati značajan bezbednosni rizik, jer bi omogućilo **bilo kojoj aplikaciji** instaliranoj na uređaju, bez obzira na poreklo ili nameru, da **čita ili menja** te fajlove. +- **Proverite** permisije dodeljene fajlovima koje aplikacija kreira. Konkretno, **proverite** da li su neki fajlovi **postavljeni da budu readable ili writable worldwide**. To može predstavljati značajan bezbednosni rizik, jer bi omogućilo **svakoj aplikaciji** instaliranoj na uređaju, bez obzira na poreklo ili nameru, da **čitа ili menja** te fajlove. -External Storage +**External Storage** -Kada se radi sa fajlovima na external storage, kao što su SD kartice, treba preduzeti određene mere opreza: +Kada je reč o fajlovima na external storage, kao što su SD kartice, treba preduzeti određene mere opreza: 1. **Accessibility**: -- Fajlovi na external storage su **globalno readable i writable**. To znači da bilo koja aplikacija ili korisnik može pristupiti tim fajlovima. +- Fajlovi na external storage su globalno readable i writable. To znači da svaka aplikacija ili korisnik može pristupiti tim fajlovima. 2. **Security Concerns**: -- S obzirom na laku dostupnost, savetuje se **ne čuvati osetljive informacije** na external storage. -- External storage može biti uklonjen ili pristupljen od strane bilo koje aplikacije, što ga čini manje sigurnim. +- S obzirom na jednostavnost pristupa, preporučuje se **ne čuvati osetljive informacije** na external storage. +- External storage može biti uklonjen ili mu može pristupiti bilo koja aplikacija, što ga čini manje bezbednim. 3. **Handling Data from External Storage**: -- Uvek **izvršite validaciju inputa** na podacima dobijenim iz external storage. Ovo je ključno jer podaci dolaze iz nepouzdanog izvora. -- Snažno se ne preporučuje čuvanje izvršnih fajlova ili class fajlova na external storage radi dinamičkog učitavanja. -- Ako aplikacija mora da učitava izvršne fajlove iz external storage, osigurajte da su ti fajlovi **potpisani i kriptografski verifikovani** pre dinamičkog učitavanja. Ovaj korak je vitalan za očuvanje bezbednosnog integriteta aplikacije. +- Uvek **izvršite validaciju unosa** podataka preuzetih sa external storage. Ovo je presudno jer podaci dolaze iz nepoverljivog izvora. +- Ne preporučuje se čuvanje izvršnih fajlova ili class fajlova na external storage za dinamičko učitavanje. +- Ako vaša aplikacija mora da preuzme izvršne fajlove sa external storage, osigurajte da su ti fajlovi **potpisani i kriptografski verifikovani** pre nego što se dinamički učitaju. Ovaj korak je ključan za održavanje bezbednosnog integriteta vaše aplikacije. -External storage može se pristupiti u /storage/emulated/0 , /sdcard , /mnt/sdcard +External storage može biti accessed u `/storage/emulated/0` , `/sdcard` , `/mnt/sdcard` > [!TIP] -> Počevši od Android 4.4 (**API 17**), SD kartica ima strukturu direktorijuma koja **ograničava pristup aplikacije na direktorijum koji je specifičan za tu aplikaciju**. Ovo sprečava malicioznu aplikaciju da dobije read ili write pristup fajlovima druge aplikacije. +> Počevši od Android 4.4 (**API 17**), SD kartica ima strukturu direktorijuma koja ograničava pristup aplikacije samo na direktorijum specifičan za tu aplikaciju. Ovo sprečava zlonamerne aplikacije da dobiju read ili write pristup fajlovima druge aplikacije. -**Osetljivi podaci čuvani u plain-textu** +**Sensitive data stored in clear-text** -- **Shared preferences**: Android omogućava svakoj aplikaciji da lako sačuva xml fajlove u putanji `/data/data//shared_prefs/` i ponekad je moguće naći osetljive informacije u clear-textu u tom folderu. -- **Databases**: Android omogućava svakoj aplikaciji da lako sačuva sqlite baze podataka u putanji `/data/data//databases/` i ponekad je moguće naći osetljive informacije u clear-textu u tom folderu. +- **Shared preferences**: Android omogućava svakoj aplikaciji da lako sačuva xml fajlove na putanji `/data/data//shared_prefs/` i ponekad je moguće pronaći osetljive informacije u clear-text u tom folderu. +- **Databases**: Android omogućava svakoj aplikaciji da lako sačuva sqlite databases na putanji `/data/data//databases/` i ponekad je moguće pronaći osetljive informacije u clear-text u tom folderu. ### Broken TLS **Accept All Certificates** -Iz nekog razloga, ponekad developeri prihvataju sve sertifikate čak i kada, na primer, hostname ne odgovara, sa linijama koda kao u sledećem primeru: +Iz nekog razloga ponekad developeri prihvataju sve sertifikate čak i ako, na primer, hostname ne odgovara, sa linijama koda poput sledeće: ```java SSLSocketFactory sf = new cc(trustStore); sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); ``` -A good way to test this is to try to capture the traffic using some proxy like Burp without authorising Burp CA inside the device. Also, you can generate with Burp a certificate for a different hostname and use it. +Dobar način da se ovo testira je pokušati presresti saobraćaj koristeći neki proxy poput Burp bez autorizovanja Burp CA unutar uređaja. Takođe, možete sa Burp-om generisati sertifikat za drugačiji hostname i koristiti ga. -### Neispravna kriptografija +### Pokvarena kriptografija **Loši procesi upravljanja ključevima** -Neki developeri čuvaju osetljive podatke u lokalnoj memoriji i enkriptuju ih ključem hardcodiranim/predvidivim u kodu. Ovo ne bi trebalo raditi jer bi neki reversing mogao omogućiti napadačima da izvuku poverljive informacije. +Neki developeri čuvaju osetljive podatke u lokalnoj memoriji i enkriptuju ih ključem hardcoded/predictable u kodu. To se ne bi smelo raditi, jer reversing može omogućiti napadačima da izvuku poverljive informacije. **Korišćenje nesigurnih i/ili zastarelih algoritama** -Developeri ne bi trebalo da koriste **deprecated algorithms** za izvođenje autorizacionih **checks**, za **store** ili **send** podataka. Neki od ovih algoritama su: RC4, MD4, MD5, SHA1... Ako se koriste **hashes** za čuvanje lozinki, na primer, treba koristiti **hashes brute-force resistant** sa salt-om. +Developeri ne bi trebalo da koriste **deprecated algorithms** za izvršavanje autorizacionih **checks**, za **store** ili **send** podataka. Neki od ovih algoritama su: RC4, MD4, MD5, SHA1... Ako se **hashes** koriste za čuvanje lozinki, treba koristiti hash-e otporne na brute-force i sa salt-om. ### Ostale provere -- Preporučuje se da **obfuscate the APK** kako bi se otežao reverse engineer labour napadačima. -- Ako je aplikacija osetljiva (poput bank apps), treba da izvrši svoje sopstvene provere da li je mobilni **rooted** i da postupi u skladu s tim. -- Ako je aplikacija osetljiva (poput bank apps), treba da proveri da li se koristi **emulator**. -- Ako je aplikacija osetljiva (poput bank apps), treba da **check it's own integrity before executing** kako bi proverila da li je izmenjena. +- Preporučuje se da **obfuscate the APK** kako biste otežali posao reverse engineer-a napadačima. +- Ako je aplikacija osetljiva (npr. bankarske aplikacije), treba da izvrši svoje provere da li je mobilni uređaj root-ovan i postupi u skladu s tim. +- Ako je aplikacija osetljiva (npr. bankarske aplikacije), treba da proveri da li se koristi **emulator**. +- Ako je aplikacija osetljiva (npr. bankarske aplikacije), treba da proveri sopstveni integritet pre izvršavanja kako bi utvrdila da li je bila modifikovana. - Koristite [**APKiD**](https://github.com/rednaga/APKiD) da proverite koji compiler/packer/obfuscator je korišćen za izgradnju APK-a ### React Native Application -Read the following page to learn how to easily access javascript code of React applications: +Pročitajte sledeću stranicu da biste naučili kako lako pristupiti javascript kodu React aplikacija: {{#ref}} @@ -188,7 +188,7 @@ react-native-application.md ### Xamarin Applications -Read the following page to learn how to easily access C# code of a xamarin applications: +Pročitajte sledeću stranicu da biste naučili kako lako pristupiti C# kodu Xamarin aplikacija: {{#ref}} @@ -197,17 +197,17 @@ Read the following page to learn how to easily access C# code of a xamarin appli ### Superpacked Applications -According to this [**blog post**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) superpacked is a Meta algorithm that compress the content of an application into a single file. The blog talks about the possibility of creating an app that decompress these kind of apps... and a faster way which involves to **execute the application and gather the decompressed files from the filesystem.** +Prema ovom [**blog postu**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) superpacked je Meta algoritam koji kompresuje sadržaj aplikacije u jednu datoteku. Blog govori o mogućnosti kreiranja aplikacije koja dekompresuje ove tipove aplikacija... i o bržem pristupu koji uključuje da **execute the application and gather the decompressed files from the filesystem.** -### Automated Static Code Analysis +### Automatizovana statička analiza koda -The tool [**mariana-trench**](https://github.com/facebook/mariana-trench) is capable of finding **vulnerabilities** by **scanning** the **code** of the application. This tool contains a series of **known sources** (that indicates to the tool the **places** where the **input** is **controlled by the user**), **sinks** (which indicates to the tool **dangerous** **places** where malicious user input could cause damages) and **rules**. These rules indicates the **combination** of **sources-sinks** that indicates a vulnerability. +Alat [**mariana-trench**](https://github.com/facebook/mariana-trench) je sposoban da pronađe **vulnerabilities** skeniranjem **code** aplikacije. Ovaj alat sadrži niz **known sources** (koji ukazuju na mesta gde je **input** kontrolisan od strane korisnika), **sinks** (koji ukazuju na opasna mesta gde maliciozni unos korisnika može izazvati štetu) i **rules**. Ove rules ukazuju na **kombinaciju** **sources-sinks** koja označava ranjivost. -With this knowledge, **mariana-trench will review the code and find possible vulnerabilities on it**. +Sa ovim znanjem, **mariana-trench će pregledati kod i pronaći moguće vulnerabilities u njemu**. ### Secrets leaked -An application may contain secrets (API keys, passwords, hidden urls, subdomains...) inside of it that you might be able to discover. You could us a tool such as [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks) +Aplikacija može da sadrži secrets (API keys, passwords, hidden urls, subdomains...) u sebi koje možete otkriti. Možete koristiti alat kao što je [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks) ### Bypass Biometric Authentication @@ -216,7 +216,7 @@ An application may contain secrets (API keys, passwords, hidden urls, subdomains bypass-biometric-authentication-android.md {{#endref}} -### Other interesting functions +### Ostale interesantne funkcije - **Code execution**: `Runtime.exec(), ProcessBuilder(), native code:system()` - **Send SMSs**: `sendTextMessage, sendMultipartTestMessage` @@ -234,47 +234,47 @@ content-protocol.md --- -## Dynamic Analysis +## Dinamička analiza -> Prvo, potrebno je okruženje u kojem možete instalirati aplikaciju i sva okruženja (Burp CA cert, Drozer and Frida prvenstveno). Stoga je veoma preporučljivo imati rooted device (emuliran ili ne). +> Prvo, potrebna vam je okolina u kojoj možete instalirati aplikaciju i celu okolinu (Burp CA cert, Drozer i Frida pre svega). Stoga, root-ovan uređaj (emuliran ili ne) je toplo preporučen. -### Online Dynamic analysis +### Online dinamička analiza -You can create a **free account** in: [https://appetize.io/](https://appetize.io). This platform allows you to **upload** and **execute** APKs, so it is useful to see how an apk is behaving. +Možete napraviti besplatan nalog na: [https://appetize.io/](https://appetize.io). Ova platforma omogućava da **upload** i **execute** APK-ove, pa je korisna da vidite kako se APK ponaša. -You can even **see the logs of your application** in the web and connect through **adb**. +Možete čak i **videti logove vaše aplikacije** na webu i povezati se preko **adb**. ![](<../../images/image (831).png>) -Thanks to the ADB connection you can use **Drozer** and **Frida** inside the emulators. +Zahvaljujući ADB konekciji možete koristiti **Drozer** i **Frida** unutar emulatora. -### Local Dynamic Analysis +### Lokalna dinamička analiza -#### Using an emulator +#### Korišćenje emulatora -- [**Android Studio**](https://developer.android.com/studio) (You can create **x86** and **arm** devices, and according to [**this** ](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**latest x86** versions **support ARM libraries** without needing an slow arm emulator). -- Learn to set it up in this page: +- [**Android Studio**](https://developer.android.com/studio) (Možete kreirati **x86** i **arm** uređaje, i prema [**ovome**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**najnovije x86** verzije **support ARM libraries** bez potrebe za sporim arm emulatorom). +- Naučite kako da ga podesite na ovoj strani: {{#ref}} avd-android-virtual-device.md {{#endref}} -- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Free version:** Personal Edition, you need to create an account. _It's recommend to **download** the version **WITH**_ _**VirtualBox** to avoid potential errors._) -- [**Nox**](https://es.bignox.com) (Free, but it doesn't support Frida or Drozer). +- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Besplatna verzija:** Personal Edition, potrebno je kreirati nalog. _Preporučuje se da **download** verziju **WITH**_ _**VirtualBox** da biste izbegli potencijalne greške._) +- [**Nox**](https://es.bignox.com) (Besplatan, ali ne podržava Frida ili Drozer). > [!TIP] -> When creating a new emulator on any platform remember that the bigger the screen is, the slower the emulator will run. So select small screens if possible. +> Kada kreirate novi emulator na bilo kojoj platformi imajte na umu da što je ekran veći, emulator će raditi sporije. Zato birajte male ekrane ako je moguće. -To **install google services** (like AppStore) in Genymotion you need to click on the red marked button of the following image: +Da biste **install google services** (kao AppStore) u Genymotion potrebno je da kliknete na crveno označeno dugme na sledećoj slici: ![](<../../images/image (277).png>) -Also, notice that in the **configuration of the Android VM in Genymotion** you can select **Bridge Network mode** (this will be useful if you will be connecting to the Android VM from a different VM with the tools). +Takođe, obratite pažnju da u **konfiguraciji Android VM-a u Genymotion-u** možete izabrati **Bridge Network mode** (ovo će biti korisno ako ćete se povezivati na Android VM iz druge VM sa alatima). -#### Use a physical device +#### Korišćenje fizičkog uređaja -You need to activate the **debugging** options and it will be cool if you can **root** it: +Treba da aktivirate **debugging** opcije i bilo bi dobro da možete da ga **root**-ujete: 1. **Settings**. 2. (FromAndroid 8.0) Select **System**. @@ -282,59 +282,67 @@ You need to activate the **debugging** options and it will be cool if you can ** 4. Press **Build number** 7 times. 5. Go back and you will find the **Developer options**. -> Once you have installed the application, the first thing you should do is to try it and investigate what does it do, how does it work and get comfortable with it.\ -> I will suggest to **perform this initial dynamic analysis using MobSF dynamic analysis + pidcat**, so we will be able to **learn how the application works** while MobSF **captures** a lot of **interesting** **data** you can review later on. +> Kada instalirate aplikaciju, prvo što treba da uradite je da je probate i istražite šta radi, kako funkcioniše i da se upoznate sa njom.\ +> Predlažem da **perform this initial dynamic analysis using MobSF dynamic analysis + pidcat**, tako da ćemo moći da **learn how the application works** dok MobSF **captures** puno **interesting** **data** koje možete kasnije pregledati. -### Unintended Data Leakage +Magisk/Zygisk kratke napomene (preporučeno na Pixel uređajima) +- Patch-ujte boot.img uz pomoć Magisk aplikacije i flash-ujte preko fastboot-a da biste dobili systemless root +- Omogućite Zygisk + DenyList za skrivanje root-a; razmotrite LSPosed/Shamiko kada je potrebno jače skrivanje +- Sačuvajte originalni boot.img da biste se oporavili posle OTA nadogradnji; ponovo patch-ujte posle svake OTA +- Za deljenje ekrana, koristite scrcpy na hostu -**Logging** -Developers should be cautious of exposing **debugging information** publicly, as it can lead to sensitive data leaks. The tools [**pidcat**](https://github.com/JakeWharton/pidcat) and `adb logcat` are recommended for monitoring application logs to identify and protect sensitive information. **Pidcat** is favored for its ease of use and readability. + +### Nenamerna curenja podataka + +**Logovanje** + +Developeri treba da budu oprezni da ne izlažu **debugging information** javno, jer to može dovesti do curenja osetljivih podataka. Alati [**pidcat**](https://github.com/JakeWharton/pidcat) i `adb logcat` se preporučuju za praćenje logova aplikacije kako biste identifikovali i zaštitili osetljive informacije. **Pidcat** je omiljen zbog jednostavnosti korišćenja i čitljivosti. > [!WARNING] -> Note that from **later newer than Android 4.0**, **applications are only able to access their own logs**. So applications cannot access other apps logs.\ -> Anyway, it's still recommended to **not log sensitive information**. +> Imajte na umu da od **novijih verzija nakon Android 4.0**, **aplikacije mogu pristupiti samo svojim sopstvenim logovima**. Dakle, aplikacije ne mogu pristupiti logovima drugih aplikacija.\ +> U svakom slučaju, još uvek je preporučljivo **ne logovati osetljive informacije**. -**Copy/Paste Buffer Caching** +**Keširanje copy/paste buffera** -Android's **clipboard-based** framework enables copy-paste functionality in apps, yet poses a risk as **other applications** can **access** the clipboard, potentially exposing sensitive data. It's crucial to **disable copy/paste** functions for sensitive sections of an application, like credit card details, to prevent data leaks. +Android-ov **clipboard-based** okvir omogućava copy-paste funkcionalnost u aplikacijama, ali predstavlja rizik jer **druge aplikacije** mogu **access** clipboard, potencijalno izlažući osetljive podatke. Važno je **disable** copy/paste funkcije za osetljive delove aplikacije, kao što su podaci o kreditnim karticama, kako bi se sprečilo leak podataka. **Crash Logs** -If an application **crashes** and **saves logs**, these logs can assist attackers, particularly when the application cannot be reverse-engineered. To mitigate this risk, avoid logging on crashes, and if logs must be transmitted over the network, ensure they are sent via an SSL channel for security. +Ako aplikacija **crashes** i **saves logs**, ti logovi mogu pomoći napadačima, posebno kada aplikacija ne može biti reverse-engineer-ovana. Da biste umanjili ovaj rizik, izbegavajte logovanje pri padovima, a ako logovi moraju biti poslati preko mreže, osigurajte da se šalju putem SSL kanala. -As pentester, **try to take a look to these logs**. +Kao pentester, pokušajte da pogledate ove logove. **Analytics Data Sent To 3rd Parties** -Applications often integrate services like Google Adsense, which can inadvertently **leak sensitive data** due to improper implementation by developers. To identify potential data leaks, it's advisable to **intercept the application's traffic** and check for any sensitive information being sent to third-party services. +Aplikacije često integrišu servise poput Google Adsense, koji mogu nenamerno leak sensitive data zbog pogrešne implementacije developera. Da biste identifikovali potencijalno curenje podataka, preporučljivo je da **intercept** saobraćaj aplikacije i proverite da li se bilo kakve osetljive informacije šalju ka third-party servisima. ### SQLite DBs -Most of the applications will use **internal SQLite databases** to save information. During the pentest take a **look** to the **databases** created, the names of **tables** and **columns** and all the **data** saved because you could find **sensitive information** (which would be a vulnerability).\ -Databases should be located in `/data/data/the.package.name/databases` like `/data/data/com.mwr.example.sieve/databases` +Većina aplikacija koristi **internal SQLite databases** za čuvanje informacija. Tokom pentest-a pregledajte **databases** koje su kreirane, nazive **tables** i **columns** i sve sačuvane **data** jer možete naći osetljive informacije (što bi predstavljalo vulnerability).\ +Baze bi trebalo da se nalaze u `/data/data/the.package.name/databases` kao na primer `/data/data/com.mwr.example.sieve/databases` -If the database is saving confidential information and is **encrypted b**ut you can **find** the **password** inside the application it's still a **vulnerability**. +Ako baza čuva poverljive informacije i **encrypted** je, ali možete **find** **password** unutar aplikacije, to je i dalje **vulnerability**. -Enumerate the tables using `.tables` and enumerate the columns of the tables doing `.schema ` +Nabrojite tabele koristeći `.tables` i nabrojite kolone tabele koristeći `.schema ` ### Drozer (Exploit Activities, Content Providers and Services) -From [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** allows you to **assume the role of an Android app** and interact with other apps. It can do **anything that an installed application can do**, such as make use of Android’s Inter-Process Communication (IPC) mechanism and interact with the underlying operating system. .\ -Drozer is s useful tool to **exploit exported activities, exported services and Content Providers** as you will learn in the following sections. +Prema [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** vam omogućava da **assume the role of an Android app** i da interagujete sa drugim aplikacijama. Može uraditi **bilo šta što instalirana aplikacija može**, kao što je korišćenje Android-ovog Inter-Process Communication (IPC) mehanizma i interakcija sa osnovnim operativnim sistemom.\ +Drozer je koristan alat za **exploit exported activities, exported services and Content Providers** kao što ćete naučiti u narednim sekcijama. ### Exploiting exported Activities [**Read this if you want to refresh what is an Android Activity.**](android-applications-basics.md#launcher-activity-and-other-activities)\ -Also remember that the code of an activity starts in the **`onCreate`** method. +Takođe zapamtite da kod aktivnosti počinje u **`onCreate`** metodi. **Authorisation bypass** -When an Activity is exported you can invoke its screen from an external app. Therefore, if an activity with **sensitive information** is **exported** you could **bypass** the **authentication** mechanisms **to access it.** +Kada je Activity exported, možete pozvati njen ekran iz eksterne aplikacije. Dakle, ako je aktivnost sa **senzitivnim informacijama** **exported**, možete **bypass** **authentication** mehanizme kako biste joj pristupili. [**Learn how to exploit exported activities with Drozer.**](drozer-tutorial/index.html#activities) -You can also start an exported activity from adb: +Takođe možete pokrenuti exported activity iz adb-a: - PackageName is com.example.demo - Exported ActivityName is com.example.test.MainActivity @@ -344,111 +352,111 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity **NOTE**: MobSF will detect as malicious the use of _**singleTask/singleInstance**_ as `android:launchMode` in an activity, but due to [this](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), apparently this is only dangerous on old versions (API versions < 21). > [!TIP] -> Imajte na umu da authorisation bypass nije uvek ranjivost — to zavisi od toga kako bypass funkcioniše i koje informacije su izložene. +> Imajte na umu da authorisation bypass nije uvek ranjivost; to zavisi od načina na koji bypass radi i koje informacije su izložene. **Sensitive information leakage** -**Activities can also return results**. Ako uspete da pronađete exported i nezaštićenu activity koja poziva metodu **`setResult`** i koja vraća osetljive informacije, postoji sensitive information leakage. +**Activities can also return results**. If you manage to find an exported and unprotected activity calling the **`setResult`** method and **returning sensitive information**, there is a sensitive information leakage. #### Tapjacking -Ako tapjacking nije sprečen, možete zloupotrebiti exported activity da naterate **korisnika da izvrši neočekivane radnje**. For more info about [**what is Tapjacking follow the link**](#tapjacking). +If Tapjacking isn't prevented, you could abuse the exported activity to make the **user perform unexpected actions**. For more info about [**what is Tapjacking follow the link**](#tapjacking). ### Exploiting Content Providers - Accessing and manipulating sensitive information [**Read this if you want to refresh what is a Content Provider.**](android-applications-basics.md#content-provider)\ -Content providers se koriste uglavnom za **deljenje podataka**. Ako aplikacija ima dostupne content providers, možda ćete moći da **izvučete osetljive** podatke iz njih. Takođe je interesantno testirati moguće **SQL injections** i **Path Traversals** jer bi mogli biti ranjivi. +Content providers are basically used to **share data**. If an app has available content providers you may be able to **extract sensitive** data from them. It also interesting to test possible **SQL injections** and **Path Traversals** as they could be vulnerable. [**Learn how to exploit Content Providers with Drozer.**](drozer-tutorial/index.html#content-providers) ### **Exploiting Services** [**Read this if you want to refresh what is a Service.**](android-applications-basics.md#services)\ -Zapamtite da se akcije Service-a pokreću u metodi `onStartCommand`. +Remember that a the actions of a Service start in the method `onStartCommand`. -Service je u suštini nešto što **može primati podatke**, **procesuirati** ih i (ili ne) **vraća** odgovor. Dakle, ako aplikacija eksportuje neke servise, trebalo bi da **proverite** kod da biste razumeli šta radi i **testirate** ga **dinamički** radi izvlačenja poverljivih informacija, zaobilaženja autentifikacionih mera... +Service je u suštini nešto što **može primati podatke**, **procesuirati** ih i **vraća** (ili ne) odgovor. Dakle, ako aplikacija izlaže neke servise trebalo bi da **proverite** **kod** da biste razumeli šta radi i **testirate** ga **dinamički** radi ekstrakcije poverljivih informacija, zaobilaženja mera autentifikacije...\ [**Learn how to exploit Services with Drozer.**](drozer-tutorial/index.html#services) ### **Exploiting Broadcast Receivers** [**Read this if you want to refresh what is a Broadcast Receiver.**](android-applications-basics.md#broadcast-receivers)\ -Zapamtite da se akcije Broadcast Receiver-a pokreću u metodi `onReceive`. +Remember that a the actions of a Broadcast Receiver start in the method `onReceive`. -Broadcast receiver će čekati određenu vrstu poruke. U zavisnosti od toga kako receiver obrađuje poruku, može biti ranjiv.\ +A broadcast receiver will be waiting for a type of message. Depending on how the receiver handles the message it could be vulnerable.\ [**Learn how to exploit Broadcast Receivers with Drozer.**](#exploiting-broadcast-receivers) ### **Exploiting Schemes / Deep links** -Možete tražiti deep links ručno, koristeći alate kao što su MobSF ili skripte kao [this one](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\ -Možete **open** deklarisani **scheme** koristeći **adb** ili **browser**: +You can look for deep links manually, using tools like MobSF or scripts like [this one](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\ +You can **open** a declared **scheme** using **adb** or a **browser**: ```bash adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name] ``` -_Imajte na umu da možete **omit the package name** i mobilni uređaj će automatski pozvati app koji treba da otvori taj link._ +_Napomena: možete **izostaviti naziv paketa**, i mobilni će automatski pozvati aplikaciju koja treba da otvori taj link._ ```html Click me with alternative ``` -**Kod koji će biti izvršen** +**Kod koji će se izvršiti** -Da biste pronašli **kod koji će biti izvršen u App**, otiđite na aktivnost koju poziva deeplink i potražite funkciju **`onNewIntent`**. +Da biste pronašli **kod koji će se izvršiti u App**, idite na aktivnost koju poziva deeplink i potražite funkciju **`onNewIntent`**. ![](<../../images/image (436) (1) (1) (1).png>) **Osetljive informacije** -Svaki put kada nađete deep link, proverite da li **ne prima osetljive podatke (poput lozinki) putem URL parametara**, jer bilo koja druga aplikacija može **lažno predstavljati deep link i ukrasti te podatke!** +Svaki put kada nađeš deep link, proveri da li **ne prima osetljive podatke (npr. lozinke) preko URL parametara**, jer bilo koja druga aplikacija može **imitiirati deep link i ukrasti te podatke!** **Parametri u putanji** -Takođe **morate proveriti da li neki deep link koristi parametar unutar putanje** URL-a kao: `https://api.example.com/v1/users/{username}`, u tom slučaju možete naterati path traversal pristupom nečemu poput: `example://app/users?username=../../unwanted-endpoint%3fparam=value`.\ -Napomena: ako pronađete odgovarajuće endpoint-e unutar aplikacije možda ćete moći da izazovete **Open Redirect** (ako je deo putanje korišćen kao domain name), **account takeover** (ako možete izmeniti podatke korisnika bez CSRF token i ranjivi endpoint je koristio odgovarajući metod) i bilo koju drugu ranjivost. Više informacija o ovome [ovde](http://dphoeniixx.com/2020/12/13-2/). +Treba da proveriš i da li neki deep link koristi parametar unutar putanje URL-a kao što je: `https://api.example.com/v1/users/{username}`, u tom slučaju možeš forsirati path traversal pristupom nečemu poput: `example://app/users?username=../../unwanted-endpoint%3fparam=value` .\ +Napomena da ako pronađeš tačne endpoint-e unutar aplikacije možeš izazvati **Open Redirect** (ako se deo putanje koristi kao domain name), **account takeover** (ako možeš izmeniti korisničke podatke bez CSRF tokena i ranjivi endpoint koristi odgovarajuću metodu) i bilo koju drugu vuln. More [info about this here](http://dphoeniixx.com/2020/12/13-2/). -**Još primera** +**More examples** -An [interesting bug bounty report](https://hackerone.com/reports/855618) about links (_/.well-known/assetlinks.json_). +Jedan [interesting bug bounty report](https://hackerone.com/reports/855618) about links (_/.well-known/assetlinks.json_). -### Inspekcija transportnog sloja i greške verifikacije +### Inspekcija transportnog sloja i propusti u verifikaciji -- **Sertifikati nisu uvek pravilno proveravani** od strane Android aplikacija. Često ove aplikacije zanemare upozorenja i prihvate samopotpisane sertifikate ili, u nekim slučajevima, pređu na HTTP konekcije. -- **Pregovori tokom SSL/TLS handshaka ponekad su slabi**, koristeći nesigurne cipher suite-ove. Ova ranjivost čini konekciju podložnom man-in-the-middle (MITM) napadima, dopuštajući napadačima da dešifruju podatke. -- **Iscurivanje privatnih informacija** je rizik kada se aplikacije autentifikuju koristeći sigurne kanale, a zatim komuniciraju preko nesigurnih kanala za druge transakcije. Ovakav pristup ne štiti osetljive podatke, poput session cookies ili podataka korisnika, od presretanja od strane zlonamernih entiteta. +- **Sertifikati nisu uvek pravilno proveravani** od strane Android aplikacija. Često ove aplikacije zanemare upozorenja i prihvate self-signed sertifikate ili, u nekim slučajevima, pređu na korišćenje HTTP konekcija. +- **Pregovori tokom SSL/TLS handshake-a ponekad su slabi**, koristeći nesigurne cipher suite-ove. Ova ranjivost čini vezu podložnom man-in-the-middle (MITM) napadima, omogućavajući napadačima da dešifruju podatke. +- **Leakage of private information** predstavlja rizik kada se aplikacije autentifikuju koristeći sigurne kanale, ali zatim komuniciraju preko nesigurnih kanala za druge transakcije. Ovakav pristup ne štiti osetljive podatke, kao što su session cookies ili podaci o korisnicima, od presretanja od strane zlonamernih entiteta. #### Verifikacija sertifikata -Fokusiraćemo se na **verifikaciju sertifikata**. Integritet serverskog sertifikata mora biti verifikovan radi povećanja bezbednosti. Ovo je ključno zato što nesigurne TLS konfiguracije i prenos osetljivih podataka preko nekriptovanih kanala mogu predstavljati značajne rizike. Za detaljne korake kako verifikovati serverske sertifikate i otkloniti ranjivosti, [**this resource**](https://manifestsecurity.com/android-application-security-part-10/) pruža obuhvatne smernice. +Usredsredićemo se na **certificate verification**. Integritet serverovog sertifikata mora biti verifikovan radi povećanja bezbednosti. Ovo je ključno jer nesigurne TLS konfiguracije i prenos osetljivih podataka preko nešifrovanih kanala mogu predstavljati značajne rizike. Za detaljne korake o verifikaciji server sertifikata i rešavanju ranjivosti, [**this resource**](https://manifestsecurity.com/android-application-security-part-10/) pruža sveobuhvatne smernice. #### SSL Pinning -SSL Pinning je bezbednosna mera gde aplikacija proverava serverski sertifikat naspram poznate kopije koje su smeštene unutar same aplikacije. Ova metoda je ključna za sprečavanje MITM napada. Preporučuje se implementacija SSL Pinning-a za aplikacije koje obrađuju osetljive informacije. +SSL Pinning je bezbednosna mera gde aplikacija proverava serverov sertifikat prema poznatoj kopiji smeštenoj unutar same aplikacije. Ova metoda je esencijalna za sprečavanje MITM napada. Implementacija SSL Pinning-a je snažno preporučena za aplikacije koje rukuju osetljivim informacijama. #### Inspekcija saobraćaja -Za inspekciju HTTP saobraćaja neophodno je **instalirati sertifikat proxy alata** (npr. Burp). Bez instaliranja ovog sertifikata, enkriptovani saobraćaj možda neće biti vidljiv kroz proxy. Za vodič o instaliranju custom CA sertifikata, [**kliknite ovde**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine). +Za inspekciju HTTP saobraćaja neophodno je **instalirati sertifikat proxy alata** (npr. Burp). Bez instalacije tog sertifikata, šifrovani saobraćaj možda neće biti vidljiv kroz proxy. Za vodič o instalaciji custom CA sertifikata, [**click here**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine). -Aplikacije koje ciljaju **API Level 24 and above** zahtevaju izmene Network Security Config da bi prihvatile proxy-jev CA sertifikat. Ovaj korak je kritičan za inspekciju enkriptovanog saobraćaja. Za instrukcije o izmeni Network Security Config, [**refer to this tutorial**](make-apk-accept-ca-certificate.md). +Aplikacije koje ciljaju **API Level 24 and above** zahtevaju modifikacije Network Security Config-a da bi prihvatile CA sertifikat proxy-ja. Ovaj korak je kritičan za inspekciju šifrovanog saobraćaja. Za uputstva o modifikaciji Network Security Config-a, [**refer to this tutorial**](make-apk-accept-ca-certificate.md). -Ako se koristi **Flutter**, potrebno je pratiti instrukcije na [**ovoj stranici**](flutter.md). To je zato što samo dodavanje sertifikata u store neće raditi jer Flutter ima sopstvenu listu validnih CA. +Ako se koristi **Flutter** treba da pratiš instrukcije na [**this page**](flutter.md). To je zato što samo dodavanje sertifikata u store neće funkcionisati, jer Flutter ima sopstvenu listu validnih CAs. -#### Statičko otkrivanje SSL/TLS pinning +#### Statička detekcija SSL/TLS pinning -Pre nego što pokušate runtime bypass-ove, brzo mapirajte gde je pinning primenjen u APK-u. Statičko otkrivanje pomaže da isplanirate hooks/patches i fokusirate se na prave kodne putanje. +Pre nego što pokušaš runtime bypass-e, brzo mapiraj gde se pinning primenjuje u APK-u. Statičko otkrivanje pomaže da isplaniraš hooks/patches i da se fokusiraš na prave code paths. Tool: SSLPinDetect -- Open-source static-analysis utility that decompiles the APK to Smali (via apktool) and scans for curated regex patterns of SSL/TLS pinning implementations. -- Reports exact file path, line number, and a code snippet for each match. -- Covers common frameworks and custom code paths: OkHttp CertificatePinner, custom javax.net.ssl.X509TrustManager.checkServerTrusted, SSLContext.init with custom TrustManagers/KeyManagers, and Network Security Config XML pins. +- Open-source statički alat za analizu koji dekompajlira APK u Smali (putem apktool) i skenira za kurirane regex obrasce implementacija SSL/TLS pinning. +- Izveštava tačnu putanju fajla, broj linije i code snippet za svaki match. +- Obuhvata common frameworks i custom code paths: OkHttp CertificatePinner, custom javax.net.ssl.X509TrustManager.checkServerTrusted, SSLContext.init with custom TrustManagers/KeyManagers, i Network Security Config XML pins. -Install -- Prereqs: Python >= 3.8, Java on PATH, apktool +Instalacija +- Zahtevi: Python >= 3.8, Java on PATH, apktool ```bash git clone https://github.com/aancw/SSLPinDetect cd SSLPinDetect pip install -r requirements.txt ``` -Upotreba +Korišćenje ```bash # Basic python sslpindetect.py -f app.apk -a apktool.jar @@ -456,8 +464,8 @@ python sslpindetect.py -f app.apk -a apktool.jar # Verbose (timings + per-match path:line + snippet) python sslpindetect.py -a apktool_2.11.0.jar -f sample/app-release.apk -v ``` -Primer pravila obrazaca (JSON) -Koristite ili proširite signatures za otkrivanje vlasničkih/prilagođenih pinning styles. Možete učitati sopstveni JSON i scan at scale. +Primer pravila obrasca (JSON) +Koristite ili proširite signatures da otkrijete proprietary/custom pinning styles. Možete učitati sopstveni JSON i scan at scale. ```json { "OkHttp Certificate Pinning": [ @@ -471,23 +479,23 @@ Koristite ili proširite signatures za otkrivanje vlasničkih/prilagođenih pinn ] } ``` -Beleške i saveti -- Brzo skeniranje velikih aplikacija pomoću višestrukih niti i memorijski mapiranog I/O; pre-kompajlirani regex smanjuje režijske troškove i lažne pozitivne rezultate. +Notes and tips +- Brzo skeniranje velikih aplikacija putem multi-threading i memory-mapped I/O; pre-compiled regex smanjuje overhead/false positives. - Kolekcija patterna: https://github.com/aancw/smali-sslpin-patterns -- Tipične mete za sledeću trijažu: -- OkHttp: korišćenje CertificatePinner, setCertificatePinner, reference paketa okhttp3/okhttp -- Prilagođeni TrustManagers: javax.net.ssl.X509TrustManager, override-ovi checkServerTrusted -- Prilagođeni SSL konteksti: SSLContext.getInstance + SSLContext.init sa prilagođenim menadžerima -- Deklarativni pins u res/xml network security config i reference u manifestu -- Koristite podudarne lokacije da planirate Frida hook-ove, statičke zakrpe ili preglede konfiguracije pre dinamičkog testiranja. +- Tipični ciljevi za dalju proveru: +- OkHttp: CertificatePinner usage, setCertificatePinner, okhttp3/okhttp package references +- Custom TrustManagers: javax.net.ssl.X509TrustManager, checkServerTrusted overrides +- Prilagođeni SSL konteksti: SSLContext.getInstance + SSLContext.init with custom managers +- Deklarativni pins u res/xml network security config i manifest references +- Iskoristite podudarne lokacije da planirate Frida hooks, statičke patches, ili pregled konfiguracije pre dinamičkog testiranja. #### Bypassing SSL Pinning -Kada je implementiran SSL Pinning, za inspekciju HTTPS saobraćaja postaje neophodno zaobići ga. Postoji više metoda za to: +Kada je SSL Pinning implementiran, potrebno ga je zaobići da biste mogli da pregledate HTTPS saobraćaj. Postoji nekoliko metoda za to: -- Automatically **modify** the **apk** to **bypass** SSLPinning with [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Najveća prednost ove opcije je da vam neće trebati root da zaobiđete SSL Pinning, ali ćete morati obrisati aplikaciju i ponovo instalirati novu, i to ne radi uvek. +- Automatically **modify** the **apk** to **bypass** SSLPinning with [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Najveća prednost ove opcije je što vam neće trebati root da zaobiđete SSL Pinning, ali moraćete da obrišete aplikaciju i ponovo instalirate novu, i ovo neće uvek raditi. - You could use **Frida** (discussed below) to bypass this protection. Ovde imate vodič za korišćenje Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/) - You can also try to **automatically bypass SSL Pinning** using [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"` - You can also try to **automatically bypass SSL Pinning** using **MobSF dynamic analysis** (explained below) @@ -495,19 +503,19 @@ Kada je implementiran SSL Pinning, za inspekciju HTTPS saobraćaja postaje neoph #### Looking for Common Web Vulnerabilities -Važno je takođe tražiti uobičajene web ranjivosti unutar aplikacije. Detaljne informacije o identifikaciji i ublažavanju ovih ranjivosti su izvan opsega ovog sažetka, ali su obimno pokrivene drugde. +Važno je takođe tražiti uobičajene web ranjivosti u okviru aplikacije. Detaljne informacije o identifikaciji i ublažavanju ovih ranjivosti prelaze okvir ovog sažetka, ali su opširno obrađene drugde. ### Frida -[Frida](https://www.frida.re) je dynamic instrumentation toolkit za developere, reverse-engineere i security istraživače.\ +[Frida](https://www.frida.re) je alatka za dinamičku instrumentaciju za developere, reverse-inženjere i istraživače bezbednosti.\ **Možete pristupiti pokrenutoj aplikaciji i hook-ovati metode u runtime-u da promenite ponašanje, promenite vrednosti, izvučete vrednosti, pokrenete drugačiji kod...**\ -Ako želite pentest Android applications morate znati kako koristiti Frida. +Ako želite da radite pentesting Android aplikacija, morate znati kako se koristi Frida. - Naučite kako koristiti Frida: [**Frida tutorial**](frida-tutorial/index.html) - Neki "GUI" za rad sa Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security) - Ojection je odličan za automatizaciju upotrebe Frida: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon) -- Možete pronaći neke Awesome Frida skripte ovde: [**https://codeshare.frida.re/**](https://codeshare.frida.re) -- Pokušajte zaobići anti-debugging / anti-frida mehanizme učitavanjem Frida kako je prikazano u [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) (alat [linjector](https://github.com/erfur/linjector-rs)) +- Možete pronaći neke odlične Frida skripte ovde: [**https://codeshare.frida.re/**](https://codeshare.frida.re) +- Pokušajte zaobići anti-debugging / anti-frida mehanizme učitavanjem Frida kao što je navedeno u [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) (alat [linjector](https://github.com/erfur/linjector-rs)) #### Anti-instrumentation & SSL pinning bypass workflow @@ -517,9 +525,9 @@ android-anti-instrumentation-and-ssl-pinning-bypass.md ### **Dump Memory - Fridump** -Proverite da li aplikacija skladišti osetljive informacije u memoriji koje ne bi trebala da čuva, kao što su lozinke ili mnemonici. +Proverite da li aplikacija čuva osetljive informacije u memoriji koje ne bi trebalo da čuva, poput lozinki ili mnemonika. -Korišćenjem [**Fridump3**](https://github.com/rootbsd/fridump3) možete izdumpovati memoriju aplikacije pomoću: +Korišćenjem [**Fridump3**](https://github.com/rootbsd/fridump3) možete dump-ovati memoriju aplikacije sa: ```bash # With PID python3 fridump3.py -u @@ -528,76 +536,76 @@ python3 fridump3.py -u frida-ps -Uai python3 fridump3.py -u "" ``` -Ovo će napraviti dump memorije u folder ./dump, i tamo možeš pokrenuti grep sa nečim poput: +Ovo će dump-ovati memoriju u ./dump folder, i tamo možete koristiti grep sa nečim poput: ```bash strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$" ``` ### **Osetljivi podaci u Keystore** -Na Androidu je Keystore najbolje mesto za čuvanje osetljivih podataka, međutim, sa dovoljno privilegija i dalje je **moguće pristupiti njemu**. Pošto aplikacije često ovde čuvaju **osetljive podatke u clear text**, pentests bi trebalo da to provere koristeći root user, jer neko sa fizičkim pristupom uređaju može da ukrade te podatke. +Na Androidu, Keystore je najbolje mesto za čuvanje osetljivih podataka, međutim, uz dovoljne privilegije i dalje je **moguće mu je pristupiti**. Pošto aplikacije obično ovde čuvaju **osetljive podatke u clear text**, pentests bi trebalo da to provere, jer root user ili neko sa fizičkim pristupom uređaju može da ukrade te podatke. -Čak i ako aplikacija skladišti podatke u Keystore, podaci bi trebalo da budu šifrovani. +Čak i ako aplikacija čuva podatke u Keystore-u, ti podaci bi trebalo da budu šifrovani. -Za pristup podacima unutar Keystore možete koristiti ovaj Frida script: [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js) +Za pristup podacima unutar Keystore-a možete koristiti ovaj Frida script: [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js) ```bash frida -U -f com.example.app -l frida-scripts/tracer-cipher.js ``` ### **Fingerprint/Biometrics Bypass** -Korišćenjem sledećeg Frida skripta moguće je **bypass fingerprint authentication** koje Android aplikacije sprovode kako bi **zaštitile određene osetljive oblasti:** +Korišćenjem sledećeg Frida skripta može biti moguće **bypass fingerprint authentication** koju Android aplikacije mogu izvoditi kako bi **zaštitile određene osetljive oblasti:** ```bash frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f ``` ### **Pozadinske slike** -Kada aplikaciju pošaljete u pozadinu, Android čuva **snimak aplikacije** tako da, kada se vrati u prvi plan, najpre učitava tu sliku pre same aplikacije pa izgleda kao da se aplikacija brže učitala. +Kada aplikaciju pošaljete u pozadinu, Android čuva **snapshot aplikacije** tako da, kada se vrati u prednji plan, počne da učitava sliku pre same aplikacije, pa izgleda kao da je aplikacija učitana brže. -Međutim, ako taj snimak sadrži **osetljive informacije**, neko ko ima pristup snimku može **ukrasti te podatke** (napomena: za pristup je potreban root). +Međutim, ako taj snapshot sadrži **osetljive informacije**, neko sa pristupom snapshotu može **ukrasti te informacije** (napomena: za pristup je potreban root). -Snimci se obično nalaze na: **`/data/system_ce/0/snapshots`** +Snapshoti se obično nalaze na: **`/data/system_ce/0/snapshots`** -Android pruža način da se **spreči snimanje ekrana postavljanjem FLAG_SECURE** layout parametra. Korišćenjem ovog flag-a, sadržaj prozora se tretira kao zaštićen, čime se sprečava njegovo pojavljivanje u screenshot-ovima ili pregledanje na nesigurnim prikazima. +Android pruža način da **sprečite snimanje ekrana postavljanjem FLAG_SECURE** layout parametra. Korišćenjem ovog flag-a, sadržaj prozora se tretira kao siguran, čime se sprečava njegovo pojavljivanje u snimcima ekrana ili prikazivanje na nesigurnim ekranima. ```bash getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE); ``` ### **Android Application Analyzer** -Ovaj alat može pomoći u upravljanju različitim alatima tokom dinamičke analize: [https://github.com/NotSoSecure/android_application_analyzer](https://github.com/NotSoSecure/android_application_analyzer) +Ovaj alat vam može pomoći u upravljanju različitim alatima tokom dinamičke analize: [https://github.com/NotSoSecure/android_application_analyzer](https://github.com/NotSoSecure/android_application_analyzer) ### Intent Injection -Developeri često kreiraju proxy komponente kao što su activities, services i broadcast receivers koje obrađuju ove Intent-e i prosleđuju ih metodama kao što su `startActivity(...)` ili `sendBroadcast(...)`, što može biti rizično. +Developeri često kreiraju proxy komponente kao što su activities, services i broadcast receivers koje obrađuju ove Intents i prosleđuju ih metodama kao što su `startActivity(...)` ili `sendBroadcast(...)`, što može biti rizično. -Opasnost je u tome što napadačima može biti omogućeno da pokrenu non-exported app components ili pristupe osetljivim content providers preusmeravanjem ovih Intent-a. Istaknut primer je `WebView` komponenta koja konvertuje URL-ove u `Intent` objekte preko `Intent.parseUri(...)` i zatim ih izvršava, što može dovesti do malicious Intent injections. +Opasnost leži u tome što napadači mogu pokrenuti non-exported app components ili pristupiti osetljivim content providers preusmeravanjem ovih Intents. Značajan primer je `WebView` komponenta koja konvertuje URL-ove u `Intent` objekte putem `Intent.parseUri(...)` i potom ih izvršava, što može dovesti do malicious Intent injections. ### Ključne napomene -- **Intent Injection** je sličan Open Redirect issue na webu. -- Exploiti uključuju prosleđivanje `Intent` objekata kao extras, koji mogu biti preusmereni da izvrše unsafe operacije. +- **Intent Injection** je sličan web Open Redirect issue. +- Eksploiti uključuju prosleđivanje `Intent` objekata kao extras, koji se mogu preusmeriti da izvrše nebezbedne operacije. - Može izložiti non-exported components i content providers napadačima. -- `WebView`-ova konverzija URL-a u `Intent` može omogućiti neželjene akcije. +- `WebView` konverzija URL-a u `Intent` može olakšati neželjene akcije. -### Android Client Side Injections and others +### Android Client Side Injections i ostalo -Verovatno već znate za ovu vrstu ranjivosti sa Weba. Posebno morate biti pažljivi sa ovim ranjivostima u Android aplikaciji: +Verovatno već znate za ovakve ranjivosti sa Weba. Morate biti posebno oprezni sa ovim ranjivostima u Android aplikaciji: -- **SQL Injection:** Kada radite sa dinamičkim upitima ili Content-Providers, osigurajte da koristite parametrizovane upite. -- **JavaScript Injection (XSS):** Proverite da li je podrška za JavaScript i Plugin onemogućena za sve WebViews (onemogućeno po defaultu). [More info here](webview-attacks.md#javascript-enabled). -- **Local File Inclusion:** WebViews bi trebalo da imaju onemogućen pristup file system-u (po defaultu omogućeno) - `(webview.getSettings().setAllowFileAccess(false);)`. [More info here](webview-attacks.md#javascript-enabled). -- **Eternal cookies**: U nekoliko slučajeva, kada android aplikacija završi sesiju, cookie nije opozvan ili čak može biti sačuvan na disku +- **SQL Injection:** Kod rada sa dinamičkim upitima ili Content-Providers, koristite parametrizovane upite. +- **JavaScript Injection (XSS):** Proverite da li je podrška za JavaScript i Plugin onemogućena za sve WebViews (disabled by default). [More info here](webview-attacks.md#javascript-enabled). +- **Local File Inclusion:** WebViews bi trebalo onemogućiti pristup fajl sistemu (enabled by default) - `(webview.getSettings().setAllowFileAccess(false);)`. [More info here](webview-attacks.md#javascript-enabled). +- **Eternal cookies**: U nekoliko slučajeva, kada Android aplikacija završi sesiju, cookie nije opozvan ili može biti sačuvan na disku - [**Secure Flag** in cookies](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags) --- -## Automatska analiza +## Automatic Analysis ### [MobSF](https://github.com/MobSF/Mobile-Security-Framework-MobSF) -**Staticka analiza** +**Static analysis** ![](<../../images/image (866).png>) -**Procena ranjivosti aplikacije** koristeći lep web-based frontend. Možete takođe izvesti dinamičku analizu (ali morate pripremiti okruženje). +**Procena ranjivosti aplikacije** korišćenjem lepog web interfejsa. Takođe možete izvršiti dinamičku analizu (ali morate pripremiti okruženje). ```bash docker pull opensecurity/mobile-security-framework-mobsf docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest @@ -652,13 +660,13 @@ receivers ``` **HTTP tools** -Kada se HTTP saobraćaj snimi, možete videti ružan prikaz uhvaćenog saobraćaja na dnu "**HTTP(S) Traffic**" dugmeta ili lepši prikaz na zelenom dugmetu "**Start HTTPTools**". Iz druge opcije možete **poslati** **uhvaćene zahteve** na **proxies** kao što su Burp ili Owasp ZAP.\ +Kada se http saobraćaj snimi možete videti ružan prikaz snimljenog saobraćaja u dnu na "**HTTP(S) Traffic**" ili lepši prikaz preko zelenog dugmeta "**Start HTTPTools**". Iz druge opcije možete **send** **captured requests** ka **proxies** kao što su Burp ili Owasp ZAP.\ Da biste to uradili, _power on Burp -->_ _turn off Intercept --> in MobSB HTTPTools select the request_ --> pritisnite "**Send to Fuzzer**" --> _select the proxy address_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)). -Kada završite dynamic analysis sa MobSF, možete pritisnuti "**Start Web API Fuzzer**" da **fuzz http requests** i tražite ranjivosti. +Kada završite dinamičku analizu sa MobSF možete pritisnuti "**Start Web API Fuzzer**" da **fuzz http requests** i tražite ranjivosti. > [!TIP] -> Nakon izvođenja dynamic analysis sa MobSF proxy podešavanja mogu biti pogrešno konfigurisana i nećete moći da ih popravite iz GUI-ja. Možete popraviti proxy podešavanja izvršavanjem: +> Nakon izvođenja dinamičke analize sa MobSF podešavanja proxy-ja mogu biti pogrešno konfigurisana i možda ih nećete moći ispraviti iz GUI-ja. Možete popraviti proxy podešavanja sledećom komandom: > > ``` > adb shell settings put global http_proxy :0 @@ -666,18 +674,18 @@ Kada završite dynamic analysis sa MobSF, možete pritisnuti "**Start Web API Fu ### Assisted Dynamic Analysis with Inspeckage -You can get the tool from [**Inspeckage**](https://github.com/ac-pm/Inspeckage).\ -Ovaj alat koristi neke **Hooks** kako bi vam pokazao **šta se dešava u aplikaciji** dok izvršavate **dynamic analysis**. +Možete preuzeti alat sa [**Inspeckage**](https://github.com/ac-pm/Inspeckage).\ +Ovaj alat koristi neke **Hooks** da bi vam pokazao **šta se dešava u aplikaciji** dok izvodite **dinamičku analizu**. ### [Yaazhini](https://www.vegabird.com/yaazhini/) -Ovo je odličan alat za izvođenje static analysis pomoću GUI-ja +Ovo je **odličan alat za izvođenje statičke analize sa GUI** ![](<../../images/image (741).png>) ### [Qark](https://github.com/linkedin/qark) -Ovaj alat je dizajniran da pronađe različite **security related Android application vulnerabilities**, bilo u **source code** ili u **packaged APKs**. Alat je takođe **capable of creating a "Proof-of-Concept" deployable APK** i **ADB commands**, za iskorišćavanje nekih od pronađenih ranjivosti (Exposed activities, intents, tapjacking...). Kao i kod Drozer, nije potrebno root-ovati test uređaj. +Ovaj alat je dizajniran da traži više **security related Android application vulnerabilities**, bilo u **source code** ili u **packaged APKs**. Alat je takođe sposoban da kreira **"Proof-of-Concept" deployable APK** i **ADB commands**, da iskoristi neke od pronađenih ranjivosti (Exposed activities, intents, tapjacking...). Kao i kod Drozer, nema potrebe za root-ovanjem test uređaja. ```bash pip3 install --user qark # --user is only needed if not using a virtualenv qark --apk path/to/my.apk @@ -686,20 +694,22 @@ qark --java path/to/specific/java/file.java ``` ### [**ReverseAPK**](https://github.com/1N3/ReverseAPK.git) -- Prikazuje sve izvađene datoteke radi lakšeg pregleda -- Automatski dekompajlira APK datoteke u Java i Smali format -- Analizira AndroidManifest.xml zbog uobičajenih ranjivosti i ponašanja -- Statička analiza izvornog koda radi uobičajenih ranjivosti i ponašanja +- Prikazuje sve izvađene fajlove radi lakšeg pregleda +- Automatski dekompajlira APK fajlove u Java i Smali format +- Analizira AndroidManifest.xml radi uobičajenih ranjivosti i ponašanja +- Statička source code analiza za uobičajene ranjivosti i ponašanja - Informacije o uređaju -- i još mnogo toga +- i još više ```bash reverse-apk relative/path/to/APP.apk ``` ### [SUPER Android Analyzer](https://github.com/SUPERAndroidAnalyzer/super) -SUPER je aplikacija komandne linije koja se može koristiti na Windows, MacOS X i Linux, i koja analizira _.apk_ fajlove u potrazi za ranjivostima. To radi dekompresovanjem APK-ova i primenom niza pravila kako bi otkrila te ranjivosti. +SUPER je aplikacija za komandnu liniju koja se može koristiti na Windows, MacOS X i Linux, i analizira _.apk_ fajlove u potrazi za ranjivostima. -Sva pravila su sadržana u fajlu `rules.json`, i svaka kompanija ili tester može kreirati sopstvena pravila za analizu onoga što im je potrebno. +To radi dekompresovanjem APKs i primenom niza pravila da bi otkrio te ranjivosti. + +Sva pravila su smeštena u fajlu `rules.json`, a svaka kompanija ili tester može kreirati sopstvena pravila da analizira ono što im je potrebno. Preuzmite najnovije binarne fajlove sa [download page](https://superanalyzer.rocks/download.html) ``` @@ -709,17 +719,17 @@ super-analyzer {apk_file} ![](<../../images/image (297).png>) -StaCoAn je **crossplatform** alat koji pomaže programerima, bugbounty hunters i ethical hackers pri izvođenju [static code analysis](https://en.wikipedia.org/wiki/Static_program_analysis) na mobilnim aplikacijama. +StaCoAn je **crossplatform** alat koji pomaže razvijačima, bugbounty hunters i ethical hackers u izvođenju [static code analysis](https://en.wikipedia.org/wiki/Static_program_analysis) na mobilnim aplikacijama. -Koncept je da prevučete i ispustite fajl vaše mobilne aplikacije (an .apk or .ipa file) na StaCoAn aplikaciju i on će za vas generisati vizuelan i prenosiv izveštaj. Možete prilagoditi podešavanja i wordlists da biste dobili prilagođeno iskustvo. +Koncept je da prevučete i otpustite fajl vaše mobilne aplikacije (.apk ili .ipa file) na StaCoAn aplikaciju i on će vam generisati vizuelni i prenosivi izveštaj. Možete promeniti podešavanja i wordlists da biste dobili prilagođeno iskustvo. -Preuzmi[ latest release](https://github.com/vincentcox/StaCoAn/releases): +Preuzmite[ latest release](https://github.com/vincentcox/StaCoAn/releases): ``` ./stacoan ``` ### [AndroBugs](https://github.com/AndroBugs/AndroBugs_Framework) -AndroBugs Framework je sistem za analizu ranjivosti za Android koji pomaže developers or hackers da pronađu potencijalne sigurnosne ranjivosti u Android aplikacijama.\ +AndroBugs Framework je sistem za analizu ranjivosti Android aplikacija koji pomaže developers or hackers da otkriju potencijalne sigurnosne propuste.\ [Windows releases](https://github.com/AndroBugs/AndroBugs_Framework/releases) ``` python androbugs.py -f [APK file] @@ -727,11 +737,11 @@ androbugs.exe -f [APK file] ``` ### [Androwarn](https://github.com/maaaaz/androwarn) -**Androwarn** je alat čija je glavna svrha da detektuje i upozori korisnika na potencijalno maliciozna ponašanja koja potiču iz Android aplikacije. +**Androwarn** je alat čiji je glavni cilj da detektuje i upozori korisnika na potencijalno zlonamerna ponašanja koju razvija Android aplikacija. -Detekcija se vrši pomoću **static analysis** Dalvik bytecode-a aplikacije, predstavljenog kao **Smali**, koristeći biblioteku [`androguard`](https://github.com/androguard/androguard). +Detekcija se vrši pomoću **statičke analize** Dalvik bytecode-a aplikacije, predstavljenog kao **Smali**, uz pomoć biblioteke [`androguard`](https://github.com/androguard/androguard). -Ovaj alat traži **uobičajena ponašanja "loših" aplikacija** kao što su: Telephony identifiers exfiltration, Audio/video flow interception, PIM data modification, Arbitrary code execution... +Ovaj alat traži **uobičajeno ponašanje "loših" aplikacija** kao što su: Telephony identifiers exfiltration, Audio/video flow interception, PIM data modification, Arbitrary code execution... ``` python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3 ``` @@ -739,60 +749,60 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3 ![](<../../images/image (595).png>) -**MARA** is a **M**obile **A**pplication **R**everse engineering and **A**nalysis Framework. To je alat koji okuplja često korišćene alate za reverse engineering i analizu mobilnih aplikacija, kako bi pomogao u testiranju mobilnih aplikacija protiv OWASP mobile security threats. Njegov cilj je da ovaj zadatak učini jednostavnijim i pristupačnijim za developere mobilnih aplikacija i bezbednosne profesionalce. +**MARA** je **M**obile **A**pplication **R**everse engineering and **A**nalysis Framework. To je alat koji okuplja često korišćene alate za reverse engineering i analizu mobilnih aplikacija, kako bi pomogao pri testiranju mobilnih aplikacija protiv OWASP mobile security pretnji. Njegov cilj je da ovaj zadatak učini lakšim i pristupačnijim programerima mobilnih aplikacija i stručnjacima za bezbednost. -It is able to: +U stanju je da: -- Extract Java and Smali code using different tools -- Analyze APKs using: [smalisca](https://github.com/dorneanu/smalisca), [ClassyShark](https://github.com/google/android-classyshark), [androbugs](https://github.com/AndroBugs/AndroBugs_Framework), [androwarn](https://github.com/maaaaz/androwarn), [APKiD](https://github.com/rednaga/APKiD) -- Extract private information from the APK using regexps. -- Analyze the Manifest. -- Analyze found domains using: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) and [whatweb](https://github.com/urbanadventurer/WhatWeb) -- Deobfuscate APK via [apk-deguard.com](http://www.apk-deguard.com) +- Ekstrahuje Java i Smali kod koristeći različite alate +- Analizira APK-ove koristeći: [smalisca](https://github.com/dorneanu/smalisca), [ClassyShark](https://github.com/google/android-classyshark), [androbugs](https://github.com/AndroBugs/AndroBugs_Framework), [androwarn](https://github.com/maaaaz/androwarn), [APKiD](https://github.com/rednaga/APKiD) +- Ekstrahuje privatne informacije iz APK-a koristeći regexps. +- Analizira Manifest. +- Analizira pronađene domene koristeći: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) i [whatweb](https://github.com/urbanadventurer/WhatWeb) +- Deobfuskira APK preko [apk-deguard.com](http://www.apk-deguard.com) ### Koodous -Korisno za otkrivanje malvera: [https://koodous.com/](https://koodous.com/) +Koristan za detekciju malware-a: [https://koodous.com/](https://koodous.com/) -## Obfuscating/Deobfuscating code +## Obfuskacija/Deobfuskacija koda -Imajte na umu da, u zavisnosti od servisa i konfiguracije koje koristite za obfuskaciju koda, tajne mogu ili ne moraju biti obfuskirane. +Imajte na umu da, u zavisnosti od servisa i konfiguracije koju koristite za obfuskaciju koda, tajne mogu ili ne moraju ostati obfuskovane. ### [ProGuard]() -From [Wikipedia](): **ProGuard** je alat otvorenog koda komandne linije koji smanjuje, optimizuje i obfuskira Java kod. U mogućnosti je da optimizuje bytecode kao i da detektuje i ukloni neiskorišćena uputstva. ProGuard je slobodan softver i distribuira se pod GNU General Public License, verzija 2. +Iz [Wikipedia](): **ProGuard** je open source command-line alat koji smanjuje, optimizuje i obfuskira Java kod. Može optimizovati bytecode kao i detektovati i ukloniti neiskorišćene instrukcije. ProGuard je besplatan softver i distribuira se pod GNU General Public License, verzija 2. -ProGuard se isporučuje kao deo Android SDK-a i pokreće se pri buildovanju aplikacije u release modu. +ProGuard se distribuira kao deo Android SDK-a i pokreće se prilikom build-anja aplikacije u release modu. ### [DexGuard](https://www.guardsquare.com/dexguard) -Pronađite korak-po-korak vodič za deobfuskaciju apk-a na [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html) +Pronađite step-by-step vodič za deobfuskaciju apk-a na [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html) -(Iz tog vodiča) Poslednji put kada smo proveravali, Dexguard režim rada je bio: +(Iz tog vodiča) Poslednji put kada smo proveravali, način rada Dexguard-a je bio: -- load a resource as an InputStream; -- feed the result to a class inheriting from FilterInputStream to decrypt it; -- do some useless obfuscation to waste a few minutes of time from a reverser; -- feed the decrypted result to a ZipInputStream to get a DEX file; -- finally load the resulting DEX as a Resource using the `loadDex` method. +- učitaj resource kao InputStream; +- prosledi rezultat klasi koja nasleđuje od FilterInputStream da bi ga dekriptovala; +- uradi neku besmislenu obfuskaciju da izgubiš nekoliko minuta reversera; +- prosledi dekriptovani rezultat u ZipInputStream da bi dobio DEX fajl; +- konačno učitaj nastali DEX kao Resource koristeći `loadDex` metodu. ### [DeGuard](http://apk-deguard.com) -**DeGuard reverses the process of obfuscation performed by Android obfuscation tools. This enables numerous security analyses, including code inspection and predicting libraries.** +**DeGuard reverzuje proces obfuskacije koji izvode Android obfuscation alati. Ovo omogućava brojne analize bezbednosti, uključujući inspekciju koda i predviđanje biblioteka.** -Možete otpremiti obfuskovani APK na njihovu platformu. +Možete upload-ovati obfuskirani APK na njihovu platformu. ### [Deobfuscate android App]https://github.com/In3tinct/deobfuscate-android-app -This is a LLM tool to find any potential security vulnerabilities in android apps and deobfuscate android app code. Uses Google's Gemini public API. +Ovo je LLM alat za pronalaženje potencijalnih sigurnosnih ranjivosti u android aplikacijama i deobfuskaciju android app koda. Koristi Google's Gemini public API. ### [Simplify](https://github.com/CalebFenton/simplify) -To je **generički android deobfuscator.** Simplify **virtually executes an app** da bi razumeo njeno ponašanje i zatim **tries to optimize the code** tako da se ponaša identično, ali bude lakše razumljiv čoveku. Svaka vrsta optimizacije je jednostavna i generička, tako da nije bitno koja specifična vrsta obfuskacije je korišćena. +To je **generic android deobfuscator.** Simplify **virtually izvršava aplikaciju** da razume njeno ponašanje i zatim **pokušava da optimizuje kod** tako da se ponaša identično, ali bude lakši za čoveka da razume. Svaki tip optimizacije je jednostavan i generički, tako da nije važno koji tačno tip obfuskacije je korišćen. ### [APKiD](https://github.com/rednaga/APKiD) -APKiD gives you information about **how an APK was made**. Identifikuje mnoge **compilers**, **packers**, **obfuscators**, i druge neobične stvari. It's [_PEiD_](https://www.aldeid.com/wiki/PEiD) for Android. +APKiD vam daje informacije o **kako je APK napravljen**. Identifikuje mnoge **compilers**, **packers**, **obfuscators**, i druge čudne stvari. To je [_PEiD_](https://www.aldeid.com/wiki/PEiD) za Android. ### Manual @@ -802,7 +812,7 @@ APKiD gives you information about **how an APK was made**. Identifikuje mnoge ** ### [Androl4b](https://github.com/sh4hin/Androl4b) -AndroL4b je Android security virtual machine bazirana na ubuntu-mate koja uključuje kolekciju najnovijih framework-a, tutorijala i labova od različitih security entuzijasta i istraživača za reverse engineering i analizu malvera. +AndroL4b je Android security virtualna mašina bazirana na ubuntu-mate koja uključuje kolekciju najnovijih framework-ova, tutorijala i labova od različitih security geeka i istraživača za reverse engineering i malware analizu. ## References @@ -815,6 +825,7 @@ AndroL4b je Android security virtual machine bazirana na ubuntu-mate koja uklju - [SSLPinDetect: Advanced SSL Pinning Detection for Android Security Analysis](https://petruknisme.medium.com/sslpindetect-advanced-ssl-pinning-detection-for-android-security-analysis-1390e9eca097) - [SSLPinDetect GitHub](https://github.com/aancw/SSLPinDetect) - [smali-sslpin-patterns](https://github.com/aancw/smali-sslpin-patterns) +- [Build a Repeatable Android Bug Bounty Lab: Emulator vs Magisk, Burp, Frida, and Medusa](https://www.yeswehack.com/learn-bug-bounty/android-lab-mobile-hacking-tools) ## Yet to try diff --git a/src/mobile-pentesting/android-app-pentesting/android-anti-instrumentation-and-ssl-pinning-bypass.md b/src/mobile-pentesting/android-app-pentesting/android-anti-instrumentation-and-ssl-pinning-bypass.md index 6dec74264..687faab45 100644 --- a/src/mobile-pentesting/android-app-pentesting/android-anti-instrumentation-and-ssl-pinning-bypass.md +++ b/src/mobile-pentesting/android-app-pentesting/android-anti-instrumentation-and-ssl-pinning-bypass.md @@ -2,30 +2,30 @@ {{#include ../../banners/hacktricks-training.md}} -Ova stranica daje praktičan workflow za povraćaj dinamičke analize nad Android aplikacijama koje detektuju/sprečavaju instrumentation zbog root-a ili nameću TLS pinning. Fokusira se na brzu trijažu, uobičajene detekcije i kopiraj‑zalepi hookove/taktike za zaobilaženje bez repackovanja kad je to moguće. +Ova stranica pruža praktičan workflow za povratak dinamičke analize protiv Android aplikacija koje detektuju/blokiraju instrumentation zbog root‑a ili primenjuju TLS pinning. Fokusira se na brzu trijažu, česte detekcije i copy‑pasteable hooks/tactics za njihovo zaobilaženje bez repack‑ovanja kad god je to moguće. ## Detection Surface (what apps check) -- Root checks: su binary, Magisk paths, getprop values, common root packages -- Frida/debugger checks (Java): Debug.isDebuggerConnected(), ActivityManager.getRunningAppProcesses(), getRunningServices(), scanning /proc, classpath, loaded libs +- Root provere: su binary, Magisk paths, getprop values, common root packages +- Frida/debugger provere (Java): Debug.isDebuggerConnected(), ActivityManager.getRunningAppProcesses(), getRunningServices(), skeniranje /proc, classpath, učitane libs - Native anti‑debug: ptrace(), syscalls, anti‑attach, breakpoints, inline hooks -- Early init checks: Application.onCreate() or process start hooks that crash if instrumentation is present +- Rane init provere: Application.onCreate() ili process start hooks koji ruše aplikaciju ako je instrumentation prisutna - TLS pinning: custom TrustManager/HostnameVerifier, OkHttp CertificatePinner, Conscrypt pinning, native pins ## Step 1 — Quick win: hide root with Magisk DenyList -- Enable Zygisk in Magisk -- Enable DenyList, add the target package -- Reboot and retest +- Omogući Zygisk u Magisk +- Omogući DenyList, dodaj target package +- Restartuj i ponovo testiraj -Mnoge aplikacije traže samo očigledne indikatore (su/Magisk paths/getprop). DenyList često neutralizuje naivne provere. +Mnoge aplikacije traže samo očigledne indikatore (su/Magisk paths/getprop). DenyList često neutrališe naivne provere. References: - Magisk (Zygisk & DenyList): https://github.com/topjohnwu/Magisk ## Step 2 — 30‑second Frida Codeshare tests -Probaj uobičajene drop‑in skripte pre nego što kreneš u dublju analizu: +Probaj uobičajene drop‑in skripte pre dubljeg istraživanja: - anti-root-bypass.js - anti-frida-detection.js @@ -35,24 +35,41 @@ Example: ```bash frida -U -f com.example.app -l anti-frida-detection.js ``` -Oni obično stubuju Java root/debug checks, process/service scans i native ptrace(). Korisno za slabo zaštićene apps; hardened targets mogu zahtevati tailored hooks. +Ovo obično pravi stub-ove za Java root/debug checks, process/service scans i native ptrace(). Korisno za slabije zaštićene aplikacije; ojačani ciljevi mogu zahtevati prilagođene hooks. - Codeshare: https://codeshare.frida.re/ +## Automatizujte sa Medusa (Frida framework) + +Medusa pruža 90+ gotovih modula za SSL unpinning, root/emulator detection bypass, HTTP comms logging, crypto key interception i još mnogo toga. +```bash +git clone https://github.com/Ch0pin/medusa +cd medusa +pip install -r requirements.txt +python medusa.py + +# Example interactive workflow +show categories +use http_communications/multiple_unpinner +use root_detection/universal_root_detection_bypass +run com.target.app +``` +Savet: Medusa je odlična za brze dobitke pre nego što napišete custom hooks. Takođe možete cherry-pick modules i kombinovati ih sa svojim scripts. + ## Korak 3 — Zaobiđite detektore pri inicijalizaciji priključivanjem kasnije -Mnoga detekcija se izvršavaju samo tokom process spawn/onCreate(). Spawn‑time injection (-f) ili gadgets bivaju otkriveni; priključivanje nakon učitavanja UI‑a može promaći. +Mnoge detekcije se pokreću samo tokom process spawn/onCreate(). Spawn‑time injection (-f) ili gadgets bivaju otkriveni; priključenje nakon učitavanja UI može proći neopaženo. ```bash # Launch the app normally (launcher/adb), wait for UI, then attach frida -U -n com.example.app # Or with Objection to attach to running process aobjection --gadget com.example.app explore # if using gadget ``` -Ako ovo radi, održi sesiju stabilnom i nastavi sa mapiranjem i stub proverama. +Ako ovo uspe, zadržite sesiju stabilnom i nastavite sa mapiranjem i stub proverama. -## Korak 4 — Mapiraj logiku detekcije preko Jadx i pretragom stringova +## Korak 4 — Mapirajte logiku detekcije putem Jadx i pretrage stringova -Ključne reči za statičku trijažu u Jadx: +Statičke ključne reči za triage u Jadx: - "frida", "gum", "root", "magisk", "ptrace", "su", "getprop", "debugger" Tipični Java obrasci: @@ -61,16 +78,16 @@ public boolean isFridaDetected() { return getRunningServices().contains("frida"); } ``` -Uobičajeni API-jevi za review/hook: +Uobičajeni API-ji za pregled/hook: - android.os.Debug.isDebuggerConnected - android.app.ActivityManager.getRunningAppProcesses / getRunningServices - java.lang.System.loadLibrary / System.load (native bridge) - java.lang.Runtime.exec / ProcessBuilder (probing commands) - android.os.SystemProperties.get (root/emulator heuristics) -## Korak 5 — Runtime stubbing with Frida (Java) +## Korak 5 — Runtime stubbing sa Frida (Java) -Override custom guards da vraćaju sigurne vrednosti bez repacking-a: +Prepišite custom guards da vrate bezbedne vrednosti bez repackinga: ```js Java.perform(() => { const Checks = Java.use('com.example.security.Checks'); @@ -85,7 +102,7 @@ const AM = Java.use('android.app.ActivityManager'); AM.getRunningAppProcesses.implementation = function () { return java.util.Collections.emptyList(); }; }); ``` -Trijaža ranih padova? Dump-ujte klase neposredno pre nego što aplikacija padne da biste uočili verovatne detection namespaces: +Triaging ranih crash-eva? Dump classes neposredno pre nego što se aplikacija sruši, da biste uočili verovatne detection namespaces: ```js Java.perform(() => { Java.enumerateLoadedClasses({ @@ -94,7 +111,15 @@ onComplete: () => console.log('Done') }); }); ``` -Zabeležite i onesposobite sumnjive metode da potvrdite tok izvršavanja: +// Quick root detection stub example (adapt to target package/class names) +Java.perform(() => { +try { +const RootChecker = Java.use('com.target.security.RootCheck'); +RootChecker.isDeviceRooted.implementation = function () { return false; }; +} catch (e) {} +}); + +Log i onesposobite sumnjive metode kako biste potvrdili tok izvršavanja: ```js Java.perform(() => { const Det = Java.use('com.example.security.DetectionManager'); @@ -104,20 +129,60 @@ return false; }; }); ``` -## Korak 6 — Pratite JNI/native trag kada Java hooks zakažu +## Bypass emulator/VM detection (Java stubs) -Pratite JNI ulazne tačke da biste pronašli native loaders i detection init: +Uobičajene heuristike: Build.FINGERPRINT/MODEL/MANUFACTURER/HARDWARE koji sadrže generic/goldfish/ranchu/sdk; QEMU artefakti kao /dev/qemu_pipe, /dev/socket/qemud; podrazumevana MAC 02:00:00:00:00:00; 10.0.2.x NAT; nedostatak telephony/sensors. + +Quick spoof of Build fields: +```js +Java.perform(function(){ +var Build = Java.use('android.os.Build'); +Build.MODEL.value = 'Pixel 7 Pro'; +Build.MANUFACTURER.value = 'Google'; +Build.BRAND.value = 'google'; +Build.FINGERPRINT.value = 'google/panther/panther:14/UP1A.231105.003/1234567:user/release-keys'; +}); +``` +Dopunite stubovima za provere postojanja fajlova i identifikatore (TelephonyManager.getDeviceId/SubscriberId, WifiInfo.getMacAddress, SensorManager.getSensorList) da vrate realistične vrednosti. + +## SSL pinning bypass quick hook (Java) + +Neutralizujte prilagođene TrustManagers i prisilite permisivne SSL contexts: +```js +Java.perform(function(){ +var X509TrustManager = Java.use('javax.net.ssl.X509TrustManager'); +var SSLContext = Java.use('javax.net.ssl.SSLContext'); + +// No-op validations +X509TrustManager.checkClientTrusted.implementation = function(){ }; +X509TrustManager.checkServerTrusted.implementation = function(){ }; + +// Force permissive TrustManagers +var TrustManagers = [ X509TrustManager.$new() ]; +var SSLContextInit = SSLContext.init.overload('[Ljavax.net.ssl.KeyManager;','[Ljavax.net.ssl.TrustManager;','java.security.SecureRandom'); +SSLContextInit.implementation = function(km, tm, sr){ +return SSLContextInit.call(this, km, TrustManagers, sr); +}; +}); +``` +Napomene +- Proširi za OkHttp: hook okhttp3.CertificatePinner i HostnameVerifier po potrebi, ili koristi univerzalni unpinning script sa CodeShare. +- Primer pokretanja: `frida -U -f com.target.app -l ssl-bypass.js --no-pause` + +## Korak 6 — Prati JNI/native trag kada Java hooks zakažu + +Prati JNI ulazne tačke da bi pronašao native loadere i inicijalizaciju detekcije: ```bash frida-trace -n com.example.app -i "JNI_OnLoad" ``` -Brza nativna trijaža priloženih .so datoteka: +Brza nativna trijaža priloženih .so fajlova: ```bash # List exported symbols & JNI nm -D libfoo.so | head objdump -T libfoo.so | grep Java_ strings -n 6 libfoo.so | egrep -i 'frida|ptrace|gum|magisk|su|root' ``` -Interaktivno / native reversing: +Interaktivno/nativno reversing: - Ghidra: https://ghidra-sre.org/ - r2frida: https://github.com/nowsecure/r2frida @@ -137,26 +202,28 @@ reversing-native-libraries.md ## Korak 7 — Objection patching (embed gadget / strip basics) -Ako više volite repacking umesto runtime hooks, pokušajte: +Ako više volite repacking umesto runtime hooks, probajte: ```bash objection patchapk --source app.apk ``` Napomene: -- Zahteva apktool; obezbedite aktuelnu verziju iz zvaničnog vodiča da biste izbegli probleme pri buildovanju: https://apktool.org/docs/install -- Gadget injection omogućava instrumentation bez root-a, ali može biti otkrivena jačim init‑time checks. +- Zahteva apktool; obezbedite ažuriranu verziju iz zvaničnog uputstva da biste izbegli probleme pri izgradnji: https://apktool.org/docs/install +- Gadget injection omogućava instrumentation bez root-a, ali i dalje može biti otkrivena jačim init‑time checks. -References: +Opcionalno, dodajte LSPosed moduli i Shamiko za jače skrivanje root-a u Zygisk okruženjima, i prilagodite DenyList da pokrije child processes. + +Reference: - Objection: https://github.com/sensepost/objection -## Korak 8 — Plan B: Uklonite TLS pinning radi vidljivosti mreže +## Korak 8 — Fallback: Patch TLS pinning za omogućavanje vidljivosti mrežnog saobraćaja -Ako je instrumentation blokirana, i dalje možete da pregledate saobraćaj tako što ćete statički ukloniti pinning: +Ako je instrumentation blokirana, i dalje možete pregledati saobraćaj uklanjanjem pinning-a statički: ```bash apk-mitm app.apk # Then install the patched APK and proxy via Burp/mitmproxy ``` - Alat: https://github.com/shroudedcode/apk-mitm -- Za trikove vezane za network config CA‑trust (i Android 7+ user CA trust), vidi: +- Za trikove vezane za CA‑trust u konfiguraciji mreže (i Android 7+ user CA trust), vidi: {{#ref}} make-apk-accept-ca-certificate.md @@ -166,7 +233,7 @@ make-apk-accept-ca-certificate.md install-burp-certificate.md {{#endref}} -## Koristan spisak komandi +## Korisna lista komandi ```bash # List processes and attach frida-ps -Uai @@ -184,12 +251,12 @@ objection --gadget com.example.app explore # Static TLS pinning removal apk-mitm app.apk ``` -## Saveti i napomene +## Saveti i upozorenja -- Preferirajte attach kasnije umesto spawn-ovanja kada apps crash-uju pri launch-u -- Neki detections se ponovo pokreću u kritičnim flow-ovima (npr. payment, auth) — držite hooks aktivnim tokom navigacije -- Mešajte static i dynamic: string hunt u Jadx da suzite listu klasa; zatim hook-ujte metode da verifikujete u runtime-u -- Hardened apps mogu koristiti packers i native TLS pinning — očekujte da reverse-ujete native code +- Radije zakačite kasnije nego pokrenete novi proces (spawn) kada se aplikacije ruše pri pokretanju +- Neka otkrivanja se ponovo pokreću u kritičnim tokovima (npr. plaćanje, autentifikacija) — držite hooks aktivnim tokom navigacije +- Kombinujte static i dynamic pristup: traženje stringova u Jadx da biste suzili listu klasa; zatim hook-ujte metode da verifikujete u runtime-u +- Zaštićene aplikacije mogu koristiti packers i native TLS pinning — očekujte da ćete morati reverse-ovati native kod ## Reference @@ -202,5 +269,7 @@ apk-mitm app.apk - [r2frida](https://github.com/nowsecure/r2frida) - [Apktool install guide](https://apktool.org/docs/install) - [Magisk](https://github.com/topjohnwu/Magisk) +- [Medusa (Android Frida framework)](https://github.com/Ch0pin/medusa) +- [Build a Repeatable Android Bug Bounty Lab: Emulator vs Magisk, Burp, Frida, and Medusa](https://www.yeswehack.com/learn-bug-bounty/android-lab-mobile-hacking-tools) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/mobile-pentesting/android-app-pentesting/avd-android-virtual-device.md b/src/mobile-pentesting/android-app-pentesting/avd-android-virtual-device.md index 6d1bc8980..79c70c4cc 100644 --- a/src/mobile-pentesting/android-app-pentesting/avd-android-virtual-device.md +++ b/src/mobile-pentesting/android-app-pentesting/avd-android-virtual-device.md @@ -2,23 +2,23 @@ {{#include ../../banners/hacktricks-training.md}} -Hvala puno [**@offsecjay**](https://twitter.com/offsecjay) na pomoći prilikom kreiranja ovog sadržaja. +Veliko hvala [**@offsecjay**](https://twitter.com/offsecjay) na pomoći pri izradi ovog sadržaja. ## Šta je -Android Studio omogućava **pokretanje virtuelnih mašina Android koje možete koristiti za testiranje APK-ova**. Da biste ih koristili, biće vam potrebni: +Android Studio omogućava pokretanje virtuelnih Android mašina koje možete koristiti za testiranje APKs. Da biste ih koristili trebaće vam: -- **Android SDK alati** - [Preuzmite ovde](https://developer.android.com/studio/releases/sdk-tools). -- Ili **Android Studio** (sa Android SDK alatima) - [Preuzmite ovde](https://developer.android.com/studio). +- The **Android SDK tools** - [Download here](https://developer.android.com/studio/releases/sdk-tools). +- Or **Android Studio** (with Android SDK tools) - [Download here](https://developer.android.com/studio). -Na Windows-u (u mom slučaju) **nakon instalacije Android Studio** imao sam **SDK alate instalirane u**: `C:\Users\\AppData\Local\Android\Sdk\tools` +Na Windowsu (u mom slučaju) **posle instalacije Android Studio** imao sam **SDK Tools instalirane u**: `C:\Users\\AppData\Local\Android\Sdk\tools` -Na mac-u možete **preuzeti SDK alate** i imati ih u PATH pokretanjem: +Na mac možete **download the SDK tools** i dodati ih u PATH pokretanjem: ```bash brew tap homebrew/cask brew install --cask android-sdk ``` -Ili iz **Android Studio GUI** kao što je naznačeno u [https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a](https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a) što će ih instalirati u `~/Library/Android/sdk/cmdline-tools/latest/bin/` i `~/Library/Android/sdk/platform-tools/` i `~/Library/Android/sdk/emulator/` +Ili iz **Android Studio GUI** kako je naznačeno u [https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a](https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a) koje će ih instalirati u `~/Library/Android/sdk/cmdline-tools/latest/bin/` i `~/Library/Android/sdk/platform-tools/` i `~/Library/Android/sdk/emulator/` Za Java probleme: ```java @@ -26,9 +26,9 @@ export JAVA_HOME=/Applications/Android\ Studio.app/Contents/jbr/Contents/Home ``` ## GUI -### Pripremite Virtuelnu Mašinu +### Priprema virtuelne mašine -Ako ste instalirali Android Studio, možete jednostavno otvoriti glavni prikaz projekta i pristupiti: _**Tools**_ --> _**AVD Manager.**_ +If you installed Android Studio, you can just open the main project view and access: _**Tools**_ --> _**AVD Manager.**_
@@ -36,38 +36,38 @@ Ako ste instalirali Android Studio, možete jednostavno otvoriti glavni prikaz p
-Zatim, kliknite na _**Create Virtual Device**_ +Zatim kliknite na _**Create Virtual Device**_
_**izaberite** telefon koji želite da koristite_ i kliknite na _**Next.**_ > [!WARNING] -> Ako vam je potreban telefon sa instaliranim Play Store-om, izaberite onaj sa ikonom Play Store-a! +> Ako vam treba telefon sa Play Store instaliranim, izaberite onaj koji ima Play Store ikonicu! > > -U trenutnom prikazu moći ćete da **izaberete i preuzmete Android sliku** koju će telefon koristiti: +U trenutnom prikazu moći ćete da **izaberete i preuzmete Android image** koji će telefon pokretati:
-Dakle, izaberite je i ako nije preuzeta, kliknite na _**Download**_ simbol pored imena (**sada sačekajte da se slika preuzme).**\ -Kada se slika preuzme, jednostavno izaberite **`Next`** i **`Finish`**. +Dakle, izaberite ga, a ako nije preuzet kliknite na simbol _**Download**_ pored imena (**sada sačekajte da se image preuzme).**\ +Kada je image preuzet, jednostavno izaberite **`Next`** i **`Finish`**. -Virtuelna mašina će biti kreirana. Sada **svaki put kada pristupite AVD manager-u, biće prisutna**. +Virtuelna mašina će biti kreirana. Sada **svaki put kada pristupite AVD Manager-u biće prisutna**. -### Pokrenite Virtuelnu Mašinu +### Pokretanje virtuelne mašine -Da biste je **pokrenuli**, jednostavno pritisnite _**Start button**_. +Da biste je **pokrenuli** jednostavno pritisnite _**Start button**_. ![](<../../images/image (518).png>) -## Alat za Komandnu Liniju +## Alat komandne linije > [!WARNING] -> Za macOS možete pronaći `avdmanager` alat u `/Users//Library/Android/sdk/tools/bin/avdmanager` i `emulator` u `/Users//Library/Android/sdk/emulator/emulator` ako ste ih instalirali. +> For macOS you can find the `avdmanager` tool in `/Users//Library/Android/sdk/tools/bin/avdmanager` and the `emulator` in `/Users//Library/Android/sdk/emulator/emulator` if you have them installed. -Prvo što treba da uradite je da **odlučite koji telefon želite da koristite**, da biste videli listu mogućih telefona, izvršite: +Prvo morate **odlučiti koji telefon želite da koristite**, da biste videli listu mogućih telefona izvršite: ``` C:\Users\\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat list device @@ -95,8 +95,8 @@ Name: Nexus 10 OEM : Google [...] ``` -Kada odlučite ime uređaja koji želite da koristite, potrebno je **odlučiti koju Android sliku želite da pokrenete na ovom uređaju.**\ -Možete navesti sve opcije koristeći `sdkmanager`: +Kada odlučite ime uređaja koji želite da koristite, potrebno je da **odlučite koji Android image želite da pokrenete na ovom uređaju.**\ +Možete prikazati sve opcije koristeći `sdkmanager`: ```bash C:\Users\\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat --list ``` @@ -104,7 +104,7 @@ I **preuzmite** onaj (ili sve) koje želite da koristite sa: ```bash C:\Users\\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat "platforms;android-28" "system-images;android-28;google_apis;x86_64" ``` -Kada preuzmete Android sliku koju želite da koristite, možete **prikazati sve preuzete Android slike** sa: +Kada preuzmete Android image koji želite da koristite, možete **prikazati sve preuzete Android image-ove** pomoću: ``` C:\Users\\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat list target ---------- @@ -120,12 +120,12 @@ Type: Platform API level: 29 Revision: 4 ``` -U ovom trenutku ste odlučili koji uređaj želite da koristite i preuzeli ste Android sliku, tako da **možete kreirati virtuelnu mašinu koristeći**: +U ovom trenutku ste odlučili koji uređaj želite da koristite i preuzeli Android image, tako da **možete da kreirate virtuelnu mašinu koristeći**: ```bash C:\Users\\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat -v create avd -k "system-images;android-28;google_apis;x86_64" -n "AVD9" -d "Nexus 5X" ``` -U poslednjoj komandi **napravio sam VM nazvan** "_AVD9_" koristeći **uređaj** "_Nexus 5X_" i **Android sliku** "_system-images;android-28;google_apis;x86_64_".\ -Sada možete **prikazati virtuelne mašine** koje ste napravili sa: +U poslednjoj komandi **sam kreirao VM pod imenom** "_AVD9_" koristeći **uređaj** "_Nexus 5X_" i **Android image** "_system-images;android-28;google_apis;x86_64_".\ +Sada možete **prikazati virtuelne mašine** koje ste kreirali pomoću: ```bash C:\Users\\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat list avd @@ -140,75 +140,131 @@ Name: Pixel_2_API_27 Path: C:\Users\cpolo\.android\avd\Pixel_2_API_27_1.avd Error: Google pixel_2 no longer exists as a device ``` -### Pokreni Virtuelnu Mašinu +### Pokretanje virtuelne mašine > [!WARNING] -> Za macOS možete pronaći alat `avdmanager` u `/Users//Library/Android/sdk/tools/bin/avdmanager` i `emulator` u `/Users//Library/Android/sdk/emulator/emulator` ako ste ih instalirali. +> Na macOS-u možete pronaći alat `avdmanager` u `/Users//Library/Android/sdk/tools/bin/avdmanager` i `emulator` u `/Users//Library/Android/sdk/emulator/emulator`, ako ih imate instalirane. -Već smo videli kako možete da navedete kreirane virtuelne mašine, ali **takođe ih možete navesti koristeći**: +Već smo videli kako možete prikazati kreirane virtuelne mašine, ali **možete ih i izlistati pomoću**: ```bash C:\Users\\AppData\Local\Android\Sdk\tools\emulator.exe -list-avds AVD9 Pixel_2_API_27 ``` -Možete jednostavno **pokrenuti svaku virtuelnu mašinu kreiranu** koristeći: +Možete jednostavno **pokrenuti bilo koju kreiranu virtuelnu mašinu** koristeći: ```bash C:\Users\\AppData\Local\Android\Sdk\tools\emulator.exe -avd "VirtualMachineName" C:\Users\\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" ``` -Ili koristeći naprednije opcije, možete pokrenuti virtuelnu mašinu kao što je: +Ili koristeći naprednije opcije, možete pokrenuti virtuelnu mašinu poput: ```bash C:\Users\\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -http-proxy 192.168.1.12:8080 -writable-system ``` ### Opcije komandne linije -Međutim, postoji **mnogo različitih korisnih opcija komandne linije** koje možete koristiti za pokretanje virtuelne mašine. Ispod možete pronaći neke zanimljive opcije, ali možete [**pronaći kompletnu listu ovde**](https://developer.android.com/studio/run/emulator-commandline) +Međutim, postoji **mnogo različitih korisnih opcija iz komandne linije** koje možete koristiti za pokretanje virtuelne mašine. Ispod možete pronaći neke interesantne opcije, ali možete [**find a complete list here**](https://developer.android.com/studio/run/emulator-commandline) -**Pokretanje** +**Boot** -- `-snapshot name` : Pokreni VM snapshot -- `-snapshot-list -snapstorage ~/.android/avd/Nexus_5X_API_23.avd/snapshots-test.img` : Prikaži sve snimke koji su zabeleženi +- `-snapshot name` : Pokreni snapshot VM-a +- `-snapshot-list -snapstorage ~/.android/avd/Nexus_5X_API_23.avd/snapshots-test.img` : Prikaži sve zabeležene snapshotove -**Mreža** +**Network** -- `-dns-server 192.0.2.0, 192.0.2.255` : Omogućava da se navedu DNS serveri za VM odvojeni zarezom. -- **`-http-proxy 192.168.1.12:8080`** : Omogućava da se navede HTTP proxy koji će se koristiti (veoma korisno za hvatanje saobraćaja koristeći Burp) -- Ako postavke proxy-a ne rade iz nekog razloga, pokušajte da ih konfigurišete interno ili koristeći aplikaciju kao što je "Super Proxy" ili "ProxyDroid". -- `-netdelay 200` : Postavi emulaciju latencije mreže u milisekundama. -- `-port 5556` : Postavi TCP broj porta koji se koristi za konzolu i adb. -- `-ports 5556,5559` : Postavi TCP portove koji se koriste za konzolu i adb. -- **`-tcpdump /path/dumpfile.cap`** : Hvata sav saobraćaj u datoteku +- `-dns-server 192.0.2.0, 192.0.2.255` : Dozvoljava navođenje DNS servera, odvojenih zarezom, za VM. +- **`-http-proxy 192.168.1.12:8080`** : Dozvoljava navođenje HTTP proxy-ja za korišćenje (veoma korisno za presretanje saobraćaja koristeći Burp) +- If the proxy settings aren't working for some reason, try to configure them internally or using an pplication like "Super Proxy" or "ProxyDroid". +- `-netdelay 200` : Podesi emulaciju latencije mreže u milisekundama. +- `-port 5556` : Podesi TCP port koji se koristi za konzolu i adb. +- `-ports 5556,5559` : Podesi TCP portove koji se koriste za konzolu i adb. +- **`-tcpdump /path/dumpfile.cap`** : Zabeleži sav saobraćaj u fajl -**Sistem** +**System** -- `-selinux {disabled|permissive}` : Postavi Security-Enhanced Linux sigurnosni modul na onemogućen ili permisivan režim na Linux operativnom sistemu. -- `-timezone Europe/Paris` : Postavi vremensku zonu za virtuelni uređaj -- `-screen {touch(default)|multi-touch|o-touch}` : Postavi emulirani režim dodirnog ekrana. -- **`-writable-system`** : Koristite ovu opciju da imate zapisivu sistemsku sliku tokom vaše emulacione sesije. Takođe ćete morati da pokrenete `adb root; adb remount`. Ovo je veoma korisno za instalaciju novog sertifikata u sistem. +- `-selinux {disabled|permissive}` : Podesite Security-Enhanced Linux (SELinux) sigurnosni modul u režim disabled ili permissive na Linux operativnom sistemu. +- `-timezone Europe/Paris` : Podesi vremensku zonu za virtuelni uređaj +- `-screen {touch(default)|multi-touch|o-touch}` : Podesite emulirani režim touchscreen-a. +- **`-writable-system`** : Koristite ovu opciju da biste imali zapisivu sistemsku sliku tokom sesije emulacije. Takođe ćete morati da pokrenete `adb root; adb remount`. Ovo je veoma korisno za instaliranje novog sertifikata u sistem. -## Rootovanje uređaja sa Play Store-a +## Podešavanje Linux CLI (SDK/AVD quickstart) -Ako ste preuzeli uređaj sa Play Store-om, nećete moći da dobijete root direktno, i dobićete ovu poruku o grešci +Službeni CLI alati olakšavaju kreiranje brzih emulatora koje je lako debug-ovati, bez Android Studio. +```bash +# Directory layout +mkdir -p ~/Android/cmdline-tools/latest + +# Download commandline tools (Linux) +wget https://dl.google.com/android/repository/commandlinetools-linux-13114758_latest.zip -O /tmp/cmdline-tools.zip +unzip /tmp/cmdline-tools.zip -d ~/Android/cmdline-tools/latest +rm /tmp/cmdline-tools.zip + +# Env vars (add to ~/.bashrc or ~/.zshrc) +export ANDROID_HOME=$HOME/Android +export PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$ANDROID_HOME/emulator:$PATH + +# Install core SDK components +sdkmanager --install "platform-tools" "emulator" + +# Install a debuggable x86_64 system image (Android 11 / API 30) +sdkmanager --install "system-images;android-30;google_apis;x86_64" + +# Create an AVD and run it with a writable /system & snapshot name +avdmanager create avd -n PixelRootX86 -k "system-images;android-30;google_apis;x86_64" -d "pixel" +emulator -avd PixelRootX86 -writable-system -snapshot PixelRootX86_snap + +# Verify root (debuggable images allow `adb root`) +adb root +adb shell whoami # expect: root +``` +Beleške +- System image flavors: google_apis (debuggable, omogućava adb root), google_apis_playstore (not rootable), aosp/default (lightweight). +- Build types: `userdebug` često omogućava `adb root` na debug-capable images. Play Store images su produkcijske verzije i blokiraju root. +- Na x86_64 hostovima, full-system ARM64 emulation nije podržana od API 28+. Za Android 11+ koristite Google APIs/Play images koje uključuju per-app ARM-to-x86 translation da biste brzo pokretali mnoge ARM-only apps. + +### Snimci iz CLI +```bash +# Save a clean snapshot from the running emulator +adb -s emulator-5554 emu avd snapshot save my_clean_setup + +# Boot from a named snapshot (if it exists) +emulator -avd PixelRootX86 -writable-system -snapshot my_clean_setup +``` +## ARM→x86 binarna translacija (Android 11+) + +Google APIs i Play Store images na Android 11+ mogu da prevode ARM app binarne po procesu dok ostatak sistema ostaje native x86/x86_64. Ovo je često dovoljno brzo za testiranje mnogih ARM-only apps na desktopu. + +> Savet: Preferirajte Google APIs x86/x86_64 images during pentests. Play images su zgodne ali blokiraju `adb root`; koristite ih samo kada vam izričito trebaju Play services i prihvatate nedostatak roota. + +## Rootovanje Play Store uređaja + +Ako ste preuzeli uređaj sa Play Store, nećete moći direktno da dobijete root, i dobićete ovu poruku greške ``` $ adb root adbd cannot run as root in production builds ``` -Koristeći [rootAVD](https://github.com/newbit1/rootAVD) sa [Magisk](https://github.com/topjohnwu/Magisk) uspeo sam da ga rootujem (pratite na primer [**ovaj video**](https://www.youtube.com/watch?v=Wk0ixxmkzAI) **ili** [**ovaj**](https://www.youtube.com/watch?v=qQicUW0svB8)). +Korišćenjem [rootAVD](https://github.com/newbit1/rootAVD) sa [Magisk](https://github.com/topjohnwu/Magisk) uspeo sam da ga root-ujem (pogledaj, na primer, [**ovaj video**](https://www.youtube.com/watch?v=Wk0ixxmkzAI) **ili** [**ovaj**](https://www.youtube.com/watch?v=qQicUW0svB8)). -## Instalirajte Burp Sertifikat +## Instalacija Burp sertifikata + +Proveri sledeću stranicu da saznaš kako instalirati prilagođeni CA sertifikat: -Proverite sledeću stranicu da biste saznali kako da instalirate prilagođeni CA sertifikat: {{#ref}} install-burp-certificate.md {{#endref}} -## Lepi AVD Opcije +## Korisne opcije AVD-a -### Napravite Snimak +### Napravi snapshot -Možete **koristiti GUI** da napravite snimak VM-a u bilo kojem trenutku: +Možete **koristiti GUI** da u bilo kom trenutku napravite snapshot VM-a: ![](<../../images/image (234).png>) +## Reference + +- [Build a Repeatable Android Bug Bounty Lab: Emulator vs Magisk, Burp, Frida, and Medusa](https://www.yeswehack.com/learn-bug-bounty/android-lab-mobile-hacking-tools) +- [Android Emulator command line](https://developer.android.com/studio/run/emulator-commandline) +- [Run ARM apps on the Android Emulator (x86 translation)](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html) + {{#include ../../banners/hacktricks-training.md}} diff --git a/src/mobile-pentesting/android-app-pentesting/frida-tutorial/README.md b/src/mobile-pentesting/android-app-pentesting/frida-tutorial/README.md index 969c2d6c1..642d064ca 100644 --- a/src/mobile-pentesting/android-app-pentesting/frida-tutorial/README.md +++ b/src/mobile-pentesting/android-app-pentesting/frida-tutorial/README.md @@ -1,4 +1,4 @@ -# Frida Tutorial +# Frida tutorijal {{#include ../../../banners/hacktricks-training.md}} @@ -10,8 +10,8 @@ Instalirajte **frida tools**: pip install frida-tools pip install frida ``` -**Preuzmite i instalirajte** na android **frida server** ([Preuzmite najnovije izdanje](https://github.com/frida/frida/releases)).\ -Jedna linija za ponovno pokretanje adb u root režimu, povezivanje na njega, otpremanje frida-servera, davanje izvršnih dozvola i pokretanje u pozadini: +**Preuzmite i instalirajte** na Androidu **frida server** ([Download the latest release](https://github.com/frida/frida/releases)).\ +Jednolinijska naredba za restart adb-a u root režimu, povezivanje na uređaj, upload frida-server, dodeljivanje exec dozvola i pokretanje u pozadini: ```bash adb root; adb connect localhost:6000; sleep 1; adb push frida-server /data/local/tmp/; adb shell "chmod 755 /data/local/tmp/frida-server"; adb shell "/data/local/tmp/frida-server &" ``` @@ -20,31 +20,84 @@ adb root; adb connect localhost:6000; sleep 1; adb push frida-server /data/local frida-ps -U #List packages and processes frida-ps -U | grep -i #Get all the package name ``` -## Tutorijali +## Frida server vs. Gadget (root vs. no-root) -### [Tutorijal 1](frida-tutorial-1.md) +Dva uobičajena načina za instrumentovanje Android aplikacija pomoću Frida: -**Iz**: [https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1](https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1)\ +- Frida server (rooted devices): Prebacite i pokrenite native daemon koji vam omogućava da se povežete sa bilo kojim procesom. +- Frida Gadget (no root): Ugradite Frida kao shared library unutar APK-a i automatski je učitajte u ciljnom procesu. + +Frida server (rooted) +```bash +# Download the matching frida-server binary for your device's arch +# https://github.com/frida/frida/releases +adb root +adb push frida-server--android- /data/local/tmp/frida-server +adb shell chmod 755 /data/local/tmp/frida-server +adb shell /data/local/tmp/frida-server & # run at boot via init/magisk if desired + +# From host, list processes and attach +frida-ps -Uai +frida -U -n com.example.app +``` +Frida Gadget (no-root) + +1) Raspakujte APK, dodajte gadget .so i konfiguraciju: +- Postavite libfrida-gadget.so u lib// (npr. lib/arm64-v8a/) +- Kreirajte assets/frida-gadget.config sa podešavanjima za učitavanje skripte + +Primer frida-gadget.config +```json +{ +"interaction": { "type": "script", "path": "/sdcard/ssl-bypass.js" }, +"runtime": { "logFile": "/sdcard/frida-gadget.log" } +} +``` +2) Referencirajte/učitajte gadget tako da bude inicijalizovan rano: +- Najlakše: Dodajte mali Java stub koji poziva System.loadLibrary("frida-gadget") u Application.onCreate(), ili koristite native lib loading koji je već prisutan. + +3) Ponovo upakujte i potpišite APK, zatim instalirajte: +```bash +apktool d app.apk -o app_m +# ... add gadget .so and config ... +apktool b app_m -o app_gadget.apk +uber-apk-signer -a app_gadget.apk -o out_signed +adb install -r out_signed/app_gadget-aligned-debugSigned.apk +``` +4) Attach sa hosta na gadget process: +```bash +frida-ps -Uai +frida -U -n com.example.app +``` +Napomene +- Gadget je detektovan od strane nekih zaštita; držite imena/putanje prikrivenim i učitavajte kasno/uslovno po potrebi. +- Kod ojačanih aplikacija, preferirajte testiranje na rootovanom uređaju sa serverom + kasnim attach-ovanjem, ili kombinujte sa sakrivanjem pomoću Magisk/Zygisk. + +## Vodiči + +### [Tutorial 1](frida-tutorial-1.md) + +**Izvor**: [https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1](https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1)\ **APK**: [https://github.com/t0thkr1s/frida-demo/releases](https://github.com/t0thkr1s/frida-demo/releases)\ **Izvorni kod**: [https://github.com/t0thkr1s/frida-demo](https://github.com/t0thkr1s/frida-demo) -**Pratite [link da biste ga pročitali](frida-tutorial-1.md).** +**Pratite [link to read it](frida-tutorial-1.md).** -### [Tutorijal 2](frida-tutorial-2.md) +### [Tutorial 2](frida-tutorial-2.md) -**Iz**: [https://11x256.github.io/Frida-hooking-android-part-2/](https://11x256.github.io/Frida-hooking-android-part-2/) (Delovi 2, 3 i 4)\ -**APK-i i izvorni kod**: [https://github.com/11x256/frida-android-examples](https://github.com/11x256/frida-android-examples) +**Izvor**: [https://11x256.github.io/Frida-hooking-android-part-2/](https://11x256.github.io/Frida-hooking-android-part-2/) (Parts 2, 3 & 4)\ +**APKs i Izvorni kod**: [https://github.com/11x256/frida-android-examples](https://github.com/11x256/frida-android-examples) -**Pratite [link da biste ga pročitali.](frida-tutorial-2.md)** +**Pratite[ link to read it.](frida-tutorial-2.md)** -### [Tutorijal 3](owaspuncrackable-1.md) +### [Tutorial 3](owaspuncrackable-1.md) -**Iz**: [https://joshspicer.com/android-frida-1](https://joshspicer.com/android-frida-1)\ +**Izvor**: [https://joshspicer.com/android-frida-1](https://joshspicer.com/android-frida-1)\ **APK**: [https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level_01/UnCrackable-Level1.apk](https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level_01/UnCrackable-Level1.apk) -**Pratite [link da biste ga pročitali](owaspuncrackable-1.md).** +**Pratite [link to read it](owaspuncrackable-1.md).** -**Možete pronaći više sjajnih Frida skripti ovde:** [**https://codeshare.frida.re/**](https://codeshare.frida.re) +**Vi možete pronaći više Awesome Frida skripti ovde:** [**https://codeshare.frida.re/**](https://codeshare.frida.re) ## Brzi primeri @@ -61,7 +114,7 @@ frida -U --no-pause -l disableRoot.js -f owasp.mstg.uncrackable1 #frozen so that the instrumentation can occur, and the automatically #continue execution with our modified code. ``` -### Osnovni Python Skript +### Osnovna Python skripta ```python import frida, sys @@ -72,9 +125,9 @@ print('[ * ] Running Frida Demo application') script.load() sys.stdin.read() ``` -### Hooking functions without parameters +### Hooking funkcija bez parametara -Hookujte funkciju `a()` klase `sg.vantagepoint.a.c` +Hook funkciju `a()` klase `sg.vantagepoint.a.c` ```javascript Java.perform(function () { ; rootcheck1.a.overload().implementation = function() { @@ -91,7 +144,7 @@ sysexit.exit.overload("int").implementation = function (var_0) { send("java.lang.System.exit(I)V // We avoid exiting the application :)") } ``` -Hook MainActivity `.onStart()` & `.onCreate()` +Hook MainActivity `.onStart()` i `.onCreate()` ```javascript var mainactivity = Java.use("sg.vantagepoint.uncrackable1.MainActivity") mainactivity.onStart.overload().implementation = function () { @@ -115,9 +168,9 @@ send("Activity HIT!!!") var ret = this.onCreate.overload("android.os.Bundle").call(this, var_0) } ``` -### Hooking funkcija sa parametrima i dobijanje vrednosti +### Hooking funkcija sa parametrima i dohvatanje vrednosti -Hooking funkcije za dekripciju. Ispisati ulaz, pozvati originalnu funkciju da dekriptuje ulaz i konačno, ispisati plain podatke: +Hooking a decryption function. Ispisati input, pozvati originalnu funkciju za decryption inputa i na kraju ispisati nešifrovane podatke: ```javascript function getString(data) { var ret = "" @@ -142,9 +195,9 @@ send("Decrypted flag: " + flag) return ret //[B } ``` -### Hookovanje funkcija i pozivanje sa našim ulazom +### Hooking funkcija i pozivanje istih sa našim ulazom -Hook-ujte funkciju koja prima string i pozovite je sa drugim stringom (from [here](https://11x256.github.io/Frida-hooking-android-part-2/)) +Hook funkciju koja prima string i pozovi je drugim stringom (from [here](https://11x256.github.io/Frida-hooking-android-part-2/)) ```javascript var string_class = Java.use("java.lang.String") // get a JS wrapper for java's String class @@ -159,9 +212,9 @@ return ret ``` ### Dobijanje već kreiranog objekta klase -Ako želite da izvučete neki atribut kreiranog objekta, možete koristiti ovo. +Ako želite da izdvojite neki atribut iz već kreiranog objekta, možete koristiti ovo. -U ovom primeru ćete videti kako da dobijete objekat klase my_activity i kako da pozovete funkciju .secret() koja će odštampati privatni atribut objekta: +U ovom primeru ćete videti kako da dobijete objekat klase my_activity i kako da pozovete funkciju .secret() koja će ispisati privatni atribut objekta: ```javascript Java.choose("com.example.a11x256.frida_test.my_activity", { onMatch: function (instance) { @@ -175,7 +228,13 @@ onComplete: function () {}, ## Ostali Frida tutorijali - [https://github.com/DERE-ad2001/Frida-Labs](https://github.com/DERE-ad2001/Frida-Labs) -- [Deo 1 serije blogova o naprednoj upotrebi Frida: IOS biblioteke za enkripciju](https://8ksec.io/advanced-frida-usage-part-1-ios-encryption-libraries-8ksec-blogs/) +- [Part 1 of Advanced Frida Usage blog series: IOS Encryption Libraries](https://8ksec.io/advanced-frida-usage-part-1-ios-encryption-libraries-8ksec-blogs/) +## Reference + +- [Build a Repeatable Android Bug Bounty Lab: Emulator vs Magisk, Burp, Frida, and Medusa](https://www.yeswehack.com/learn-bug-bounty/android-lab-mobile-hacking-tools) +- [Frida Gadget documentation](https://frida.re/docs/gadget/) +- [Frida releases (server binaries)](https://github.com/frida/frida/releases) + {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/mobile-pentesting/android-app-pentesting/install-burp-certificate.md b/src/mobile-pentesting/android-app-pentesting/install-burp-certificate.md index e0259429f..0e008ae36 100644 --- a/src/mobile-pentesting/android-app-pentesting/install-burp-certificate.md +++ b/src/mobile-pentesting/android-app-pentesting/install-burp-certificate.md @@ -1,20 +1,32 @@ -# Instalirajte Burp Sertifikat +# Instalirajte Burp sertifikat {{#include ../../banners/hacktricks-training.md}} -## Na Virtuelnoj Mašini +## Sistemski proxy preko ADB -Prvo što treba da uradite je da preuzmete Der sertifikat sa Burp-a. To možete uraditi u _**Proxy**_ --> _**Options**_ --> _**Import / Export CA certificate**_ +Konfigurišite globalni HTTP proxy tako da sav saobraćaj aplikacija prolazi kroz vaš interceptor (Burp/mitmproxy): +```bash +# Set proxy (device/emulator must reach your host IP) +adb shell settings put global http_proxy 192.168.1.2:8080 + +# Clear proxy +adb shell settings put global http_proxy :0 +``` +Savet: U Burp-u povežite listener na 0.0.0.0 tako da uređaji na LAN-u mogu da se povežu (Proxy -> Options -> Proxy Listeners). + +## Na virtuelnoj mašini + +Prvo morate da preuzmete Der sertifikat iz Burp-a. To možete uraditi u _**Proxy**_ --> _**Options**_ --> _**Import / Export CA certificate**_ ![](<../../images/image (367).png>) -**Izvezite sertifikat u Der formatu** i hajde da **transformišemo** to u oblik koji **Android** može da **razume.** Imajte na umu da **da biste konfigurisali burp sertifikat na Android mašini u AVD-u** treba da **pokrenete** ovu mašinu **sa** **`-writable-system`** opcijom.\ +**Export the certificate in Der format** i hajde da ga **transformišemo** u format koji će **Android** moći da **razume.** Imajte na umu da **da biste konfigurisali burp certificate na Android mašini u AVD-u** morate **pokrenuti** tu mašinu **sa** opcijom **`-writable-system`**.\ Na primer, možete je pokrenuti ovako: ```bash C:\Users\\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -http-proxy 192.168.1.12:8080 -writable-system ``` -Zatim, da **konfigurišete burp sertifikat uradite**: +Zatim, da biste **konfigurisali burp sertifikat**, uradite: ```bash openssl x509 -inform DER -in burp_cacert.der -out burp_cacert.pem CERTHASHNAME="`openssl x509 -inform PEM -subject_hash_old -in burp_cacert.pem | head -1`.0" @@ -25,39 +37,43 @@ adb shell mv /sdcard/$CERTHASHNAME /system/etc/security/cacerts/ #Move to correc adb shell chmod 644 /system/etc/security/cacerts/$CERTHASHNAME #Assign privileges adb reboot #Now, reboot the machine ``` -Jednom kada se **mašina ponovo pokrene**, Burp sertifikat će biti u upotrebi! +Once the **machine finish rebooting** the Burp certificate will be in use by it! ## Korišćenje Magisc -Ako ste **rootovali svoj uređaj sa Magisc** (možda emulator), i ne možete da pratite prethodne **korake** za instalaciju Burp certifikata jer je **fajl sistem samo za čitanje** i ne možete ga ponovo montirati kao zapisiv, postoji drugi način. +If you **rooted your device with Magisc** (maybe an emulator), and you **can't follow** the previous **steps** to install the Burp cert because the **filesystem is read-only** and you cannot remount it writable, there is another way. -Objašnjeno u [**ovom videu**](https://www.youtube.com/watch?v=qQicUW0svB8) potrebno je da: +Explained in [**ovaj video**](https://www.youtube.com/watch?v=qQicUW0svB8) you need to: -1. **Instalirate CA sertifikat**: Samo **prevucite i ispustite** DER Burp sertifikat **menjajući ekstenziju** u `.crt` na mobilnom uređaju tako da se sačuva u Downloads folderu i idite na `Instaliraj sertifikat` -> `CA sertifikat` +1. **Install a CA certificate**: Just **drag&drop** the DER Burp certificate **changing the extension** to `.crt` in the mobile so it's stored in the Downloads folder and go to `Install a certificate` -> `CA certificate`
-- Proverite da li je sertifikat ispravno sačuvan odlaskom na `Trusted credentials` -> `USER` +- Check that the certificate was correctly stored going to `Trusted credentials` -> `USER`
-2. **Učinite ga sistemski pouzdanim**: Preuzmite Magisc modul [MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts) (zip fajl), **prevucite i ispustite** ga na telefon, idite na **Magics aplikaciju** na telefonu u sekciju **`Modules`**, kliknite na **`Install from storage`**, izaberite `.zip` modul i nakon instalacije **ponovo pokrenite** telefon: +2. **Neka bude sistemski poveren**: Download the Magisc module [MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts) (a .zip file), **drag&drop it** in the phone, go to the **Magics app** in the phone to the **`Modules`** section, click on **`Install from storage`**, select the `.zip` module and once installed **reboot** the phone:
-- Nakon ponovnog pokretanja, idite na `Trusted credentials` -> `SYSTEM` i proverite da li je Postswigger sertifikat tu +- After rebooting, go to `Trusted credentials` -> `SYSTEM` and check the Postswigger cert is there
-## Post Android 14 +### Naučite kako da kreirate Magisc modul -U najnovijem izdanju Android 14, primećen je značajan pomak u upravljanju sistemski pouzdanim sertifikatima sertifikacione vlasti (CA). Prethodno su ovi sertifikati bili smešteni u **`/system/etc/security/cacerts/`**, dostupni i modifikovani od strane korisnika sa root privilegijama, što je omogućavalo trenutnu primenu širom sistema. Međutim, sa Android 14, lokacija za skladištenje je premestena u **`/apex/com.android.conscrypt/cacerts`**, direktorijum unutar **`/apex`** putanje, koji je po prirodi nepromenljiv. +Check [https://medium.com/@justmobilesec/magisk-for-mobile-pentesting-rooting-android-devices-and-building-custom-modules-part-ii-22badc498437](https://medium.com/@justmobilesec/magisk-for-mobile-pentesting-rooting-android-devices-and-building-custom-modules-part-ii-22badc498437) -Pokušaji ponovnog montiranja **APEX cacerts putanje** kao zapisive se susreću sa neuspehom, jer sistem ne dozvoljava takve operacije. Čak ni pokušaji da se direktorijum odmontira ili preklopi sa privremenim fajl sistemom (tmpfs) ne zaobilaze nepromenljivost; aplikacije i dalje pristupaju originalnim podacima sertifikata bez obzira na promene na nivou fajl sistema. Ova otpornost je rezultat **`/apex`** montiranja koje je konfigurisano sa PRIVATE propagacijom, osiguravajući da bilo kakve izmene unutar **`/apex`** direktorijuma ne utiču na druge procese. +## Posle Android 14 -Inicijalizacija Android-a uključuje `init` proces, koji, prilikom pokretanja operativnog sistema, takođe pokreće Zygote proces. Ovaj proces je odgovoran za pokretanje aplikacionih procesa sa novim montiranim imenskim prostorom koji uključuje privatno **`/apex`** montiranje, čime se izoluje promene u ovom direktorijumu od drugih procesa. +In the latest Android 14 release, a significant shift has been observed in the handling of system-trusted Certificate Authority (CA) certificates. Previously, these certificates were housed in **`/system/etc/security/cacerts/`**, accessible and modifiable by users with root privileges, which allowed immediate application across the system. However, with Android 14, the storage location has been moved to **`/apex/com.android.conscrypt/cacerts`**, a directory within the **`/apex`** path, which is immutable by nature. -Ipak, postoji rešenje za one koji trebaju da modifikuju sistemski pouzdane CA sertifikate unutar **`/apex`** direktorijuma. Ovo uključuje ručno ponovo montiranje **`/apex`** kako bi se uklonila PRIVATE propagacija, čime se omogućava zapisivanje. Proces uključuje kopiranje sadržaja **`/apex/com.android.conscrypt`** na drugo mesto, odmontiranje **`/apex/com.android.conscrypt`** direktorijuma kako bi se eliminisala ograničenja samo za čitanje, a zatim vraćanje sadržaja na njihovu originalnu lokaciju unutar **`/apex`**. Ovaj pristup zahteva brzu akciju kako bi se izbegli padovi sistema. Da bi se osigurala sistemska primena ovih izmena, preporučuje se ponovo pokretanje `system_server`, što efikasno ponovo pokreće sve aplikacije i dovodi sistem u dosledno stanje. +Attempts to remount the **APEX cacerts path** as writable are met with failure, as the system does not allow such operations. Even attempts to unmount or overlay the directory with a temporary file system (tmpfs) do not circumvent the immutability; applications continue to access the original certificate data regardless of changes at the file system level. This resilience is due to the **`/apex`** mount being configured with PRIVATE propagation, ensuring that any modifications within the **`/apex`** directory do not affect other processes. + +The initialization of Android involves the `init` process, which, upon starting the operating system, also initiates the Zygote process. This process is responsible for launching application processes with a new mount namespace that includes a private **`/apex`** mount, thus isolating changes to this directory from other processes. + +Nevertheless, a workaround exists for those needing to modify the system-trusted CA certificates within the **`/apex`** directory. This involves manually remounting **`/apex`** to remove the PRIVATE propagation, thereby making it writable. The process includes copying the contents of **`/apex/com.android.conscrypt`** to another location, unmounting the **`/apex/com.android.conscrypt`** directory to eliminate the read-only constraint, and then restoring the contents to their original location within **`/apex`**. This approach requires swift action to avoid system crashes. To ensure system-wide application of these changes, it is recommended to restart the `system_server`, which effectively restarts all applications and brings the system to a consistent state. ```bash # Create a separate temp directory, to hold the current certificates # Otherwise, when we add the mount we can't read the current certs anymore. @@ -115,28 +131,28 @@ wait # Launched in parallel - wait for completion here echo "System certificate injected" ``` -### Bind-mounting through NSEnter +### Bind-mounting pomoću NSEnter -1. **Postavljanje pisivog direktorijuma**: U početku, pisivi direktorijum se uspostavlja montiranjem `tmpfs` preko postojećeg non-APEX direktorijuma sa sertifikatima sistema. Ovo se postiže sledećom komandom: +1. **Podešavanje direktorijuma sa mogućnošću pisanja**: U početku se uspostavlja direktorijum u koji je moguće pisati tako što se `tmpfs` montira preko postojećeg non-APEX direktorijuma sistemskih sertifikata. To se postiže sledećom komandom: ```bash mount -t tmpfs tmpfs /system/etc/security/cacerts ``` -2. **Priprema CA sertifikata**: Nakon postavljanja upisive direktorijuma, CA sertifikate koje nameravate da koristite treba kopirati u ovaj direktorijum. To može uključivati kopiranje podrazumevanih sertifikata iz `/apex/com.android.conscrypt/cacerts/`. Bitno je prilagoditi dozvole i SELinux oznake ovih sertifikata u skladu s tim. -3. **Bind Mounting za Zygote**: Koristeći `nsenter`, ulazi se u Zygote-ov mount namespace. Zygote, kao proces odgovoran za pokretanje Android aplikacija, zahteva ovaj korak kako bi se osiguralo da sve aplikacije pokrenute od sada koriste novo konfigurisane CA sertifikate. Koristi se komanda: +2. **Priprema CA sertifikata**: Nakon podešavanja direktorijuma za pisanje, CA sertifikati koje želite da koristite treba da budu kopirani u taj direktorijum. Ovo može uključivati kopiranje podrazumevanih sertifikata iz `/apex/com.android.conscrypt/cacerts/`. Neophodno je prilagoditi dozvole i SELinux oznake ovih sertifikata u skladu s tim. +3. **Bind mount za Zygote**: Koristeći `nsenter`, ulazi se u mount namespace Zygote-a. Zygote, proces koji je odgovoran za pokretanje Android aplikacija, zahteva ovaj korak kako bi se osiguralo da sve aplikacije pokrenute ubuduće koriste novo konfigurisane CA sertifikate. Komanda koja se koristi je: ```bash nsenter --mount=/proc/$ZYGOTE_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts ``` -Ovo osigurava da će svaka nova aplikacija koja se pokrene poštovati ažuriranu postavku CA sertifikata. +Ovo obezbeđuje da će svaka nova aplikacija koja se pokrene poštovati ažuriranu konfiguraciju CA sertifikata. -4. **Primena promena na aktivnim aplikacijama**: Da bi se promene primenile na već pokrenutim aplikacijama, `nsenter` se ponovo koristi da uđe u imenski prostor svake aplikacije pojedinačno i izvrši sličan bind mount. Neophodna komanda je: +4. **Primena izmena na već pokrenute aplikacije**: Da biste primenili izmene na aplikacije koje su već pokrenute, ponovo se koristi `nsenter` da se uđe u namespace svake aplikacije pojedinačno i izvrši sličan bind mount. Potrebna komanda je: ```bash nsenter --mount=/proc/$APP_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts ``` -5. **Alternativni pristup - Soft Reboot**: Alternativna metoda uključuje izvođenje bind mount-a na `init` procesu (PID 1) nakon čega sledi soft reboot operativnog sistema sa `stop && start` komandama. Ovaj pristup bi propagirao promene kroz sve namespace-ove, izbegavajući potrebu da se pojedinačno obrađuje svaka pokrenuta aplikacija. Međutim, ova metoda se generalno manje preferira zbog neprijatnosti reboot-a. +5. **Alternativni pristup - Soft Reboot**: Alternativna metoda uključuje izvršavanje bind mount na `init` procesu (PID 1), nakon čega sledi soft reboot operativnog sistema pomoću komandi `stop && start`. Ovaj pristup bi propagirao promene kroz sve namespaces, izbegavajući potrebu da se pojedinačno adresira svaka pokrenuta app. Međutim, ova metoda je generalno manje poželjna zbog neprijatnosti restartovanja. -## References - -- [https://httptoolkit.com/blog/android-14-install-system-ca-certificate/](https://httptoolkit.com/blog/android-14-install-system-ca-certificate/) +## Izvori +- [Android 14: Install a system CA certificate on a rooted device](https://httptoolkit.com/blog/android-14-install-system-ca-certificate/) +- [Build a Repeatable Android Bug Bounty Lab: Emulator vs Magisk, Burp, Frida, and Medusa](https://www.yeswehack.com/learn-bug-bounty/android-lab-mobile-hacking-tools) {{#include ../../banners/hacktricks-training.md}}