Translated ['', 'src/mobile-pentesting/android-app-pentesting/avd-androi

This commit is contained in:
Translator 2025-09-08 01:58:28 +00:00
parent df06e5f98c
commit ba5b4b7a72
5 changed files with 603 additions and 394 deletions

View File

@ -13,17 +13,17 @@ android-applications-basics.md
## ADB (Android Debug Bridge)
Dit is die hoofgereedskap wat jy nodig het om aan 'n Android-toestel te koppel (geëmuleer of fisies).\
**ADB** maak dit moontlik om toestelle te beheer óf oor **USB** óf oor **Network** vanaf 'n rekenaar. Hierdie nutsprogram maak moontlik die **kopiering** van lêers in beide rigtings, **installasie** en **verwydering** van apps, die **uitvoering** van shell-opdragte, die **rugsteun** van data, die **lees** van logs, nevens ander funksies.
Dit is die hoof instrument wat jy nodig het om met 'n Android-toestel (geëmuleer of fisies) te koppel.\
**ADB** maak dit moontlik om toestelle te beheer óf via **USB** óf via **Network** vanaf 'n rekenaar. Hierdie hulpmiddel stel in staat tot die **kopiëring** van lêers in beide rigtings, die **installering** en **verwydering** van apps, die **uitvoering** van shell-opdragte, die **rugsteun** van data, die **lees** van logs, en ander funksies.
Kyk na die volgende lys van [**ADB Commands**](adb-commands.md) om te leer hoe om adb te gebruik.
## Smali
Soms is dit interessant om die **toepassingskode te wysig** om by **verborgen inligting** uit te kom (byv. goed gefluisterde wagwoorde of flags). In daardie geval kan dit sin maak om die APK te dekompileer, die kode te wysig en dit weer te compileer.\
[**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). Dit kan baie nuttig wees as 'n **alternatief vir verskeie toetse tydens die dinamiese analise** wat aangebied gaan word. Hou dus **altyd hierdie moontlikheid in gedagte**.
Soms is dit interessant om die **aansoekkode te wysig** om by **verborge inligting** te kom (miskien goed geobfuskede wagwoorde of flags). Dan kan dit sin maak om die apk te dekompileer, die kode te verander en dit weer te kompileer.\
[**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). Dit kan baie nuttig wees as 'n **alternatief vir verskeie toetse tydens die dynamiese analise** wat aangebied gaan word. Dan, **Hou hierdie moontlikheid altyd in gedagte.**
## Other interesting tricks
## Ander interessante truuks
- [Spoofing your location in Play Store](spoofing-your-location-in-play-store.md)
- [Shizuku Privileged API (ADB-based non-root privileged access)](shizuku-privileged-api.md)
@ -40,7 +40,7 @@ package:/data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
adb pull /data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
```
- Voeg alle splits en base apks saam met [APKEditor](https://github.com/REAndroid/APKEditor):
- Samesmelt alle split- en base-apks met [APKEditor](https://github.com/REAndroid/APKEditor):
```bash
mkdir splits
adb shell pm path com.android.insecurebankv2 | cut -d ':' -f 2 | xargs -n1 -i adb pull {} splits
@ -61,41 +61,41 @@ 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}}
## Statiese Analise
## Statiese Ontleding
Eerstens, om 'n APK te ontleed moet jy **na die Java-kode kyk** met 'n dekompiler.\
Lees asseblief, [**read here to find information about different available decompilers**](apk-decompilers.md).
Eerstens, om 'n APK te analiseer moet jy **'n blik werp op die Java-code** gebruikmakend van 'n decompiler.\
Lees asseblief [**hier vir inligting oor verskillende beskikbare decompilers**](apk-decompilers.md).
### Soek na interessante inligting
Deur net na die **strings** van die APK te kyk, kan jy soek na **passwords**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** keys, **encryption**, **bluetooth uuids**, **tokens** en enigiets interessant... kyk selfs vir code execution **backdoors** of authentication backdoors (hardcoded admin credentials to the app).
Deur net die **strings** van die APK te bekyk kan jy soek na **passwords**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** keys, **encryption**, **bluetooth uuids**, **tokens** en enigiets interessant... kyk selfs vir code execution **backdoors** of authentication backdoors (hardcoded admin credentials in die app).
**Firebase**
Gee besondere aandag aan **firebase URLs** en kontroleer of dit verkeerd gekonfigureer is. [More information about whats is FIrebase and how to exploit it here.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
Gee besondere aandag aan **firebase URLs** en kontroleer of dit verkeerd gekonfigureer is. [Meer inligting oor wat Firebase is en hoe om dit te misbruik vind jy hier.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
### Basiese begrip van die toepassing - Manifest.xml, strings.xml
Die **ondersoek van 'n toepassing se _Manifest.xml_ en **_strings.xml_** lêers kan potensiële sekuriteitskwesbaarhede openbaar**. Hierdie lêers kan met 'n dekompiler gesien word of deur die APK-lêer-uitbreiding na .zip te verander en dit dan uit te pak.
Die **ondersoek van 'n toepassing se _Manifest.xml_ en _strings.xml_ lêers kan potensiële sekuriteitskwesbaarhede openbaar**. Hierdie lêers kan met 'n decompiler verkry word of deur die APK-lêeruitbreiding na .zip te hernoem en dit dan uit te pak.
**Kwesbaarhede** wat uit die **Manifest.xml** geïdentifiseer word sluit in:
**Kwesbaarhede** wat uit die **Manifest.xml** geïdentifiseer kan word sluit in:
- **Debuggable Applications**: Toepassings wat as debuggable (`debuggable="true"`) in die _Manifest.xml_ gestel is, vorm 'n risiko omdat dit verbindings toelaat wat tot uitbuiting kan lei. Vir meer begrip oor hoe om debuggable applications te misbruik, verwys na 'n handleiding oor die vind en uitbuiting van debuggable applications op 'n toestel.
- **Backup Settings**: Die `android:allowBackup="false"` attribuut moet eksplisiet gestel word vir toepassings wat met sensitiewe inligting werk om ongemagtigde data-rugsteun via adb te voorkom, veral wanneer usb debugging geaktiveer is.
- **Network Security**: Custom network security configurations (`android:networkSecurityConfig="@xml/network_security_config"`) in _res/xml/_ kan sekuriteitsbesonderhede soos sertifikaat pins en HTTP-verkeerinstellings spesifiseer. 'n Voorbeeld is om HTTP-verkeer vir spesifieke domeine toe te laat.
- **Exported Activities and Services**: Om exported activities en services in die manifest te identifiseer kan komponente uitwys wat moontlik misbruik kan word. Verdere ontleding tydens dinamiese toetsing kan dui hoe om hierdie komponente uit te buit.
- **Content Providers and FileProviders**: Blootgestelde content providers kan ongemagtigde toegang of wysiging van data toelaat. Die konfigurasie van FileProviders moet ook noukeurig ondersoek word.
- **Broadcast Receivers and URL Schemes**: Hierdie komponente kan gebruik word vir uitbuiting, met besondere aandag aan hoe URL schemes vir invoer-kwesbaarhede bestuur word.
- **SDK Versions**: Die `minSdkVersion`, `targetSDKVersion`, en `maxSdkVersion` attribuute dui die ondersteunde Android weergawes aan, wat die belangrikheid uitlig om nie verouderde, kwesbare Android weergawes te ondersteun nie.
- **Debuggable Applications**: Toepassings wat as debuggable gestel is (`debuggable="true"`) in die _Manifest.xml_ lêer vorm 'n risiko aangesien hulle verbindings toelaat wat tot uitbuiting kan lei. Vir meer begrip oor hoe om debuggable applications uit te buit, verwys na 'n tutorial oor die vind en uitbuiting van debuggable applications op 'n toestel.
- **Backup Settings**: Die attribuut `android:allowBackup="false"` moet duidelik gestel word vir toepassings wat met sensitiewe inligting werk om ongemagtigde datarugsteun via adb te voorkom, veral wanneer usb debugging geaktiveer is.
- **Network Security**: Aangepaste netwerksekuriteitskonfigurasies (`android:networkSecurityConfig="@xml/network_security_config"`) in _res/xml/_ kan sekuriteitsbesonderhede soos sertifikaat-pins en HTTP-verkeerinstellings spesifiseer. 'n Voorbeeld is om HTTP-verkeer vir spesifieke domeine toe te laat.
- **Exported Activities and Services**: Die identifisering van exported activities en services in die manifest kan komponente uitlig wat misbruik kan word. Verdere ontleding tydens dinamiese toetse kan openbaar hoe om hierdie komponente uit te buit.
- **Content Providers and FileProviders**: Blootgestelde content providers kan ongemagtigde toegang of wysiging van data toelaat. Die konfigurasie van FileProviders moet ook deeglik ondersoek word.
- **Broadcast Receivers and URL Schemes**: Hierdie komponente kan gebruik word vir uitbuiting, met spesiale aandag aan hoe URL schemes bestuur word vir invoervulnerability's.
- **SDK Versions**: Die `minSdkVersion`, `targetSDKVersion`, en `maxSdkVersion` atribuutwysers dui die ondersteunde Android-weergawes aan, wat die belangrikheid beklemtoon om verouderde, kwesbare Android-weergawes nie te ondersteun nie.
Uit die **strings.xml** lêer kan sensitiewe inligting soos API keys, custom schemas, en ander ontwikkelaar-aantekeninge gevind word, wat die noodsaaklikheid van 'n noukeurige hersiening van hierdie hulpbronne beklemtoon.
Uit die **strings.xml** lêer kan sensitiewe inligting soos API keys, custom schemas, en ander ontwikkelaarsnotas gevind word, wat die noodsaaklikheid van deeglike hersiening van hierdie hulpbronne beklemtoon.
### Tapjacking
Tapjacking is 'n aanval waar 'n kwaadwillige toepassing geloods word en homself bo 'n slagoffer-toepassing posisioneer. Sodra dit die slagoffer-app sigbaar verberg, is sy gebruikerskoppelvlak so ontwerp om die gebruiker te mislei om daarmee te interaksie, terwyl dit die interaksie aan die slagoffer-app deurgee.\
In werklikheid maak dit die gebruiker blind vir die feit dat hulle eintlik handelinge op die slagoffer-app verrig.
**Tapjacking** is 'n aanval waar 'n **kwaadwillige toepassing** gelanseer word en homself bo-op 'n slagoffer-toepassing posisioneer. Wanneer dit die slagoffer-app visueel bedek, is die gebruikersinterface so ontwerp om die gebruiker te mislei om daarmee te interaksie, terwyl dit die interaksie aan die slagoffer-app deurgee.\
In werklikheid is dit 'n manier om die gebruiker te verblind sodat hulle nie weet dat hulle eintlik aksies op die slagoffer-app uitvoer nie.
Find more information in:
Vind meer inligting in:
{{#ref}}
@ -104,82 +104,82 @@ tapjacking.md
### Task Hijacking
'n **activity** met die **`launchMode`** gestel op **`singleTask` sonder enige `taskAffinity`** gedefinieer is kwesbaar vir Task Hijacking. Dit beteken dat 'n **application** geïnstalleer kan word en as dit voor die regte toepassing geloods word, kan dit die taak van die regte toepassing kap (sodat die gebruiker met die **malicious application** sal interaksie hê en dink hy gebruik die regte een).
'n **Activity** met die **`launchMode`** gestel op **`singleTask` sonder enige `taskAffinity`** gespesifiseer is kwesbaar vir Task Hijacking. Dit beteken dat 'n **toepassing** geïnstalleer kan word en as dit geskakel word voor die werklike toepassing, dit die taak van die werklike toepassing kan **inseël** (sodat die gebruiker met die **kwaadwillige toepassing sal kommunikeer terwyl hy dink hy gebruik die werklike een**).
More info in:
Meer inligting in:
{{#ref}}
android-task-hijacking.md
{{#endref}}
### Onveilige datastooring
### Onveilige datastoor
**Interne berging**
**Internal Storage**
In Android is lêers wat in **internal** storage gestoor word ontwerp om uitsluitlik deur die **app** wat dit geskep het toeganklik te wees. Hierdie sekuriteitsmaatreël word deur die Android-bedryfstelsel afgedwing en is oor die algemeen voldoende vir die sekuriteitsbehoeftes van die meeste toepassings. Ontwikkelaars gebruik egter soms modes soos `MODE_WORLD_READABLE` en `MODE_WORLD_WRITABLE` om lêers tussen verskillende toepassings te deel. Hierdie modes beperk egter nie die toegang tot hierdie lêers deur ander toepassings nie, insluitend moontlik kwaadwillige toepassings.
In Android word lêers wat in **internal** storage gestoor word ontwerp om uitsluitlik deur die app wat dit geskep het toeganklik te wees. Hierdie sekuriteitsmaatreël word deur die Android-bedryfstelsel afgedwing en is gewoonlik voldoende vir die sekuriteitsbehoeftes van meeste toepassings. Ontwikkelaars gebruik soms egter modi soos `MODE_WORLD_READABLE` en `MODE_WORLD_WRITABLE` om lêers **tussen verskillende toepassings te deel**. Hierdie modi **beperk egter nie toegang** tot hierdie lêers deur ander toepassings nie, insluitend moontlik kwaadwillige toepassings.
1. **Statiese Analise:**
- **Maak seker** dat die gebruik van `MODE_WORLD_READABLE` en `MODE_WORLD_WRITABLE` noukeurig ondersoek word. Hierdie modes **kan moontlik lêers blootstel** aan **onbedoelde of ongemagtigde toegang**.
- **Maak seker** dat die gebruik van `MODE_WORLD_READABLE` en `MODE_WORLD_WRITABLE` deeglik ondersoek word. Hierdie modi **kan lêers blootstel** aan onbedoelde of ongemagtigde toegang.
2. **Dinamiese Analise:**
- **Verifieer** die **permissies** wat op lêers geskep deur die app gestel is. Spesifiek, **kontroleer** of enige lêers **gestel is om wêreldwyd leesbaar of skryfbaar te wees**. Dit kan 'n beduidende sekuriteitsrisiko inhou, aangesien dit **enige toepassing** op die toestel, ongeag oorsprong of bedoeling, toelaat om hierdie lêers te **lees of te wysig**.
- **Kontroleer** die **permitte** wat op lêers geskep deur die app gestel is. Spesifiek, **kyk of enige lêers wêreldwyd lees- of skryfbaar gestel is**. Dit kan 'n beduidende sekuriteitsrisiko inhou, aangesien dit enige toepassing op die toestel, ongeag oorsprong of bedoeling, toelaat om hierdie lêers te **lees of te wysig**.
**Eksterne berging**
**External Storage**
Wanneer dit by lêers op **external storage** kom, soos SD Cards, moet sekere voorsorgmaatreëls getref word:
Wanneer jy met lêers op **external storage**, soos SD Cards, werk, moet sekere voorsorgmaatreëls getref word:
1. **Toeganklikheid**:
- Lêers op external storage is **globaal leesbaar en skryfbaar**. Dit beteken enige toepassing of gebruiker kan toegang kry tot hierdie lêers.
- Lêers op external storage is **global leesbaar en skryfbaar**. Dit beteken enige toepassing of gebruiker kan hierdie lêers benader.
2. **Sekuriteitskwessies**:
- Gegewe die maklike toegang, word dit aanbeveel **om nie sensitiewe inligting op external storage te stoor nie**.
- External storage kan verwyder word of deur enige toepassing benader word, wat dit minder veilig maak.
3. **Hantering van data vanaf external storage**:
- Voer altyd **input validation** uit op data wat van external storage verkry word. Dit is kritiek omdat die data van 'n onbetroubare bron kom.
- Dit word sterk ontraden om uitvoerbare of klasklasse op external storage te stoor vir dinamiese lading.
- As jou toepassing verplig is om uitvoerbare lêers van external storage te laai, verseker dat hierdie lêers **gesigneer en kriptografies verifieer** is voordat hulle dinamies gelaai word. Hierdie stap is van kardinale belang vir die instandhouding van die sekuriteitsintegriteit van jou toepassing.
- Gegee die maklike toegang, is dit nie aanbeveel om sensitiewe inligting op external storage te stoor nie.
- External storage kan verwyder of deur enige toepassing bereik word, wat dit minder veilig maak.
3. **Hantering van data vanaf External Storage**:
- Voer altyd **invoer-validasie** uit op data wat van external storage verkry word. Dit is noodsaaklik omdat die data van 'n onbetroubare bron kom.
- Dit word sterk ontried om uitvoerbare of klas-lêers op external storage te stoor vir dinamiese inlaai.
- As jou toepassing executables van external storage moet laai, maak seker dat hierdie lêers **gesigned en kriptografies geverifieer** is voordat hulle dinamies gelaai word. Hierdie stap is belangrik vir die behoud van jou toepassings sekuriteitsintegriteit.
External storage kan in `/storage/emulated/0` , `/sdcard` , `/mnt/sdcard` toeganklik wees
External storage kan toeganklik wees by `/storage/emulated/0` , `/sdcard` , `/mnt/sdcard`
> [!TIP]
> Vanaf Android 4.4 (**API 17**) het die SD-kaart 'n gidsstruktuur wat die toegang van 'n app beperk tot die gids wat spesifiek vir daardie app is. Dit voorkom dat kwaadwillige toepassings lees- of skryftoegang tot 'n ander app se lêers verkry.
> Beginnend met Android 4.4 (**API 17**), het die SD-kaart 'n gidsstruktuur wat **toegang vanaf 'n app beperk tot die gids wat spesifiek vir daardie app is**. Dit voorkom dat kwaadwillige toepassings lees- of skryf toegang tot 'n ander app se lêers kry.
**Gevoelige data in duidelike teks gestoor**
**Sensitiewe data in plainteks gestoor**
- **Shared preferences**: Android laat elke toepassing toe om maklik xml-lêers in die paadjie `/data/data/<packagename>/shared_prefs/` te stoor en soms is dit moontlik om sensitiewe inligting in duidelike teks in daardie gids te vind.
- **Databases**: Android laat elke toepassing toe om maklik sqlite-databasislêers in die paadjie `/data/data/<packagename>/databases/` te stoor en soms is dit moontlik om sensitiewe inligting in duidelike teks in daardie gids te vind.
- **Shared preferences**: Android laat elke toepassing toe om maklik xml-lêers te stoor in die pad `/data/data/<packagename>/shared_prefs/` en soms is dit moontlik om sensitiewe inligting in plainteks in daardie vouer te vind.
- **Databases**: Android laat elke toepassing toe om maklik sqlite databases te stoor in die pad `/data/data/<packagename>/databases/` en soms is dit moontlik om sensitiewe inligting in plainteks in daardie vouer te vind.
### Gebroke TLS
**Aanvaar alle sertifikate**
**Accept All Certificates**
Om een of ander rede aanvaar ontwikkelaars soms alle sertifikate selfs al stem byvoorbeeld die hostname nie ooreen nie, met reëls van kode soos die volgende:
Om 'n of ander rede aanvaar ontwikkelaars soms alle sertifikate selfs al stem die hostname byvoorbeeld nie ooreen nie met reëls van kode soos die volgende een:
```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.
'n Goeie manier om dit te toets is om te probeer om die verkeer vas te vang met 'n proxy soos Burp sonder om die Burp CA binne die toestel te magtig. Ook, jy kan met Burp 'n sertifikaat genereer vir 'n ander hostname en dit gebruik.
### Gebroke Kryptografie
### Gebroke Kriptografie
**Swak Sleutelbestuursprosesse**
**Slegte sleutelbestuursprosesse**
Sommige ontwikkelaars stoor sensitiewe data in die plaaslike berging en enkripteer dit met n sleutel wat in die kode hardgekap of voorspelbaar is. Dit behoort nie so te gebeur nie aangesien reversing n aanvaller kan toelaat om die vertroulike inligting te onttrek.
Sommige ontwikkelaars stoor sensitiewe data in die plaaslike berging en enkripteer dit met 'n sleutel wat hardcoded/voorspelbaar in die kode is. Dit behoort nie gedoen te word nie aangesien sommige reversing 'n aanvaller kan toelaat om die vertroulike inligting te onttrek.
**Gebruik van Onveilige en/of Verouderde Algoritmes**
**Gebruik van onseker en/of verouderde algoritmes**
Ontwikkelaars behoort nie **deprecated algorithms** te gebruik om authorisation **checks**, **store** of **send** data uit te voer nie. Sommige van hierdie algoritmes is: RC4, MD4, MD5, SHA1... Indien **hashes** byvoorbeeld gebruik word om wagwoorde te stoor, moet hashes wat brute-force bestand is met salt gebruik word.
Ontwikkelaars behoort nie **verouderde algoritmes** te gebruik om outorisasie **kontroles** uit te voer, data te **stoor** of te **stuur** nie. Sommige van hierdie algoritmes is: RC4, MD4, MD5, SHA1... As **hashes** byvoorbeeld gebruik word om wagwoorde te stoor, moet **brute-force-weerstandige** hashes saam met 'n salt gebruik word.
### Ander kontroles
- Dit word aanbeveel om die APK te **obfuskeer** om die reverse-engineer se werk vir aanvalers moeiliker te maak.
- As die app sensitief is (soos bankapps), behoort dit sy **eie kontroles te doen om te sien of die mobiel geroot is** en dienooreenkomstig op te tree.
- As die app sensitief is (soos bankapps), behoort dit te kontroleer of n **emulator** gebruik word.
- As die app sensitief is (soos bankapps), behoort dit **sy eie integriteit te kontroleer voordat dit uitgevoer word** om te kyk of dit gewysig is.
- Gebruik [**APKiD**](https://github.com/rednaga/APKiD) om te kyk watter compiler/packer/obfuscator gebruik is om die APK te bou
- Dit word aanbeveel om die **APK te obfuskeer** om die reverse engineer se werk vir aanvallers moeiliker te maak.
- As die app sensitief is (soos bank apps), behoort dit sy **eie kontroles uit te voer om te sien of die mobiele toestel geroot is** en dienooreenkomstig op te tree.
- As die app sensitief is (soos bank apps), behoort dit te kontroleer of 'n **emulator** gebruik word.
- As die app sensitief is (soos bank apps), behoort dit **sy eie integriteit te kontroleer voor uitvoering** om na te gaan of dit gewysig is.
- Gebruik [**APKiD**](https://github.com/rednaga/APKiD) om te kontroleer watter compiler/packer/obfuscator gebruik is om die APK te bou
### React Native Application
Read the following page to learn how to easily access javascript code of React applications:
Lees die volgende bladsy om te leer hoe om maklik toegang tot die JavaScript-kode van React-toepassings te kry:
{{#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:
Lees die volgende bladsy om te leer hoe om maklik toegang tot C#-kode van 'n xamarin-toepassing te kry:
{{#ref}}
@ -197,17 +197,17 @@ Read the following page to learn how to easily access C# code of a xamarin appli
### Superpacked Applications
Volgens hierdie [**blog post**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) is superpacked n Meta-algoritme wat die inhoud van n toepassing in n enkele lêer saamdruk. Die blog beskryf die moontlikheid om n app te skep wat hierdie tipe apps kan dekomprimeer... en n vinniger manier wat behels om die **application te execute en die decompressed files vanaf die filesystem te versamel.**
Volgens hierdie [**blog post**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) is superpacked 'n Meta-algoritme wat die inhoud van 'n toepassing in 'n enkele lêer saamdruk. Die blog bespreek die moontlikheid om 'n app te skep wat hierdie tipe apps dekomprimeer... en 'n vinniger manier wat behels om die **toepassing uit te voer en die gedekomprimeerde lêers van die lêerstelsel te versamel.**
### Geautomatiseerde Statiese Kode-analise
### Automated Static Code Analysis
Die tool [**mariana-trench**](https://github.com/facebook/mariana-trench) is in staat om **vulnerabilities** te vind deur die **code** van die toepassing te **scan**. Hierdie tool bevat n reeks **known sources** (wat die tool aandui watter **places** die **input** deur die gebruiker beheer word), **sinks** (wat die tool aandui **dangerous** **places** waar malisieuse gebruikersinvoer skade kan veroorsaak) en **rules**. Hierdie rules dui die **kombinasie** van **sources-sinks** aan wat op n vulnerability dui.
Die hulpmiddel [**mariana-trench**](https://github.com/facebook/mariana-trench) is in staat om **kwesbaarhede** te vind deur die **kode** van die toepassing te **scan**. Hierdie hulpmiddel bevat 'n reeks **known sources** (wat die tool aandui watter **plekke** die **input** deur die gebruiker beheer word), **sinks** (wat die tool aandui **gevaarlike** **plekke** waar kwaadwillige gebruikerinput skade kan veroorsaak) en **rules**. Hierdie reëls dui die **kombinasie** van **sources-sinks** aan wat 'n kwesbaarheid aandui.
Met hierdie kennis, **mariana-trench sal die kode hersien en moontlike vulnerabilities daarin vind.**
Met hierdie kennis **sal mariana-trench die kode hersien en moontlike kwesbaarhede daarin vind**.
### Secrets leaked
n Toepassing mag geheimenisse (API keys, passwords, hidden urls, subdomains...) daarin hê wat jy moontlik kan ontdek. Jy kan n tool gebruik soos [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks)
'n Toepassing kan secrets (API keys, passwords, hidden urls, subdomains...) daarin hê wat jy moontlik kan ontdek. Jy kan 'n hulpmiddel soos [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks) gebruik.
### Bypass Biometric Authentication
@ -218,9 +218,9 @@ bypass-biometric-authentication-android.md
### Ander interessante funksies
- **Code execution**: `Runtime.exec(), ProcessBuilder(), native code:system()`
- **Send SMSs**: `sendTextMessage, sendMultipartTestMessage`
- **Native functions** declared as `native`: `public native, System.loadLibrary, System.load`
- **Kode-uitvoering**: `Runtime.exec(), ProcessBuilder(), native code:system()`
- **Stuur SMS'e**: `sendTextMessage, sendMultipartTestMessage`
- **Native functions** gedeclareer as `native`: `public native, System.loadLibrary, System.load`
- [Read this to learn **how to reverse native functions**](reversing-native-libraries.md)
### **Other tricks**
@ -234,215 +234,223 @@ content-protocol.md
---
## Dynamic Analysis
## Dinamiese Analise
> Eerstens het jy n omgewing nodig waar jy die toepassing en al die omgewing (Burp CA cert, Drozer en Frida hoofsaaklik) kan installeer. Daarom word n gerootte toestel (emulated of nie) uiters aanbeveel.
> Eerstens, jy het 'n omgewing nodig waar jy die toepassing en al die omgewing (Burp CA cert, Drozer en Frida hoofsaaklik) kan installeer. Daarom word 'n rooted toestel (geëmuleer of nie) uiters aanbeveel.
### Online Dynamic analysis
### Aanlyn dinamiese analise
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.
Jy kan 'n **gratis rekening** skep by: [https://appetize.io/](https://appetize.io). Hierdie platform laat jou toe om APKs te **upload** en **uit te voer**, wat nuttig is om te sien hoe 'n apk optree.
You can even **see the logs of your application** in the web and connect through **adb**.
Jy kan selfs **die logs van jou toepassing** in die web sien en via **adb** koppel.
![](<../../images/image (831).png>)
Thanks to the ADB connection you can use **Drozer** and **Frida** inside the emulators.
Dankie aan die ADB-verbinding kan jy **Drozer** en **Frida** binne die emulators gebruik.
### Plaaslike Dinamiese Analise
### Lokale dinamiese analise
#### Using an emulator
#### Gebruik van 'n emulator
- [**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) (Jy kan **x86** en **arm** toestelle skep, en volgens [**this** ](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**laatste x86** weergawes **support ARM libraries** sonder om 'n stadige arm emulator te benodig).
- Leer om dit op te stel op hierdie bladsy:
{{#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/) **(Gratis weergawe:** Personal Edition, jy moet 'n rekening skep. _Dit word aanbeveel om die weergawe **MET**_ _**VirtualBox** af te laai om potensiële foute te vermy._)
- [**Nox**](https://es.bignox.com) (Gratis, maar dit ondersteun nie Frida of Drozer nie).
> [!TIP]
> Wanneer jy n nuwe emulator op enige platform skep, onthou dat hoe groter die skerm is, hoe stadiger sal die emulator loop. Kies dus klein skerms indien moontlik.
> Wanneer jy 'n nuwe emulator op enige platform skep, onthou dat hoe groter die skerm is, hoe stadiger sal die emulator loop. Kies dus, indien moontlik, klein skerms.
To **install google services** (like AppStore) in Genymotion you need to click on the red marked button of the following image:
Om **google services** (soos AppStore) in Genymotion te **installeer** moet jy op die rooi gemerkte knoppie in die volgende beeld klik:
![](<../../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).
Let ook daarop dat jy in die **konfigurasie van die Android VM in Genymotion** die **Bridge Network mode** kan kies (dit sal nuttig wees as jy van 'n ander VM met die toolle wil koppel).
#### Gebruik n fisiese toestel
#### Gebruik 'n fisiese toestel
Jy moet die **debugging** opsies aktiveer en dit sal goed wees as jy dit kan **root**:
1. **Settings**.
2. (FromAndroid 8.0) Select **System**.
3. Select **About phone**.
4. Press **Build number** 7 times.
5. Go back and you will find the **Developer options**.
2. (FromAndroid 8.0) Kies **System**.
3. Kies **About phone**.
4. Druk **Build number** 7 keer.
5. Gaan terug en jy sal die **Developer options** vind.
> Sodra jy die toepassing geïnstalleer het, is die eerste ding wat jy moet doen om dit te probeer en ondersoek wat dit doen, hoe dit werk en gemaklik daarmee te raak.\
> Ek stel voor om hierdie aanvanklike dinamiese analise met MobSF dynamic analysis + pidcat uit te voer, sodat ons kan **leer hoe die toepassing werk** terwyl MobSF baie **interesting** **data** vang wat jy later kan hersien.
> Sodra jy die toepassing geïnstalleer het, is die eerste ding wat jy moet doen om dit te probeer en ondersoek wat dit doen, hoe dit werk en gemaklik te raak daarmee.\
> Ek stel voor om **hierdie aanvanklike dinamiese analise met MobSF dynamic analysis + pidcat** uit te voer, sodat ons kan **leer hoe die toepassing werk** terwyl MobSF 'n hele paar **interessante** **data** vasvang wat jy later kan nagaan.
### Unintended Data Leakage
Magisk/Zygisk vinnige notas (aanbeveel op Pixel-toestelle)
- Patch boot.img with the Magisk app and flash via fastboot to get systemless root
- Enable Zygisk + DenyList for root hiding; consider LSPosed/Shamiko when stronger hiding is required
- Keep original boot.img to recover from OTA updates; re-patch after each OTA
- For screen mirroring, use scrcpy on the host
**Logging**
Ontwikkelaars moet versigtig wees om nie **debugging information** publiek bloot te stel nie, aangesien dit sensitiewe data leaks kan veroorsaak. Die tools [**pidcat**](https://github.com/JakeWharton/pidcat) en `adb logcat` word aanbeveel om toepassingslogs te monitor om sensitiewe inligting te identifiseer en te beskerm. **Pidcat** word verkies vir die eenvoud en leesbaarheid.
### Onbedoelde Data-lekkasie
**Logregistrasie**
Ontwikkelaars moet versigtig wees om **debugging-inligting** publiek bloot te stel, aangesien dit tot sensitiewe data leak kan lei. Die gereedskap [**pidcat**](https://github.com/JakeWharton/pidcat) en `adb logcat` word aanbeveel om aansoeklogs te monitor om sensitiewe inligting te identifiseer en te beskerm. **Pidcat** word verkies vir sy gebruiksgemak en leesbaarheid.
> [!WARNING]
> Neem kennis dat vanaf **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**.
> Let daarop dat vanaf **later newer than Android 4.0**, **applications are only able to access their own logs**. Dus kan toepassings nie ander apps se logs toegang nie.\
> Dit word tog steeds aanbeveel om **nie sensitiewe inligting te log nie**.
**Copy/Paste Buffer Caching**
Android se **clipboard-based** raamwerk maak copy-paste funksionaliteit in apps moontlik, maar vorm n risiko aangesien **other applications** die clipboard kan **access**, wat sensitiewe data moontlik blootstel. Dit is belangrik om copy/paste funksies vir sensitiewe gedeeltes van n toepassing, soos kredietkaartbesonderhede, uit te skakel om data leaks te voorkom.
Android se **clipboard-gebaseerde** raamwerk verskaf copy-paste funksionaliteit in apps, maar dit bied 'n risiko aangesien **ander toepassings** die clipboard kan **toeganklik maak**, wat potensieel sensitiewe data kan blootstel. Dit is belangrik om copy/paste funksies vir sensitiewe gedeeltes van 'n toepassing, soos kredietkaartbesonderhede, te deaktiveer om data leak te voorkom.
**Crash Logs**
As n toepassing **crash** en logs stoor, kan daardie logs aanvallers help, veral wanneer die toepassing nie gerestreer kan word nie. Om hierdie risiko te beperk, moet jou nie op crashes log nie, en as logs oor die netwerk gestuur moet word, verseker dat hulle via n SSL-kanaal gestuur word vir sekuriteit.
As 'n toepassing **crash** en logs stoor, kan hierdie logs aanvallers help, veral wanneer die toepassing nie gerugsteek kan word nie. Om hierdie risiko te versag, moenie log by crashes nie, en as logs oor die netwerk gestuur moet word, maak seker dat dit via 'n SSL-kanaal gestuur word vir veiligheid.
As pentester, **probeer om na hierdie logs te kyk**.
As pentester, **try to take a look to these logs**.
**Analytics Data Sent To 3rd Parties**
Toepassings integreer dikwels dienste soos Google Adsense, wat per ongeluk sensitiewe data kan **leak** as gevolg van onvanpaste implementering deur ontwikkelaars. Om moontlike data leaks te identifiseer, is dit raadsaam om die toepassing se verkeer te onderskep en te kyk of enige sensitiewe inligting na derdepartye gestuur word.
Toepassings integreer dikwels dienste soos Google Adsense, wat per ongeluk sensitiewe data kan leak weens onbehoorlike implementering deur ontwikkelaars. Om potensiële data leaks te identifiseer, is dit raadsaam om die toepassing se verkeer te onderskep en te kontroleer of enige sensitiewe inligting aan derdepartye gestuur word.
### SQLite DBs
Die meeste toepassings sal **internal SQLite databases** gebruik om inligting te stoor. Tydens die pentest kyk na die **databases** wat geskep is, die name van **tables** en **columns** en al die **data** wat gestoor is, want jy kan **sensitive information** vind (wat n vulnerability sou wees).\
Databases behoort te wees in `/data/data/the.package.name/databases` soos `/data/data/com.mwr.example.sieve/databases`
Die meeste toepassings sal **interne SQLite-databasisse** gebruik om inligting te stoor. Tydens die pentest neem 'n **kyk** na die **databasisse** wat geskep is, die name van **tabelle** en **kolomme** en al die **data** wat gestoor is omdat jy sensitiewe inligting kan vind (wat 'n kwesbaarheid sou wees).\
Databasisse behoort geleë te wees in `/data/data/the.package.name/databases` soos `/data/data/com.mwr.example.sieve/databases`
As die database vertroulike inligting stoor en is **encrypted** maar jy kan die **password** binne die toepassing **vind**, is dit steeds n **vulnerability**.
As die databasis vertroulike inligting stoor en **geënkripteer is** maar jy die **wagwoord** binne die toepassing kan **vind**, is dit steeds 'n **kwesbaarheid**.
Lys die tables met `.tables` en lys die kolomme van die tables met `.schema <table_name>`
Eunumerateer die tabelle met `.tables` en enumereer die kolomme van die tabelle deur `.schema <table_name>`
### 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 Androids Inter-Process Communication (IPC) mechanism and interact with the underlying operating system. .\
Drozer is n nuttige tool om **exploit exported activities, exported services and Content Providers** te doen soos jy in die volgende afdelings sal leer.
Van [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** laat jou toe om die **rol van 'n Android app aan te neem** en met ander apps te interaksie. Dit kan **enige iets doen wat 'n geïnstalleerde aansoek kan doen**, soos gebruik maak van Android se Inter-Process Communication (IPC) meganisme en met die onderliggende bedryfstelsel interakteer. .\
Drozer is 'n nuttige hulpmiddel om **exported activities, exported services and Content Providers** te exploit soos jy in die volgende afdelings sal leer.
### Exploiting exported Activities
[**Read this if you want to refresh what is an Android Activity.**](android-applications-basics.md#launcher-activity-and-other-activities)\
Onthou ook dat die kode van n activity begin in die **`onCreate`** metode.
Onthou ook dat die kode van 'n activity in die **`onCreate`** metode begin.
**Authorisation bypass**
**Outorisasie-omseiling**
Wanneer n Activity exported is, kan jy sy skerm vanaf n eksterne app aanroep. Daarom, as n activity met **sensitive information** **exported** is, kan jy die **authentication** meganismes **bypass** om toegang daartoe te kry.
Wanneer 'n Activity geëksporteer is, kan jy sy skerm van 'n eksterne app oproep. Dus, as 'n activity met **sensitiewe inligting** **geëksporteer** is, kan jy die **verifikasie** meganismes **omseil** om toegang daartoe te kry.
[**Learn how to exploit exported activities with Drozer.**](drozer-tutorial/index.html#activities)
You can also start an exported activity from adb:
Jy kan ook 'n geëksporteerde activity vanaf adb begin:
- PackageName is com.example.demo
- Exported ActivityName is com.example.test.MainActivity
```bash
adb shell am start -n com.example.demo/com.example.test.MainActivity
```
**LET OP**: MobSF sal die gebruik van _**singleTask/singleInstance**_ as `android:launchMode` in 'n activity as kwaadwillig bespeur, maar weens [hierdie](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), lyk dit of dit slegs gevaarlik is op ou weergawes (API versions < 21).
**NOTE**: MobSF sal die gebruik van _**singleTask/singleInstance**_ as `android:launchMode` in 'n activity as kwaadwillig bespeur, maar weens [this](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), blyk dit slegs gevaarlik te wees op ou weergawes (API weergawes < 21).
> [!TIP]
> Neem kennis dat 'n authorisation bypass nie altyd 'n vulnerability is nie; dit hang af van hoe die bypass werk en watter inligting blootgestel word.
> Let wel dat 'n authorisation bypass nie altyd 'n kwesbaarheid is nie; dit hang af van hoe die bypass werk en watter inligting blootgestel word.
**Sensitive information leakage**
**Lekkasie van sensitiewe inligting**
**Activities can also return results**. As jy daarin slaag om 'n exported en unprotected activity te vind wat die **`setResult`** metode aanroep en **sensitive information** teruggee, is daar 'n sensitive information leakage.
**Aktiwiteite kan ook resultate teruggee**. As jy 'n geëksporteerde en onbeskermde aktiwiteit vind wat die **`setResult`**-metode aanroep en **sensitiewe inligting teruggee**, is daar 'n lekkasie van sensitiewe inligting.
#### Tapjacking
As Tapjacking nie voorkom word nie, kan jy die exported activity misbruik om die **gebruiker** onverwagte aksies te laat uitvoer. Vir meer inligting oor [**what is Tapjacking follow the link**](#tapjacking).
Indien tapjacking nie voorkom word nie, kan jy die geëksporteerde aktiwiteit misbruik om die **gebruiker onvoorsiene aksies te laat uitvoer**. Vir meer inligting oor [**what is Tapjacking follow the link**](#tapjacking).
### Exploiting Content Providers - Accessing and manipulating sensitive information
### Uitbuiting van Content Providers - Toegang tot en manipulasie van sensitiewe inligting
[**Lees dit as jy jou kennis oor wat 'n Content Provider is wil opfris.**](android-applications-basics.md#content-provider)\
Content providers word hoofsaaklik gebruik om **data te deel**. As 'n app beskikbare Content Providers het, kan jy dalk sensitiewe data daaruit onttrek. Dit is ook belangrik om moontlike **SQL injections** en **Path Traversals** te toets aangesien hulle kwesbaar kan wees.
[**Read this if you want to refresh what is a Content Provider.**](android-applications-basics.md#content-provider)\
Content providers word hoofsaaklik gebruik om **data te deel**. As 'n app beskikbare content providers het, kan jy dalk **sensitiewe data** daaruit onttrek. Dit is ook belangrik om moontlike **SQL injections** en **Path Traversals** te toets aangesien hulle kwesbaar kan wees.
[**Leer hoe om Content Providers met Drozer te exploit.**](drozer-tutorial/index.html#content-providers)
[**Learn how to exploit Content Providers with Drozer.**](drozer-tutorial/index.html#content-providers)
### **Exploiting Services**
[**Lees dit as jy jou kennis oor wat 'n Service is wil opfris.**](android-applications-basics.md#services)\
[**Read this if you want to refresh what is a Service.**](android-applications-basics.md#services)\
Onthou dat die aksies van 'n Service begin in die metode `onStartCommand`.
'n Service is basies iets wat **data kan ontvang**, dit kan **verwerk** en (al dan nie) 'n reaksie **teruggee**. Dus, as 'n toepassing sekere services exporteer, moet jy die **code** nagaan om te verstaan wat dit doen en dit **dinamies** toets om vertroulike inligting te onttrek, authentication measures te bypass, ens.\
[**Leer hoe om Services met Drozer te exploit.**](drozer-tutorial/index.html#services)
'n Service is basies iets wat **data kan ontvang**, dit kan **verwerk** en (al dan nie) 'n reaksie **teruggee**. As 'n toepassing dus sommige services eksporteer, moet jy die **kode** nagaan om te verstaan wat dit doen en dit **dinamies** toets om vertroulike inligting te onttrek en authentication-maatreëls te bypass...\
[**Learn how to exploit Services with Drozer.**](drozer-tutorial/index.html#services)
### **Exploiting Broadcast Receivers**
[**Lees dit as jy jou kennis oor wat 'n Broadcast Receiver is wil opfris.**](android-applications-basics.md#broadcast-receivers)\
[**Read this if you want to refresh what is a Broadcast Receiver.**](android-applications-basics.md#broadcast-receivers)\
Onthou dat die aksies van 'n Broadcast Receiver begin in die metode `onReceive`.
'n Broadcast Receiver sal wag vir 'n tipe boodskap. Afhangend van hoe die receiver die boodskap hanteer, kan dit kwesbaar wees.\
[**Leer hoe om Broadcast Receivers met Drozer te exploit.**](#exploiting-broadcast-receivers)
'n Broadcast Receiver sal wag vir 'n tipe boodskap. Afhangende daarvan hoe die receiver die boodskap hanteer, kan dit kwesbaar wees.\
[**Learn how to exploit Broadcast Receivers with Drozer.**](#exploiting-broadcast-receivers)
### **Exploiting Schemes / Deep links**
Jy kan handmatig na deep links soek, met hulpmiddels soos MobSF of scripts soos [this one](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\
Jy kan 'n gedeklareerde **scheme** oopmaak met **adb** of 'n **browser**:
Jy kan handmatig na deep links kyk deur gereedskap soos MobSF of skripte soos [this one](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\
Jy kan 'n verklaarde **scheme** oopmaak met **adb** of 'n **browser**:
```bash
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
```
_Let wel dat jy die **package name** kan weglaat en die mobiele toestel outomaties die app sal oproep wat daardie skakel behoort oop te maak._
_Let wel dat jy die **package name** kan weglaat en die mobiele toestel sal outomaties die app oproep wat daardie skakel moet oopmaak._
```html
<!-- Browser regular link -->
<a href="scheme://hostname/path?param=value">Click me</a>
<!-- fallback in your url you could try the intent url -->
<a href="intent://hostname#Intent;scheme=scheme;package=your.package.name;S.browser_fallback_url=http%3A%2F%2Fwww.example.com;end">with alternative</a>
```
**Uitgevoerde kode**
**Code executed**
Om die **kode wat in die App uitgevoer sal word** te vind, gaan na die activity wat deur die deeplink aangeroep word en soek die funksie **`onNewIntent`**.
In order to find the **code that will be executed in the App**, go to the activity called by the deeplink and search the function **`onNewIntent`**.
![](<../../images/image (436) (1) (1) (1).png>)
**Sensitiewe inligting**
**Gevoelige inligting**
Elke keer as jy 'n deep link vind, kontroleer dat **dit nie sensitiewe data (soos wagwoorde) via URL-parameters ontvang nie**, want enige ander toepassing kan **die deep link naboots en daardie data steel!**
Elke keer as jy 'n deep link vind, kontroleer dat i**t nie sensitiewe data (soos wagwoorde) via URL-parameters ontvang nie**, want enige ander aansoek kan die **deep link naboots en daardie data steel!**
**Parameters in pad**
**Parameters in path**
Jy **moet ook nagaan of enige deep link 'n parameter binne die pad** van die URL gebruik soos: `https://api.example.com/v1/users/{username}`, in daardie geval kan jy 'n path traversal afdwing deur toegang te verkry soos: `example://app/users?username=../../unwanted-endpoint%3fparam=value`.\
Let daarop dat as jy die korrekte endpoints binne die toepassing vind, jy moontlik 'n **Open Redirect** kan veroorsaak (as 'n deel van die pad as domeinnaam gebruik word), **account takeover** (as jy gebruikersbesonderhede kan wysig sonder 'n CSRF token en die vuln endpoint die korrekte metode gebruik) en enige ander vuln. More [info about this here](http://dphoeniixx.com/2020/12/13-2/).
Jy **moet ook nagaan of 'n deep link 'n parameter binne die pad gebruik** van die URL soos: `https://api.example.com/v1/users/{username}` , in daardie geval kan jy 'n path traversal afdwing deur iets soos te benader: `example://app/users?username=../../unwanted-endpoint%3fparam=value` .\
Let daarop dat as jy die korrekte endpoints binne die toepassing vind, jy 'n **Open Redirect** kan veroorsaak (as deel van die pad as domeinnaam gebruik word), **account takeover** (as jy gebruikersdetail kan wysig sonder 'n CSRF-token en die kwesbare endpoint die korrekte metode gebruik) en enige ander kwetsbaarheid. More [info about this here](http://dphoeniixx.com/2020/12/13-2/).
**Meer voorbeelde**
**More examples**
'n [interesting bug bounty report](https://hackerone.com/reports/855618) oor links (_/.well-known/assetlinks.json_).
### Inspeksie van die vervoerslaag en verifikasie-foute
### Transport Layer Inspection and Verification Failures
- **Sertifikate word nie altyd behoorlik ondersoek nie** deur Android-toepassings. Dit is algemeen dat hierdie toepassings waarskuwings ignoreer en self-ondertekende sertifikate aanvaar of, in sommige gevalle, terugval na die gebruik van HTTP-verbindinge.
- **Onderhandelinge tydens die SSL/TLS-handshake is soms swak**, en gebruik onveilige cipher suites. Hierdie kwesbaarheid maak die verbinding kwesbaar vir man-in-the-middle (MITM)-aanvalle, wat aanvallers toelaat om die data te ontsleutel.
- **Leakage of private information** is 'n risiko wanneer toepassings met veilige kanale verifieer, maar dan oor onveilige kanale kommunikeer vir ander transaksies. Hierdie benadering beskerm nie sensitiewe data, soos sessie-cookies of gebruikersbesonderhede, teen onderskep deur kwaadwilliges nie.
- **Sertifikate word nie altyd behoorlik deur Android-toepassings geïnspekteer nie.** Dit is algemeen dat hierdie toepassings waarskuwings ignoreer en self-signed certificates aanvaar of soms terugval op HTTP-verbindinge.
- **Onderhandelinge tydens die SSL/TLS-handshake is soms swak**, en gebruik onveilige cipher suites. Hierdie kwesbaarheid maak die verbinding vatbaar vir man-in-the-middle (MITM) aanvalle, wat aanvalle in staat stel om die data te ontsleutel.
- **Leakage of private information** is 'n risiko wanneer toepassings met veilige kanale autentiseer maar daarna oor nie-veilige kanale vir ander transaksies kommunikeer. Hierdie benadering beskerm nie sensitiewe data, soos session cookies of gebruikersdetails, teen onderskeping deur kwaadwilliges nie.
#### Sertifikaatverifikasie
#### Certificate Verification
Ons sal fokus op **sertifikaatverifikasie**. Die integriteit van die bediener se sertifikaat moet geverifieer word om veiligheid te verbeter. Dit is noodsaaklik omdat onveilige TLS-konfigurasies en die oordrag van sensitiewe data oor onversleutelde kanale groot risiko's kan inhou. For detailed steps on verifying server certificates and addressing vulnerabilities, [**this resource**](https://manifestsecurity.com/android-application-security-part-10/) provides comprehensive guidance.
Ons fokus op **certificate verification**. Die integriteit van die bediener se sertifikaat moet geverifieer word om sekuriteit te verbeter. Dit is noodsaaklik omdat onveilige TLS-konfigurasies en die oordrag van sensitiewe data oor onversleutelde kanale beduidende risiko's kan skep. Vir gedetailleerde stappe oor die verifiëring van bedienersertifikate en die aanspreek van kwesbaarhede, verskaf [**this resource**](https://manifestsecurity.com/android-application-security-part-10/) omvattende leiding.
#### SSL Pinning
SSL Pinning is 'n sekuriteitsmaatreël waar die toepassing die bediener se sertifikaat vergelyk met 'n bekende kopie wat binne die toepassing self gestoor is. Hierdie metode is noodsaaklik om MITM-aanvalle te voorkom. Dit word sterk aanbeveel om SSL Pinning te implementeer vir toepassings wat sensitiewe inligting hanteer.
SSL Pinning is 'n sekuriteitsmaatreël waar die toepassing die bediener se sertifikaat verifieer teen 'n bekende kopie wat binne die toepassing self gestoor is. Hierdie metode is noodsaaklik om MITM-aanvalle te voorkom. Implementering van SSL Pinning word sterk aanbeveel vir toepassings wat sensitiewe inligting hanteer.
#### Verkeersinspeksie
#### Traffic Inspection
Om HTTP-verkeer te inspekteer, is dit nodig om **die proxy-gereedskap se sertifikaat te installeer** (bv. Burp). Sonder hierdie sertifikaat mag versleutelde verkeer nie deur die proxy sigbaar wees nie. Vir 'n gids oor die installering van 'n pasgemaakte CA-sertifikaat, [**click here**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
Om HTTP-verkeer te inspekteer, is dit nodig om **die proxy-tool se sertifikaat te installeer** (bv. Burp). Sonder om hierdie sertifikaat te installeer, mag versleutelde verkeer nie deur die proxy sigbaar wees nie. Vir 'n gids oor die installering van 'n pasgemaakte CA-sertifikaat, [**click here**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
Toepassings wat mik op **API Level 24 and above** vereis wysigings aan die Network Security Config om die proxy se CA-sertifikaat te aanvaar. Hierdie stap is kritiek om versleutelde verkeer te inspekteer. For instructions on modifying the Network Security Config, [**refer to this tutorial**](make-apk-accept-ca-certificate.md).
Toepassings wat **API Level 24 and above** mik, vereis wysigings aan die Network Security Config om die proxy se CA-sertifikaat te aanvaar. Hierdie stap is kritiek vir die inspeksie van versleutelde verkeer. Vir instruksies oor die wysiging van die Network Security Config, verwys na [**refer to this tutorial**](make-apk-accept-ca-certificate.md).
If **Flutter** is being used you need to to follow the instructions in [**this page**](flutter.md). This is becasue, just adding the certificate into the store won't work as Flutter has its own list of valid CAs.
As **Flutter** gebruik word, moet jy die instruksies op [**this page**](flutter.md) volg. Dit is omdat bloot om die sertifikaat by die store te voeg nie sal werk nie aangesien Flutter sy eie lys van geldige CAs het.
#### Statiese opsporing van SSL/TLS pinning
#### Static detection of SSL/TLS pinning
Voordat jy runtime-bypasses probeer, karteer vinnig waar pinning in die APK afgedwing word. Statiese ontdekking help jou om hooks/patches te beplan en op die regte kodepade te fokus.
Voordat jy runtime-bypasses probeer, maak vinnig 'n kaart van waar pinning in die APK afgedwing word. Statische ontdekking help jou om hooks/patches te beplan en fokus op die regte kodepaaie.
Tool: SSLPinDetect
- Open-source statiese-analise nutsmiddel wat die APK na Smali decompileer (via apktool) en skandeer vir gekurateerde regex-patrone van SSL/TLS pinning-implementasies.
- Rapporteer die presiese lêerpad, reëlnommer en 'n kodefragment vir elke ooreenkoms.
- Dek gewone frameworks en pasgemaakte kodepade: OkHttp CertificatePinner, custom javax.net.ssl.X509TrustManager.checkServerTrusted, SSLContext.init with custom TrustManagers/KeyManagers, and Network Security Config XML pins.
- Open-source static-analysis utility wat die APK na Smali dekompileer (via apktool) en scan vir gekurarde regex-patrone van SSL/TLS pinning-implementasies.
- Rapporteer presiese lêerpad, reëlnommer, en 'n kode-snippet vir elke trefffer.
- Dek algemene raamwerke en aangepaste kodepaaie: OkHttp CertificatePinner, custom javax.net.ssl.X509TrustManager.checkServerTrusted, SSLContext.init with custom TrustManagers/KeyManagers, en Network Security Config XML pins.
Install
- Vereistes: Python >= 3.8, Java on PATH, apktool
- Prereqs: Python >= 3.8, Java on PATH, apktool
```bash
git clone https://github.com/aancw/SSLPinDetect
cd SSLPinDetect
@ -457,7 +465,7 @@ python sslpindetect.py -f app.apk -a apktool.jar
python sslpindetect.py -a apktool_2.11.0.jar -f sample/app-release.apk -v
```
Voorbeeld patroonreëls (JSON)
Gebruik of brei signatures uit om proprietêre/aangepaste pinning-styls te ontdek. Jy kan jou eie JSON laai en op skaal skandeer.
Gebruik of brei signatures uit om proprietêre/aangepaste pinning-styles op te spoor. Jy kan jou eie JSON laai en op groot skaal skandeer.
```json
{
"OkHttp Certificate Pinning": [
@ -471,55 +479,55 @@ Gebruik of brei signatures uit om proprietêre/aangepaste pinning-styls te ontde
]
}
```
Notas en wenke
- Vinnige skandering van groot apps via multi-threading en memory-mapped I/O; vooraf-gecompileerde regex verminder overhead en valse positiewe.
Notes and tips
- Vinnige skandering op groot apps deur multi-threading en memory-mapped I/O; vooraf-gecompileerde regex verminder overhead/vals positiewe.
- Pattern collection: https://github.com/aancw/smali-sslpin-patterns
- Tipiese detectiedoelwitte om volgende te triage:
- OkHttp: CertificatePinner gebruik, setCertificatePinner, okhttp3/okhttp pakketverwysings
- Aangepaste TrustManagers: javax.net.ssl.X509TrustManager, checkServerTrusted overrides
- Aangepaste SSL contexts: SSLContext.getInstance + SSLContext.init met aangepaste managers
- Deklaratiewe pinne in res/xml network security config en manifestverwysings
- Gebruik die ooreenstemmende plekke om Frida hooks, statiese patches, of config-resensies te beplan voor dinamiese toetsing.
- Tipiese deteksiedoelwitte om volgende te triage:
- OkHttp: CertificatePinner usage, setCertificatePinner, okhttp3/okhttp package references
- Custom TrustManagers: javax.net.ssl.X509TrustManager, checkServerTrusted overrides
- Custom SSL contexts: SSLContext.getInstance + SSLContext.init with custom managers
- Declarative pins in res/xml network security config and manifest references
- Gebruik die ooreenstemmende lokasies om Frida hooks, static patches, of config reviews te beplan voordat dynamic testing.
#### Om SSL Pinning te omseil
#### Omseiling van SSL Pinning
Wanneer SSL Pinning geïmplementeer is, word dit nodig om dit te omseil om HTTPS-verkeer te ondersoek. Verskeie metodes is beskikbaar vir hierdie doel:
Wanneer SSL Pinning geïmplementeer is, word dit nodig om dit te omseil om HTTPS-verkeer te inspekteer. Verskeie metodes is beskikbaar vir hierdie doel:
- Automatically **modify** the **apk** to **bypass** SSLPinning with [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). The best pro of this option, is that you won't need root to bypass the SSL Pinning, but you will need to delete the application and reinstall the new one, and this won't always work.
- Automatically **modify** the **apk** to **bypass** SSLPinning with [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Die grootste voordeel van hierdie opsie is dat jy nie root sal benodig om die SSL Pinning te omseil nie, maar jy sal die toepassing moet verwyder en die nuwe een moet herinstalleer, en dit sal nie altyd werk nie.
- You could use **Frida** (discussed below) to bypass this protection. Here you have a guide to use 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/)
- Jy kan ook probeer om **outomaties SSL Pinning te omseil** using [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
- Jy kan ook probeer om **outomaties SSL Pinning te omseil** using **MobSF dynamic analysis** (explained below)
- If you still think that there is some traffic that you aren't capturing you can try to **forward the traffic to burp using iptables**. Read this blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
- Jy kan ook probeer om **automatically bypass SSL Pinning** met behulp van [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
- Jy kan ook probeer om **automatically bypass SSL Pinning** met behulp van **MobSF dynamic analysis** (explained below)
- As jy steeds dink daar is verkeer wat jy nie vasvang nie, kan jy probeer om die verkeer na burp te **forward** met behulp van iptables. Lees hierdie blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
#### Op soek na Algemene web-kwesbaarhede
#### Soek na algemene web kwesbaarhede
Dit is belangrik om ook na algemene web-kwesbaarhede binne die toepassing te soek. Gedetaileerde inligting oor die identifisering en mitigering van hierdie kwesbaarhede val buite die bestek van hierdie samevatting, maar word elders uitvoerig behandel.
Dit is belangrik om ook na algemene web kwesbaarhede binne die toepassing te soek. Gedetailleerde inligting oor die identifisering en versagting van hierdie kwesbaarhede val buite die omvang van hierdie samevatting, maar word elders uitgebreid behandel.
### Frida
[Frida](https://www.frida.re) is 'n dinamiese instrumenteringspakket vir ontwikkelaars, reverse-engineers, en sekuriteitsnavorsers.\
**Jy kan toegang kry tot 'n lopende toepassing en metodes hook tydens runtime om die gedrag te verander, waardes te wysig, waardes uit te trek, ander kode uit te voer...**\
As jy Android-toepassings wil pentest jy moet weet hoe om Frida te gebruik.
[Frida](https://www.frida.re) is 'n dinamiese instrumentasie toolkit vir ontwikkelaars, reverse-engineers, en sekuriteitsnavorsers.\
**You can access running application and hook methods on run time to change the behaviour, change values, extract values, run different code...**\
As jy Android-toepassings wil pentest, moet jy weet hoe om Frida te gebruik.
- Leer hoe om Frida te gebruik: [**Frida tutorial**](frida-tutorial/index.html)
- Sommmige "GUI" vir aksies met Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
- Ojection is great to automate the use of Frida: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
- You can find some Awesome Frida scripts here: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
- Some "GUI" for actions with Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
- Ojection is goed om die gebruik van Frida te outomatiseer: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
- Jy kan 'n paar Awesome Frida scripts hier vind: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
- Probeer om anti-debugging / anti-frida meganismes te omseil deur Frida te laai soos aangedui in [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) (tool [linjector](https://github.com/erfur/linjector-rs))
#### Anti-instrumentation & SSL pinning bypass workflow
#### Anti-instrumentasie & SSL pinning omseil werkvloei
{{#ref}}
android-anti-instrumentation-and-ssl-pinning-bypass.md
{{#endref}}
### **Dump Geheue - Fridump**
### **Geheue dump - Fridump**
Kontroleer of die toepassing sensitiewe inligting in die geheue stoor wat dit nie behoort te stoor nie, soos wagwoorde of mnemonics.
Met [**Fridump3**](https://github.com/rootbsd/fridump3) kan jy die geheue van die app dump met:
Using [**Fridump3**](https://github.com/rootbsd/fridump3) you can dump the memory of the app with:
```bash
# With PID
python3 fridump3.py -u <PID>
@ -528,63 +536,63 @@ python3 fridump3.py -u <PID>
frida-ps -Uai
python3 fridump3.py -u "<Name>"
```
Dit sal die geheue in die ./dump-gids dump, en daarbinne kan jy met grep iets soos:
Dit sal die geheue in die ./dump-gids aflaai, en daar kan jy met iets soos grep deursoek:
```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]+$"
```
### **Sensitiewe data in Keystore**
In Android is die Keystore die beste plek om sensitiewe data te stoor, maar met genoeg privileges is dit steeds **moontlik om toegang daartoe te kry**. Aangesien toepassings geneig is om hier **sensitiewe data in onversleutelde teks** te stoor, behoort pentests dit as root user te kontroleer, aangesien iemand met fisiese toegang tot die toestel hierdie data kan steel.
In Android is die Keystore die beste plek om sensitiewe data te stoor, maar met genoeg voorregte is dit steeds **moontlik om daartoe toegang te kry**. Aangesien toepassings hier geneig is om **sensitiewe data in platte teks** te stoor, behoort pentests dit te ondersoek, aangesien 'n root user of iemand met fisiese toegang tot die toestel hierdie data kan steel.
Selfs as 'n app data in die Keystore stoor, moet die data versleuteld wees.
Selfs as 'n app data in die keystore gestoor het, behoort die data versleuteld te wees.
Om toegang tot die data binne die Keystore te kry, kan jy hierdie Frida-script gebruik: [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)
Om toegang tot die data binne die keystore te kry, kan jy hierdie Frida script gebruik: [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**
Met die volgende Frida-skrip kan dit moontlik wees om die **bypass fingerprint authentication** wat Android-toepassings dalk uitvoer om sekere sensitiewe gebiede te beskerm:
Met die volgende Frida script kan dit moontlik wees om die **bypass fingerprint authentication** wat Android-toepassings gebruik om sekere sensitiewe gebiede te beskerm, uit te voer:
```bash
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>
```
### **Agtergrondbeelde**
Wanneer jy 'n toepassing in die agtergrond plaas, stoor Android 'n **snapshot van die toepassing** sodat wanneer dit weer na die voorgrond herstel word, dit die beeld begin laai voordat die app self laai, sodat dit lyk asof die app vinniger gelaai is.
Wanneer jy 'n toepassing op die agtergrond plaas, stoor Android 'n **snapshot van die toepassing**, sodat wanneer dit na die voorgrond herstel word, dit die beeld begin laai voor die app, sodat dit lyk asof die app vinniger gelaai is.
Indien hierdie snapshot egter **sensitiewe inligting** bevat, kan iemand met toegang tot die snapshot daardie inligting **steel** (let daarop dat jy root nodig het om daartoe toegang te kry).
As hierdie snapshot egter **sensitiewe inligting** bevat, kan iemand met toegang tot die snapshot daardie inligting **steel** (let daarop dat jy root benodig om daartoe toegang te kry).
Die snapshots word gewoonlik gestoor by: **`/data/system_ce/0/snapshots`**
Android bied 'n manier om die **skermskootvaslegging te voorkom deur die FLAG_SECURE** layout-parameter te stel. Deur hierdie vlag te gebruik, word die vensterinhoud as veilig beskou, wat verhoed dat dit in skermskote verskyn of op nie-veilige skerms besigtig word.
Android bied 'n manier om die **screenshot capture te voorkom deur die FLAG_SECURE layout-parameter te stel**. Deur hierdie vlag te gebruik, word die vensterinhoud as veilig beskou, wat verhoed dat dit in screenshots verskyn of op nie-beveiligde skerms besigtig word.
```bash
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
```
### **Android Application Analyzer**
Hierdie hulpmiddel kan jou help om verskillende gereedskap tydens dinamiese ontleding te bestuur: [https://github.com/NotSoSecure/android_application_analyzer](https://github.com/NotSoSecure/android_application_analyzer)
Hierdie instrument kan jou help om verskillende gereedskap tydens dinamiese analise te bestuur: [https://github.com/NotSoSecure/android_application_analyzer](https://github.com/NotSoSecure/android_application_analyzer)
### Intent Injection
Ontwikkelaars skep dikwels proxy-komponente soos activities, services, en broadcast receivers wat hierdie Intents hanteer en dit aan metodes soos `startActivity(...)` of `sendBroadcast(...)` deurgee, wat riskant kan wees.
Ontwikkelaars skep dikwels proxy-komponente soos activities, services en broadcast receivers wat hierdie Intents hanteer en dit aan metodes soos `startActivity(...)` of `sendBroadcast(...)` deurgee, wat riskant kan wees.
Die gevaar lê daarin om aanvallers toe te laat om nie-geëxporteerde app-komponente te aktiveer of sensitiewe content providers te bekom deur hierdie Intents verkeerd te lei. 'n Noemenswaardige voorbeeld is die `WebView` komponent wat URL's na `Intent`-objekte omskakel via `Intent.parseUri(...)` en dit dan uitvoer, wat moontlik tot kwaadwillige Intent-inspuitings kan lei.
Die gevaar lê daarin om aanvallers toe te laat om non-exported app-komponente te aktiveer of toegang tot sensitiewe content providers te kry deur hierdie Intents verkeerd te rig. n Noemenswaardige voorbeeld is die `WebView`-komponent wat URL's na `Intent`-objekte omskakel via `Intent.parseUri(...)` en dit dan uitvoer, wat moontlik kan lei tot kwaadwillige Intent-inspuitings.
### Essential Takeaways
### Essensiële punte
- **Intent Injection** is soortgelyk aan die web se Open Redirect-kwessie.
- Eksploite behels die deurgee van `Intent`-objekte as extras, wat herlei kan word om onveilige operasies uit te voer.
- Dit kan nie-geëxporteerde komponente en content providers aan aanvallers blootstel.
- `WebView` se URL-naar-`Intent` omskakeling kan onbedoelde aksies vergemaklik.
- Exploits behels die deurgee van `Intent`-objekte as extras, wat omgerig kan word om onveilige operasies uit te voer.
- Dit kan non-exported komponente en content providers voor aanvallers openbaar maak.
- `WebView` se URL-na-`Intent` omskakeling kan onverwagte aksies vergemaklik.
### Android Client Side Injections and others
Jy ken waarskynlik hierdie soort kwesbaarhede van die web. Jy moet besonder versigtig wees met hierdie kwesbaarhede in 'n Android-applikasie:
Jy ken waarskynlik hierdie soort kwesbaarhede vanaf die web. Jy moet besondere sorg toepas met hierdie kwesbaarhede in n Android-toepassing:
- **SQL Injection:** Wanneer jy met dinamiese navrae of Content-Providers werk, verseker dat jy parameterized queries gebruik.
- **JavaScript Injection (XSS):** Verifieer dat JavaScript en Plugin support gedeaktiveer is vir enige WebViews (gedeaktiveer per verstek). [Meer inligting hier](webview-attacks.md#javascript-enabled).
- **Local File Inclusion:** WebViews moet toegang tot die lêerstelsel gedeaktiveer hê (geaktiveer per verstek) - `(webview.getSettings().setAllowFileAccess(false);)`. [Meer inligting hier](webview-attacks.md#javascript-enabled).
- **Eternal cookies**: In verskeie gevalle wanneer die Android-applikasie die sessie beëindig, word die cookie nie herroep nie of dit kan selfs op die skyf gestoor word
- **SQL Injection:** Wanneer jy met dinamiese navrae of Content-Providers werk, maak seker dat jy geparameteriseerde navrae gebruik.
- **JavaScript Injection (XSS):** Verify that JavaScript and Plugin support is disabled for any WebViews (disabled by default). [More info here](webview-attacks.md#javascript-enabled).
- **Local File Inclusion:** WebViews should have access to the file system disabled (enabled by default) - `(webview.getSettings().setAllowFileAccess(false);)`. [More info here](webview-attacks.md#javascript-enabled).
- **Eternal cookies**: In verskeie gevalle, wanneer die Android-toepassing die sessie beëindig, word die cookie nie ingetrek nie of dit kan selfs na skyf gestoor word
- [**Secure Flag** in cookies](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags)
---
@ -593,11 +601,11 @@ Jy ken waarskynlik hierdie soort kwesbaarhede van die web. Jy moet besonder vers
### [MobSF](https://github.com/MobSF/Mobile-Security-Framework-MobSF)
**Static analysis**
**Statiese ontleding**
![](<../../images/image (866).png>)
**Kwetsbaarheidsevaluering van die toepassing** met 'n netjiese web-gebaseerde frontend. Jy kan ook dinamiese ontleding uitvoer (maar jy moet die omgewing voorberei).
**Kwetsbaarheidsevaluering van die toepassing** wat n netjiese webgebaseerde frontend gebruik. Jy kan ook dinamiese analise doen (maar jy moet die omgewing voorberei).
```bash
docker pull opensecurity/mobile-security-framework-mobsf
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
@ -609,39 +617,39 @@ MobSF also allows you to **diff/Compare** analysis and to integrate **VirusTotal
### Geassisteerde dinamiese analise met MobSF
**MobSF** kan ook baie nuttig wees vir **dynamic analysis** in **Android**, maar in daardie geval sal jy MobSF en **genymotion** op jou host moet installeer (a VM or Docker won't work). _Note: You need to **start first a VM in genymotion** and **then MobSF.**_\
**MobSF** kan ook baie nuttig wees vir **dinamiese analise** op **Android**, maar in daardie geval moet jy MobSF en **genymotion** op jou gasheer installeer (a VM or Docker won't work). _Note: You need to **start first a VM in genymotion** and **then MobSF.**_\
Die **MobSF dynamic analyser** kan:
- **Dump application data** (URLs, logs, clipboard, screenshots made by you, screenshots made by "**Exported Activity Tester**", emails, SQLite databases, XML files, and other created files). All of this is done automatically except for the screenshots, you need to press when you want a screenshot or you need to press "**Exported Activity Tester**" to obtain screenshots of all the exported activities.
- Capture **HTTPS traffic**
- Use **Frida** to obtain **runtime** **information**
- **Dump application data** (URLs, logs, clipboard, skermskote gemaak deur jou, skermskote gemaak deur "**Exported Activity Tester**", e-posse, SQLite databases, XML-lêers, en ander geskepte lêers). Dit gebeur alles outomaties behalwe vir die skermskote — jy moet die knoppie druk wanneer jy 'n skermskoot wil hê of jy moet "**Exported Activity Tester**" druk om skermskote van alle geëksporteerde aktiwiteite te verkry.
- Vang **HTTPS** verkeer
- Gebruik **Frida** om **runtime** **information** te verkry
From android **versions > 5**, it will **automatically start Frida** and will set global **proxy** settings to **capture** traffic. It will only capture traffic from the tested application.
**Frida**
By default, it will also use some Frida Scripts to **bypass SSL pinning**, **root detection** and **debugger detection** and to **monitor interesting APIs**.\
MobSF can also **invoke exported activities**, grab **screenshots** of them and **save** them for the report.
MobSF kan ook **invoke exported activities**, neem **screenshots** daarvan en **save** dit vir die verslag.
To **start** the dynamic testing press the green bottom: "**Start Instrumentation**". Press the "**Frida Live Logs**" to see the logs generated by the Frida scripts and "**Live API Monitor**" to see all the invocation to hooked methods, arguments passed and returned values (this will appear after pressing "Start Instrumentation").\
MobSF also allows you to load your own **Frida scripts** (to send the results of your Friday scripts to MobSF use the function `send()`). It also has **several pre-written scripts** you can load (you can add more in `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), just **select them**, press "**Load**" and press "**Start Instrumentation**" (you will be able to see the logs of that scripts inside "**Frida Live Logs**").
MobSF also allows you to load your own **Frida scripts** (to send the results of your Frida scripts to MobSF use the function `send()`). It also has **several pre-written scripts** you can load (you can add more in `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), just **select them**, press "**Load**" and press "**Start Instrumentation**" (you will be able to see the logs of that scripts inside "**Frida Live Logs**").
![](<../../images/image (419).png>)
Moreover, you have some Auxiliary Frida functionalities:
- **Enumerate Loaded Classes**: It will print all the loaded classes
- **Capture Strings**: It will print all the capture strings while using the application (super noisy)
- **Capture String Comparisons**: Could be very useful. It will **show the 2 strings being compared** and if the result was True or False.
- **Enumerate Class Methods**: Put the class name (like "java.io.File") and it will print all the methods of the class.
- **Search Class Pattern**: Search classes by pattern
- **Trace Class Methods**: **Trace** a **whole class** (see inputs and outputs of all methods of th class). Remember that by default MobSF traces several interesting Android Api methods.
- **Enumerate Loaded Classes**: Dit sal al die gelaaide klasse uitdruk
- **Capture Strings**: Dit sal al die capture strings uitdruk terwyl die toepassing gebruik word (baie lawaaierig)
- **Capture String Comparisons**: Kan baie nuttig wees. Dit sal **show the 2 strings being compared** en of die resultaat True of False was.
- **Enumerate Class Methods**: Sit die klasnaam (soos "java.io.File") in en dit sal al die metodes van die klas druk.
- **Search Class Pattern**: Soek klasse per patroon
- **Trace Class Methods**: **Trace** 'n **whole class** (sien insette en uitsette van alle metodes van die klas). Onthou dat MobSF standaard verskeie interessante Android Api-metodes trace.
Once you have selected the auxiliary module you want to use you need to press "**Start Intrumentation**" and you will see all the outputs in "**Frida Live Logs**".
**Shell**
Mobsf also brings you a shell with some **adb** commands, **MobSF commands**, and common **shell** **commands** at the bottom of the dynamic analysis page. Some interesting commands:
MobSF bied ook 'n shell aan met sommige **adb** commands, **MobSF commands**, en algemene **shell** **commands** onderaan die dinamiese analise bladsy. Sommige interessante opdragte:
```bash
help
shell ls
@ -652,13 +660,13 @@ receivers
```
**HTTP gereedskap**
Wanneer HTTP-verkeer vasgevang word, kan jy 'n lelike weergawe van die vasgevang verkeer sien onder die "**HTTP(S) Traffic**" knoppie of 'n netter uitsig by die groen "**Start HTTPTools**" knoppie. Vanaf die tweede opsie kan jy die **vasgevang versoeke** **stuur** na **proxies** soos Burp of Owasp ZAP.\
Om dit te doen, _power on Burp -->_ _turn off Intercept --> in MobSB HTTPTools select the request_ --> press "**Send to Fuzzer**" --> _select the proxy address_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)).
Wanneer http-verkeer vasgelê word, kan jy 'n lelike weergawe van die vasgelêde verkeer sien op "**HTTP(S) Traffic**" knop of 'n netter weergawe via die groen knop "**Start HTTPTools**". Vanaf die tweede opsie kan jy die **captured requests** na **proxies** soos Burp of Owasp ZAP stuur.
Om dit te doen, _skakel Burp aan -->_ _skakel Intercept af --> in MobSB HTTPTools kies die request_ --> druk "**Send to Fuzzer**" --> _kies die proxy adres_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)).
Sodra jy die dinamiese analise met MobSF voltooi het, kan jy op "**Start Web API Fuzzer**" druk om **http versoeke te fuzz** en na kwesbaarhede te soek.
Sodra jy die dynamic analysis met MobSF voltooi het, kan jy op "**Start Web API Fuzzer**" klik om **fuzz http requests** en na vulnerabilities te soek.
> [!TIP]
> Na die uitvoering van 'n dinamiese analise met MobSF kan die proxy-instellings verkeerd gekonfigureer wees en jy sal dit nie vanuit die GUI kan regstel nie. Jy kan die proxy-instellings regmaak deur die volgende te doen:
> Na die uitvoering van 'n dynamic analysis met MobSF kan die proxy-instellings verkeerd gekonfigureer raak en sal jy dit nie vanuit die GUI kan regstel nie. Jy kan die proxy-instellings regstel deur:
>
> ```
> adb shell settings put global http_proxy :0
@ -666,18 +674,18 @@ Sodra jy die dinamiese analise met MobSF voltooi het, kan jy op "**Start Web API
### Assisted Dynamic Analysis with Inspeckage
Jy kan die tool kry by [**Inspeckage**](https://github.com/ac-pm/Inspeckage).\
Hierdie tool gebruik sekere **Hooks** om jou te wys **wat in die toepassing gebeur** terwyl jy 'n **dinamiese analise** uitvoer.
Jy kan die tool kry by [**Inspeckage**](https://github.com/ac-pm/Inspeckage).
Hierdie tool gebruik sommige **Hooks** om jou te wys **wat in die toepassing gebeur** terwyl jy 'n **dynamic analysis** uitvoer.
### [Yaazhini](https://www.vegabird.com/yaazhini/)
Dit is 'n **geweldige tool om statiese analise met 'n GUI uit te voer**
Dit is 'n **geweldige hulpmiddel om static analysis met 'n GUI uit te voer**
![](<../../images/image (741).png>)
### [Qark](https://github.com/linkedin/qark)
Hierdie tool is ontwerp om te soek na verskeie **sekuriteitsverwante Android application vulnerabilities**, hetsy in **source code** of in **packaged APKs**. Die tool is ook **capable of creating a "Proof-of-Concept" deployable APK** en **ADB commands**, om sommige van die gevonde kwesbaarhede uit te buit (Exposed activities, intents, tapjacking...). Soos met Drozer, is daar geen behoefte om die toetsapparaat te root nie.
Hierdie tool is ontwerp om verskeie **security related Android application vulnerabilities** op te spoor, hetsy in **source code** of **packaged APKs**. Die tool is ook **capable of creating a "Proof-of-Concept" deployable APK** and **ADB commands**, om sommige van die gevonde vulnerabilities te exploit (Exposed activities, intents, tapjacking...). Soos met Drozer, is daar geen behoefte om die toets-toestel te root nie.
```bash
pip3 install --user qark # --user is only needed if not using a virtualenv
qark --apk path/to/my.apk
@ -687,7 +695,7 @@ qark --java path/to/specific/java/file.java
### [**ReverseAPK**](https://github.com/1N3/ReverseAPK.git)
- Wys alle uitgehaalde lêers vir maklike verwysing
- Dekompileer APK-lêers outomaties na Java- en Smali-formaat
- Decompileer APK-lêers outomaties na Java- en Smali-formaat
- Ontleed AndroidManifest.xml vir algemene kwesbaarhede en gedrag
- Statiese bronkode-analise vir algemene kwesbaarhede en gedrag
- Toestelinligting
@ -697,9 +705,9 @@ reverse-apk relative/path/to/APP.apk
```
### [SUPER Android Analyzer](https://github.com/SUPERAndroidAnalyzer/super)
SUPER is 'n command-line application wat op Windows, MacOS X en Linux gebruik kan word en _.apk_ lêers ontleed op soek na kwesbaarhede. Dit doen dit deur APKs te dekomprimeer en 'n reeks reëls toe te pas om daardie kwesbaarhede op te spoor.
SUPER is 'n command-line-toepassing wat op Windows, MacOS X en Linux gebruik kan word, en wat _.apk_-lêers ontleed op soek na kwesbaarhede. Dit doen dit deur APKs te dekomprimeer en 'n reeks reëls toe te pas om daardie kwesbaarhede op te spoor.
Alle reëls is gesentreer in 'n `rules.json`-lêer, en elke maatskappy of toetser kan sy eie reëls skep om te analiseer wat hulle nodig het.
Alle reëls is in 'n `rules.json`-lêer gesentreer, en elke maatskappy of toetser kan hul eie reëls skep om te ontleed wat hulle benodig.
Laai die nuutste binaries af vanaf die [download page](https://superanalyzer.rocks/download.html)
```
@ -711,15 +719,15 @@ super-analyzer {apk_file}
StaCoAn is 'n **crossplatform** hulpmiddel wat ontwikkelaars, bugbounty hunters en ethical hackers help om [static code analysis](https://en.wikipedia.org/wiki/Static_program_analysis) op mobiele toepassings uit te voer.
Die konsep is dat jy jou mobiele toepassingslêer (.apk of .ipa lêer) op die StaCoAn-toepassing sleep en laat val, en dit sal 'n visuele en draagbare verslag vir jou genereer. Jy kan die instellings en wordlists aanpas om 'n aangepaste ervaring te kry.
Die konsep is dat jy jou mobiele toepassingslêer (n .apk of .ipa-lêer) op die StaCoAn-toepassing sleep en los, en dit sal vir jou 'n visuele en draagbare verslag genereer. Jy kan die instellings en wordlists aanpas om 'n aangepaste ervaring te kry.
Download[ latest release](https://github.com/vincentcox/StaCoAn/releases):
Laai af[ latest release](https://github.com/vincentcox/StaCoAn/releases):
```
./stacoan
```
### [AndroBugs](https://github.com/AndroBugs/AndroBugs_Framework)
AndroBugs Framework is 'n Android kwesbaarheidsanalise-stelsel wat ontwikkelaars of hackers help om potensiële sekuriteitskwesbaarhede in Android-toepassings te vind.\
AndroBugs Framework is 'n Android kwesbaarheids-analise stelsel wat ontwikkelaars of hackers help om potensiële sekuriteitskwesbaarhede in Android-toepassings op te spoor.\
[Windows releases](https://github.com/AndroBugs/AndroBugs_Framework/releases)
```
python androbugs.py -f [APK file]
@ -727,9 +735,9 @@ androbugs.exe -f [APK file]
```
### [Androwarn](https://github.com/maaaaz/androwarn)
**Androwarn** is 'n hulpmiddel waarvan die hoofdoel is om die gebruiker te identifiseer en te waarsku oor potensieel kwaadwillige gedrag wat deur 'n Android-toepassing uitgevoer word.
**Androwarn** is 'n hulpmiddel wat hoofsaaklik daarop gemik is om potensieel kwaadwillige gedrag wat deur 'n Android-toepassing ontwikkel is, op te spoor en die gebruiker daaroor te waarsku.
Die opsporing word uitgevoer deur die **static analysis** van die aansoek se Dalvik bytecode, voorgestel as **Smali**, met die [`androguard`](https://github.com/androguard/androguard) biblioteek.
Die deteksie word uitgevoer deur middel van die **static analysis** van die toepassing se Dalvik bytecode, voorgestel as **Smali**, met die [`androguard`](https://github.com/androguard/androguard) biblioteek.
Hierdie hulpmiddel soek na **algemene gedrag van "slegte" toepassings** soos: Telephony identifiers exfiltration, Audio/video flow interception, PIM data modification, Arbitrary code execution...
```
@ -739,60 +747,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. Dit is 'n hulpmiddel wat algemeen gebruikte mobile application reverse engineering- en analysis-tools bymekaar sit om te help met die toetsing van mobiele toepassings teen OWASP mobile security threats. Dit het ten doel om hierdie taak makliker en gebruikersvriendelik te maak vir mobile application developers en security professionals.
**MARA** is a **M**obile **A**pplication **R**everse engineering and **A**nalysis Framework. Dit is 'n instrument wat algemeen gebruikte mobile application reverse engineering- en analysis-gereedskap saamvoeg om te help met die toetsing van mobiele toepassings teen die OWASP mobile security threats. Die doel is om hierdie taak makliker en vriendeliker te maak vir mobiele toepassings-ontwikkelaars en sekuriteitsprofessionals.
It is able to:
Dit kan:
- Ekstraheer Java en Smali kode using different tools
- Analiseer 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)
- Ekstraheer privaat inligting uit die APK using regexps.
- Analiseer die Manifest.
- Analiseer gevonde domeine using: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) and [whatweb](https://github.com/urbanadventurer/WhatWeb)
- Deobfuskeer APK via [apk-deguard.com](http://www.apk-deguard.com)
- Haal Java- en Smali-kode uit met verskillende gereedskap
- Ontleed 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)
- Haal privaat inligting uit die APK met behulp van regexps.
- Ontleed die Manifest.
- Ontleed gevonde domeine 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)
### Koodous
Nuttig om malware op te spoor: [https://koodous.com/](https://koodous.com)
Useful to detect malware: [https://koodous.com/](https://koodous.com)
## Obfuskering/Deobfuskering van kode
## Obfuscating/Deobfuscating code
Let wel dat, afhangend van die diens en konfigurasie wat gebruik word om die kode te obfuskeer, geheime moontlik wel of nie obfuskering ondergaan nie.
Let wel: afhangend van die diens en konfigurasie wat jy gebruik om die kode te obfuskeer, mag geheime wel of nie obfuskeer wees nie.
### [ProGuard](<https://en.wikipedia.org/wiki/ProGuard_(software)>)
Van [Wikipedia](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **ProGuard** is 'n open source command-line tool wat Java-kode verklein, optimaliseer en obfuskeer. Dit kan bytecode optimaliseer asook ongebruikte instruksies opspoor en verwyder. ProGuard is vrye sagteware en word versprei onder die GNU General Public License, version 2.
From [Wikipedia](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **ProGuard** is 'n open source command-line tool wat Java-kode verklein, optimaliseer en obfuskeer. Dit kan bytecode optimaliseer sowel as ongebruikte instruksies opspoor en verwyder. ProGuard is vrye sagteware en word versprei onder die GNU General Public License, version 2.
ProGuard word as deel van die Android SDK versprei en hardloop wanneer die toepassing in release mode gebou word.
ProGuard word as deel van die Android SDK versprei en loop wanneer die toepassing in release mode gebou word.
### [DexGuard](https://www.guardsquare.com/dexguard)
Vind 'n stap-vir-stap gids om die apk te deobfuskeer by [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
Find a step-by-step guide to deobfuscate the apk in [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
(From that guide) Laas toe ons nagaan, was die Dexguard mode of operation:
(From that guide) Die laaste keer toe ons gekyk het, was die Dexguard mode of operation:
- 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.
- laai 'n resource as 'n InputStream;
- voer die resultaat na 'n klas wat van FilterInputStream erf om dit te ontsleutel;
- doen 'n paar nuttelose obfuskasies om 'n paar minute van 'n reverser se tyd te mors;
- voer die ontsleutelde resultaat na 'n ZipInputStream om 'n DEX file te kry;
- laastens laai die resulterende DEX as 'n Resource using die `loadDex` method.
### [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.**
Jy kan 'n obfuskeerde APK na hul platform oplaai.
Jy kan 'n obfuskeerede APK na hul platform oplaai.
### [Deobfuscate android App]https://github.com/In3tinct/deobfuscate-android-app
Dit is 'n LLM tool om enige potensiële sekuriteitskwessbaarhede in android apps te vind en android app-kode te deobfuskeer. Uses Google's Gemini public API.
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.
### [Simplify](https://github.com/CalebFenton/simplify)
Dit is 'n generiese android deobfuscator. Simplify virtually executes an app om sy gedrag te verstaan en probeer dan die kode optimaliseer sodat dit identies optree maar vir 'n mens makliker is om te begryp. Elke optimaliseringstipe is eenvoudig en generies, so dit maak nie saak watter spesifieke tipe obfuskering gebruik word nie.
It is a **generic android deobfuscator.** Simplify **virtually executes an app** to understand its behavior and then **tries to optimize the code** so it behaves identically but is easier for a human to understand. Each optimization type is simple and generic, so it doesn't matter what the specific type of obfuscation is used.
### [APKiD](https://github.com/rednaga/APKiD)
APKiD gee jou inligting oor hoe 'n APK gemaak is. Dit identifiseer baie compilers, packers, obfuscators, en ander vreemde goed. It's [_PEiD_](https://www.aldeid.com/wiki/PEiD) for Android.
APKiD gee jou inligting oor **how an APK was made**. Dit identifiseer baie **compilers**, **packers**, **obfuscators**, en ander vreemde goed. It's [_PEiD_](https://www.aldeid.com/wiki/PEiD) for Android.
### Manual
@ -802,12 +810,12 @@ APKiD gee jou inligting oor hoe 'n APK gemaak is. Dit identifiseer baie compiler
### [Androl4b](https://github.com/sh4hin/Androl4b)
AndroL4b is 'n Android sekuriteits-virtual machine gebaseer op ubuntu-mate en sluit 'n versameling van die nuutste framework, tutorials en labs in van verskillende sekuriteits geeks en navorsers vir reverse engineering en malware analysis.
AndroL4b is 'n Android security virtual machine gebaseer op ubuntu-mate en sluit 'n versameling van die nuutste framework, tutorials en labs van verskillende sekuriteits geeks en researchers vir reverse engineering en malware analysis in.
## References
- [https://owasp.org/www-project-mobile-app-security/](https://owasp.org/www-project-mobile-app-security/)
- [https://appsecwiki.com/#/](https://appsecwiki.com/#/) Dit is 'n uitstekende lys van hulpbronne
- [https://appsecwiki.com/#/](https://appsecwiki.com/#/) Dit is 'n goeie lys van hulpbronne
- [https://maddiestone.github.io/AndroidAppRE/](https://maddiestone.github.io/AndroidAppRE/) Android quick course
- [https://manifestsecurity.com/android-application-security/](https://manifestsecurity.com/android-application-security/)
- [https://github.com/Ralireza/Android-Security-Teryaagh](https://github.com/Ralireza/Android-Security-Teryaagh)
@ -815,8 +823,9 @@ AndroL4b is 'n Android sekuriteits-virtual machine gebaseer op ubuntu-mate en sl
- [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)
## Nog te probeer
## Yet to try
- [https://www.vegabird.com/yaazhini/](https://www.vegabird.com/yaazhini/)
- [https://github.com/abhi-r3v0/Adhrit](https://github.com/abhi-r3v0/Adhrit)

View File

@ -2,7 +2,7 @@
{{#include ../../banners/hacktricks-training.md}}
Hierdie bladsy verskaf 'n praktiese werkvloei om dynamic analysis teen Android-apps te herstel wat instrumentation opspoor/rootblokkeer of TLS pinning afdwing. Dit fokus op vinnige triage, algemene opsporings, en copypasteable hooks/taktieke om dit te omseil sonder om te repak waar moontlik.
Hierdie bladsy bied 'n praktiese werkvloei om dynamic analysis teen Androidapps te hervind wat instrumentation opspoor/wortelblokkeer of TLS pinning afdwing. Dit fokus op vinnige triage, algemene detecties, en kopieerplak hooks/taktieke om dit te omseil sonder herverpakking waar moontlik.
## Detection Surface (what apps check)
@ -15,15 +15,15 @@ Hierdie bladsy verskaf 'n praktiese werkvloei om dynamic analysis teen Android-a
## Step 1 — Quick win: hide root with Magisk DenyList
- Skakel Zygisk in Magisk aan
- Skakel DenyList aan, voeg die teikenpakket by
- Skakel DenyList aan, voeg die teikenpakket by
- Herbegin en toets weer
Baie apps kyk net na voor die hand liggende aanwysers (su/Magisk paths/getprop). DenyList neutraliseer dikwels naïewe kontroles.
Baie apps kyk net na voor die hand liggende aanduiders (su/Magisk paths/getprop). DenyList neutraliseer dikwels naïewe kontroles.
References:
- Magisk (Zygisk & DenyList): https://github.com/topjohnwu/Magisk
## Step 2 — 30second Frida Codeshare tests
## Step 2 — 30sekonde Frida Codeshare tests
Probeer algemene dropin skripte voordat jy dieper delf:
@ -35,22 +35,39 @@ Example:
```bash
frida -U -f com.example.app -l anti-frida-detection.js
```
Hierdie vervang gewoonlik Java root/debug checks, process/service scans en native ptrace(). Nuttig op lig beskermde apps; geharde teikens mag aangepaste hooks nodig.
Hierdie gebruik gewoonlik stubs vir Java root/debug checks, process/service scans, en native ptrace(). Nuttig op lig beskermde apps; geharde teikens mag aangepaste hooks benodig.
- Codeshare: https://codeshare.frida.re/
## Stap 3 — Om init-time detectors te omseil deur laat aan te heg
## Outomatiseer met Medusa (Frida framework)
Baie deteksies hardloop slegs tydens process spawn/onCreate(). Spawntime injection (-f) of gadgets word gevang; aanheg nadat die UI gelaai is kan verbyglip.
Medusa bied 90+ kant-en-klare modules vir SSL unpinning, root/emulator detection bypass, HTTP comms logging, crypto key interception, en meer.
```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
```
Wenk: Medusa is uitstekend vir vinnige oorwinnings voordat jy custom hooks skryf. Jy kan ook cherry-pick modules en dit kombineer met jou eie scripts.
## Stap 3 — Omseil init-tyd detektore deur laat aan te heg
Baie deteksies hardloop slegs tydens process spawn/onCreate(). Spawntime injection (-f) of gadgets word gevang; deur laat aan te heg nadat die UI gelaai is, kan dit verbyglip.
```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
```
As dit werk, hou die sessie stabiel en gaan voort om map- en stub-kontroles uit te voer.
As dit werk, hou die sessie stabiel en gaan voort om mapping- en stubkontroles uit te voer.
## Stap 4 — Kaart deteksielogika via Jadx en string hunting
## Stap 4 — Kaart die deteksielogika via Jadx en string-soektog
Statiese triage-sleutelwoorde in Jadx:
- "frida", "gum", "root", "magisk", "ptrace", "su", "getprop", "debugger"
@ -68,7 +85,7 @@ Algemene APIs om te hersien/hook:
- java.lang.Runtime.exec / ProcessBuilder (probing commands)
- android.os.SystemProperties.get (root/emulator heuristics)
## Stap 5 — Runtime stubbing with Frida (Java)
## Stap 5 — Runtime-stubbing met Frida (Java)
Oorskryf aangepaste guards om veilige waardes terug te gee sonder repacking:
```js
@ -85,7 +102,7 @@ const AM = Java.use('android.app.ActivityManager');
AM.getRunningAppProcesses.implementation = function () { return java.util.Collections.emptyList(); };
});
```
Hantering van vroeë ineenstortings? Dump classes net voordat dit ineenstort om waarskynlike detection namespaces op te spoor:
Triaging early crashes? Dump classes net voordat dit sterf om waarskynlike detection namespaces op te spoor:
```js
Java.perform(() => {
Java.enumerateLoadedClasses({
@ -94,7 +111,15 @@ onComplete: () => console.log('Done')
});
});
```
Skryf na die log en neutraliseer verdagte metodes om die uitvoeringsvloei te bevestig:
// 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 en neutraliseer verdagte metodes om die uitvoeringsvloei te bevestig:
```js
Java.perform(() => {
const Det = Java.use('com.example.security.DetectionManager');
@ -104,13 +129,53 @@ return false;
};
});
```
## Step 6 — Volg die JNI/native spoor wanneer Java hooks misluk
## Bypass emulator/VM detection (Java stubs)
Spoor JNI entry points op om native loaders en detection init te lokaliseer:
Algemene heuristieke: Build.FINGERPRINT/MODEL/MANUFACTURER/HARDWARE wat generic/goldfish/ranchu/sdk bevat; QEMU artefakte soos /dev/qemu_pipe, /dev/socket/qemud; standaard MAC 02:00:00:00:00:00; 10.0.2.x NAT; ontbrekende telephony/sensors.
Vinnige spoof van Build-velde:
```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';
});
```
Vul dit aan met stubbe vir kontroles of lêers bestaan en identifiseerders (TelephonyManager.getDeviceId/SubscriberId, WifiInfo.getMacAddress, SensorManager.getSensorList) om realistiese waardes terug te gee.
## SSL pinning bypass quick hook (Java)
Neutraliseer aangepaste TrustManagers en dwing permissiewe SSL contexts af:
```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);
};
});
```
Aantekeninge
- Brei uit vir OkHttp: hook okhttp3.CertificatePinner en HostnameVerifier soos nodig, of gebruik 'n universele unpinning script van CodeShare.
- Voer voorbeeld uit: `frida -U -f com.target.app -l ssl-bypass.js --no-pause`
## Stap 6 — Volg die JNI/native spoor wanneer Java hooks misluk
Traseer JNI-invoerpunte om native loaders en detection init te lokaliseer:
```bash
frida-trace -n com.example.app -i "JNI_OnLoad"
```
Vinnige inheemse triage van ingeslote .so-lêers:
Vinnige native triage van ingeslote .so-lêers:
```bash
# List exported symbols & JNI
nm -D libfoo.so | head
@ -121,7 +186,7 @@ Interaktiewe/native reversing:
- Ghidra: https://ghidra-sre.org/
- r2frida: https://github.com/nowsecure/r2frida
Voorbeeld: neutriseer ptrace om eenvoudige antidebug in libc te omseil:
Voorbeeld: neutraliseer ptrace om eenvoudige antidebug in libc te omseil:
```js
const ptrace = Module.findExportByName(null, 'ptrace');
if (ptrace) {
@ -137,26 +202,28 @@ reversing-native-libraries.md
## Stap 7 — Objection patching (embed gadget / strip basics)
Wanneer jy repacking bo runtime hooks verkies, probeer:
As jy repacking bo runtime hooks verkies, probeer:
```bash
objection patchapk --source app.apk
```
Aantekeninge:
- Vereis apktool; verseker 'n huidige weergawe vanaf die amptelike gids om bouprobleme te vermy: https://apktool.org/docs/install
- Gadget injection stel instrumentation sonder root in staat, maar kan steeds deur sterker inittime checks opgespoor word.
- Requires apktool; ensure a current version from the official guide to avoid build issues: https://apktool.org/docs/install
- Gadget injection enables instrumentation without root but can still be caught by stronger inittime checks.
Opsioneel, voeg LSPosed modules en Shamiko by vir sterker root hiding in Zygisk environments, en curate DenyList om child processes te cover.
Verwysings:
- Objection: https://github.com/sensepost/objection
## Stap 8 — Valopsie: Patch TLS pinning vir netwerksigbaarheid
## Stap 8 — Valopsie: Patch TLS pinning vir netwerk sigbaarheid
As instrumentation geblokkeer is, kan jy nog steeds verkeer inspekteer deur pinning staties te verwyder:
As instrumentation geblokkeer is, kan jy steeds traffic inspekteer deur pinning staties te verwyder:
```bash
apk-mitm app.apk
# Then install the patched APK and proxy via Burp/mitmproxy
```
- Gereedskap: https://github.com/shroudedcode/apk-mitm
- Vir netwerkkonfigurasie CAtrust truuks (en Android 7+ user CA trust), sien:
- Vir netwerkconfig CAtrust truuks (en Android 7+ user CA trust), sien:
{{#ref}}
make-apk-accept-ca-certificate.md
@ -166,7 +233,7 @@ make-apk-accept-ca-certificate.md
install-burp-certificate.md
{{#endref}}
## Handige opdrag-snelverwysing
## Handige opdragte cheatsheet
```bash
# List processes and attach
frida-ps -Uai
@ -186,12 +253,12 @@ apk-mitm app.apk
```
## Wenke & waarskuwings
- Gee voorkeur aan late attach bo spawn wanneer apps by opstart crash
- Sommige detecties word weer uitgevoer in kritieke flows (e.g., payment, auth) — hou hooks aktief tydens navigasie
- Meng static en dynamic: string hunt in Jadx om klasse te kortlys; dan hook methods om by runtime te verifieer
- Versterkte apps kan packers en native TLS pinning gebruik — verwag om native code te reverseer
- Liewer later attach as om te spawn wanneer apps by opstart crash
- Sommige detections herhaal in kritieke flows (bv. payment, auth) — hou hooks aktief tydens navigasie
- Meng static en dynamic: string hunt in Jadx om klasse te kortlys; hook methods om by runtime te verifieer
- Hardened apps kan packers en native TLS pinning gebruik — verwag om native code te reverse
## Verwysings
## References
- [Reversing Android Apps: Bypassing Detection Like a Pro](https://www.kayssel.com/newsletter/issue-12/)
- [Frida Codeshare](https://codeshare.frida.re/)
@ -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}}

View File

@ -6,29 +6,29 @@ Baie dankie aan [**@offsecjay**](https://twitter.com/offsecjay) vir sy hulp tyde
## Wat is
Android Studio laat jou toe om **virtuele masjiene van Android te loop wat jy kan gebruik om APK's te toets**. Om dit te gebruik, sal jy nodig hê:
Android Studio laat jou toe om **Android virtuele masjiene te draai wat jy kan gebruik om APKs te toets**. Om dit te gebruik sal jy benodig:
- Die **Android SDK gereedskap** - [Laai hier af](https://developer.android.com/studio/releases/sdk-tools).
- Of **Android Studio** (met Android SDK gereedskap) - [Laai hier af](https://developer.android.com/studio).
- Die **Android SDK tools** - [Download here](https://developer.android.com/studio/releases/sdk-tools).
- Of **Android Studio** (with Android SDK tools) - [Download here](https://developer.android.com/studio).
In Windows (in my geval) **na die installering van Android Studio** het ek die **SDK Gereedskap geïnstalleer in**: `C:\Users\<UserName>\AppData\Local\Android\Sdk\tools`
In Windows (in my geval) **na die installering van Android Studio** het ek die **SDK Tools geïnstalleer in**: `C:\Users\<UserName>\AppData\Local\Android\Sdk\tools`
In mac kan jy **die SDK gereedskap aflaai** en dit in die PATH hê deur:
Op mac kan jy die **SDK tools aflaai** en dit in die PATH plaas deur die volgende te hardloop:
```bash
brew tap homebrew/cask
brew install --cask android-sdk
```
Of van **Android Studio GUI** soos aangedui in [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) wat hulle sal installeer in `~/Library/Android/sdk/cmdline-tools/latest/bin/` en `~/Library/Android/sdk/platform-tools/` en `~/Library/Android/sdk/emulator/`
Of vanaf **Android Studio GUI** soos aangedui in [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) wat hulle sal installeer in `~/Library/Android/sdk/cmdline-tools/latest/bin/` en `~/Library/Android/sdk/platform-tools/` en `~/Library/Android/sdk/emulator/`
Vir die Java probleme:
Vir die Java-probleme:
```java
export JAVA_HOME=/Applications/Android\ Studio.app/Contents/jbr/Contents/Home
```
## GUI
### Berei Virtuele Masjien Voor
### Berei Virtuele Masjien voor
As jy Android Studio geïnstalleer het, kan jy net die hoofprojekweergave oopmaak en toegang verkry tot: _**Gereedskap**_ --> _**AVD Bestuurder.**_
As jy Android Studio geïnstalleer het, kan jy net die hoofprojek-oorsig oopmaak en toegang kry: _**Tools**_ --> _**AVD Manager.**_
<div align="center" data-full-width="false">
@ -36,38 +36,38 @@ As jy Android Studio geïnstalleer het, kan jy net die hoofprojekweergave oopmaa
</div>
Klik dan op _**Skep Virtuele Toestel**_
Klik dan op _**Create Virtual Device**_
<figure><img src="../../images/image (1143).png" alt="" width="188"><figcaption></figcaption></figure>
_**kies** die telefoon wat jy wil gebruik_ en klik op _**Volgende.**_
_**Kies** die foon wat jy wil gebruik_ en klik op _**Next.**_
> [!WARNING]
> As jy 'n telefoon met Play Store geïnstalleer nodig het, kies een met die Play Store ikoon daarop!
> If you need a phone with Play Store installed select one with the Play Store icon on it!
>
> <img src="../../images/image (1144).png" alt="" data-size="original">
In die huidige weergave gaan jy in staat wees om **die Android beeld te kies en af te laai** wat die telefoon gaan loop:
In die huidige aansig kan jy die **Android image kies en aflaai** wat diefoon gaan gebruik:
<figure><img src="../../images/image (1145).png" alt="" width="375"><figcaption></figcaption></figure>
Kies dit, en as dit nie afgelaai is nie, klik op die _**Aflaai**_ simbool langs die naam (**wag nou totdat die beeld afgelaai is).**\
Sodra die beeld afgelaai is, kies net **`Volgende`** en **`Voltooi`**.
Kies dit, en as dit nie afgelaai is nie klik op die _**Download**_ simbool langs die naam (**wag nou totdat die image afgelaai is).**\
Sodra die image afgelaai is, kies net **`Next`** en **`Finish`**.
Die virtuele masjien sal geskep word. Nou **elke keer wanneer jy AVD bestuurder toegang verkry, sal dit teenwoordig wees**.
Die virtuele masjien sal geskep word. Nou, **elke keer as jy toegang kry tot AVD manager, sal dit daar wees**.
### Loop Virtuele Masjien
### Begin Virtuele Masjien
Om dit te **loop**, druk net die _**Begin knoppie**_.
Om dit te **begin** druk net die _**Start button**_.
![](<../../images/image (518).png>)
## Opdraglyn hulpmiddel
## Opdraglyn-gereedskap
> [!WARNING]
> Vir macOS kan jy die `avdmanager` hulpmiddel vind in `/Users/<username>/Library/Android/sdk/tools/bin/avdmanager` en die `emulator` in `/Users/<username>/Library/Android/sdk/emulator/emulator` as jy dit geïnstalleer het.
> For macOS you can find the `avdmanager` tool in `/Users/<username>/Library/Android/sdk/tools/bin/avdmanager` and the `emulator` in `/Users/<username>/Library/Android/sdk/emulator/emulator` if you have them installed.
Eerstens moet jy **besluit watter telefoon jy wil gebruik**, om die lys van moontlike telefone te sien, voer uit:
Eerstens moet jy **bepaal watter foon jy wil gebruik**, om die lys van moontlike fone te sien voer uit:
```
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat list device
@ -95,16 +95,15 @@ Name: Nexus 10
OEM : Google
[...]
```
Sodra jy die naam van die toestel wat jy wil gebruik, besluit het, moet jy **besluit watter Android-beeld jy in hierdie toestel wil laat loop.**\
Jy kan al die opsies lys met `sdkmanager`:
Sodra jy die naam van die toestel wat jy wil gebruik besluit het, moet jy **bepaal watter Android-image jy in hierdie toestel wil uitvoer.**\ Jy kan al die opsies lys met `sdkmanager`:
```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat --list
```
En **aflaai** die een (of al die) wat jy wil gebruik met:
En **download** die een (of almal) wat jy wil gebruik met:
```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat "platforms;android-28" "system-images;android-28;google_apis;x86_64"
```
Sodra jy die Android-beeld wat jy wil gebruik afgelaai het, kan jy **alle afgelaaide Android-beelde lys** met:
Sodra jy die Android-beeld wat jy wil gebruik afgelaai het, kan jy **al die afgelaaide Android-beelde lys** met:
```
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat list target
----------
@ -120,12 +119,12 @@ Type: Platform
API level: 29
Revision: 4
```
Op hierdie oomblik het jy besluit watter toestel jy wil gebruik en jy het die Android-beeld afgelaai, so **jy kan die virtuele masjien skep met**:
Op hierdie stadium het jy besluit watter toestel jy wil gebruik en jy het die Android image afgelaai, dus **kan jy die virtuele masjien skep met**:
```bash
C:\Users\<UserName>\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"
```
In die laaste opdrag **het ek 'n VM genaamd** "_AVD9_" geskep met die **toestel** "_Nexus 5X_" en die **Android beeld** "_system-images;android-28;google_apis;x86_64_".\
Nou kan jy **die virtuele masjiene** wat jy geskep het lys met:
In die laaste opdrag **het ek 'n VM geskep met die naam** "_AVD9_" deur die **toestel** "_Nexus 5X_" en die **Android image** "_system-images;android-28;google_apis;x86_64_" te gebruik.\
Nou kan jy **lys die virtuele masjiene** wat jy geskep het met:
```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat list avd
@ -140,75 +139,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
```
### Voer Virtuele Masjien Uit
### Voer Virtuele Masjien uit
> [!WARNING]
> Vir macOS kan jy die `avdmanager` hulpmiddel vind in `/Users/<username>/Library/Android/sdk/tools/bin/avdmanager` en die `emulator` in `/Users/<username>/Library/Android/sdk/emulator/emulator` as jy dit geïnstalleer het.
Ons het reeds gesien hoe jy die geskepte virtuele masjiene kan lys, maar **jy kan hulle ook lys met**:
Ons het reeds gesien hoe jy die gemaakte virtuele masjiene kan lys, maar **jy kan hulle ook lys met**:
```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -list-avds
AVD9
Pixel_2_API_27
```
U kan eenvoudig **enige virtuele masjien wat geskep is** gebruik:
Jy kan eenvoudig **enige geskepte virtuele masjien** laat loop deur gebruik te maak van:
```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "VirtualMachineName"
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9"
```
Of deur meer gevorderde opsies te gebruik, kan jy 'n virtuele masjien soos:
Of deur meer gevorderde opsies te gebruik kan jy 'n virtuele masjien soos:
```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -http-proxy 192.168.1.12:8080 -writable-system
```
### Opdraglyn opsies
### Command line options
Daar is egter **'n baie verskillende nuttige opsies op die opdraglyn** wat jy kan gebruik om 'n virtuele masjien te begin. Hieronder kan jy 'n paar interessante opsies vind, maar kan [**'n volledige lys hier vind**](https://developer.android.com/studio/run/emulator-commandline)
Daar is egter **baie verskillende nuttige opdragreëlopsies** wat jy kan gebruik om 'n virtuele masjien te begin. Hieronder kan jy 'n paar interessante opsies sien, maar jy kan [**'n volledige lys hier vind**](https://developer.android.com/studio/run/emulator-commandline)
**Boot**
**Opstart**
- `-snapshot name` : Begin VM-snapshot
- `-snapshot-list -snapstorage ~/.android/avd/Nexus_5X_API_23.avd/snapshots-test.img` : Lys al die geregistreerde snapshots
- `-snapshot name` : Start VM snapshot
- `-snapshot-list -snapstorage ~/.android/avd/Nexus_5X_API_23.avd/snapshots-test.img` : Lys al die opgeneemde snapshots
**Netwerk**
- `-dns-server 192.0.2.0, 192.0.2.255` : Laat toe om komma-geskeide DNS-bedieners aan die VM aan te dui.
- **`-http-proxy 192.168.1.12:8080`** : Laat toe om 'n HTTP-proxy aan te dui om te gebruik (baie nuttig om die verkeer met Burp te vang)
- As die proxy-instellings om een of ander rede nie werk nie, probeer om dit intern te konfigureer of met 'n toepassing soos "Super Proxy" of "ProxyDroid".
- `-dns-server 192.0.2.0, 192.0.2.255` : Laat toe om die DNS-bedieners vir die VM kommageskei aan te dui.
- **`-http-proxy 192.168.1.12:8080`** : Laat toe om 'n HTTP-proxy aan te dui om te gebruik (baie nuttig om verkeer met Burp vas te vang)
- As die proxy-instellings om een of ander rede nie werk nie, probeer dit intern te konfigureer of 'n toepassing soos "Super Proxy" of "ProxyDroid" te gebruik.
- `-netdelay 200` : Stel die netwerklatensie-emulasie in millisekondes.
- `-port 5556` : Stel die TCP-poortnommer in wat vir die konsole en adb gebruik word.
- `-ports 5556,5559` : Stel die TCP-poorte in wat vir die konsole en adb gebruik word.
- `-port 5556` : Stel die TCP-poortnommer wat vir die console en adb gebruik word.
- `-ports 5556,5559` : Stel die TCP-poorte wat vir die console en adb gebruik word.
- **`-tcpdump /path/dumpfile.cap`** : Vang al die verkeer in 'n lêer
**Stelsel**
- `-selinux {disabled|permissive}` : Stel die Security-Enhanced Linux-sekuriteitsmodule in op ofwel gedeaktiveer of permissiewe modus op 'n Linux-bedryfstelsel.
- `-timezone Europe/Paris` : Stel die tydsone vir die virtuele toestel in
- `-screen {touch(default)|multi-touch|o-touch}` : Stel die geëmuleerde aanraakskermmodus in.
- **`-writable-system`** : Gebruik hierdie opsie om 'n skryfbare stelselfoto gedurende jou emulasiesessie te hê. Jy sal ook `adb root; adb remount` moet uitvoer. Dit is baie nuttig om 'n nuwe sertifikaat in die stelsel te installeer.
- `-selinux {disabled|permissive}` : Stel die Security-Enhanced Linux sekuriteitsmodule in op óf disabled óf permissive modus op 'n Linux-bedryfstelsel.
- `-timezone Europe/Paris` : Stel die tydsone vir die virtuele toestel
- `-screen {touch(default)|multi-touch|o-touch}` : Stel die geëmuleerde raakskermmodus in.
- **`-writable-system`** : Gebruik hierdie opsie om 'n beskryfbare stelselbeeld gedurende jou emulasiesessie te hê. Jy sal ook `adb root; adb remount` moet uitvoer. Dit is baie handig om 'n nuwe sertifikaat in die stelsel te installeer.
## Rooting 'n Play Store toestel
## Linux CLI-opstelling (SDK/AVD snelbegin)
As jy 'n toestel met Play Store afgelaai het, gaan jy nie in staat wees om direk root te kry nie, en jy sal hierdie foutboodskap ontvang
Die amptelike CLI-gereedskap maak dit maklik om vinnige, debugbare emulators te skep sonder 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
```
Aantekeninge
- Stelselbeeld-variante: google_apis (debuggable, laat `adb root` toe), google_apis_playstore (nie rootbaar nie), aosp/default (liggewig).
- Bou-tipes: userdebug laat dikwels `adb root` toe op debug-geskikte beelde. Play Store images is produksie-boude en blokkeer root.
- Op x86_64-gashere word volstelsel ARM64-emulasie nie ondersteun vanaf API 28+ nie. Vir Android 11+ gebruik Google APIs/Play images wat per-app ARM-to-x86 translation insluit om baie ARM-only apps vinnig te laat loop.
### Snapshots vanaf die 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 binaire vertaling (Android 11+)
Google APIs en Play Store images op Android 11+ kan ARM-app-binaries per proses vertaal terwyl die res van die stelsel inheemse x86/x86_64 bly. Dit is dikwels vinnig genoeg om baie ARM-only apps op 'n lessenaar te toets.
> Wenk: Gebruik voorkeurlik Google APIs x86/x86_64 images tydens pentests. Play images is gerieflik maar blokkeer `adb root`; gebruik dit slegs wanneer jy spesifiek Play services benodig en die gebrek aan root aanvaar.
## Rooting a Play Store device
As jy 'n toestel met Play Store afgelaai het, gaan jy nie direk root kan kry nie, en jy sal hierdie foutboodskap kry
```
$ adb root
adbd cannot run as root in production builds
```
Gebruik [rootAVD](https://github.com/newbit1/rootAVD) saam met [Magisk](https://github.com/topjohnwu/Magisk) kon ek dit root (volg byvoorbeeld [**hierdie video**](https://www.youtube.com/watch?v=Wk0ixxmkzAI) **of** [**hierdie een**](https://www.youtube.com/watch?v=qQicUW0svB8)).
Deur [rootAVD](https://github.com/newbit1/rootAVD) saam met [Magisk](https://github.com/topjohnwu/Magisk) te gebruik, kon ek dit root (volg byvoorbeeld [**this video**](https://www.youtube.com/watch?v=Wk0ixxmkzAI) **of** [**this one**](https://www.youtube.com/watch?v=qQicUW0svB8)).
## Installeer Burp Sertifikaat
## Installeer Burp-sertifikaat
Kyk na die volgende bladsy om te leer hoe om 'n pasgemaakte CA-sertifikaat te installeer:
Kyk na die volgende bladsy om te leer hoe om 'n pasgemaakte CA sertifikaat te installeer:
{{#ref}}
install-burp-certificate.md
{{#endref}}
## Lekker AVD Opsies
## Goeie AVD-opsies
### Neem 'n Snapshot
Jy kan **die GUI** gebruik om 'n snapshot van die VM op enige tyd te neem:
Jy kan **use the GUI** gebruik om op enige tyd 'n snapshot van die VM te neem:
![](<../../images/image (234).png>)
## Verwysings
- [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}}

View File

@ -1,7 +1,8 @@
# Frida Tutorial
# Frida Handleiding
{{#include ../../../banners/hacktricks-training.md}}
## Installasie
Installeer **frida tools**:
@ -9,8 +10,8 @@ Installeer **frida tools**:
pip install frida-tools
pip install frida
```
**Laai af en installeer** in die android die **frida server** ([Download the latest release](https://github.com/frida/frida/releases)).\
Een-liner om adb in wortelmodus te herbegin, daaraan te koppel, frida-server op te laai, uitvoeringsregte te gee en dit in die agtergrond te laat loop:
**Laai af en installeer** op die Android-toestel die **frida server** ([Download the latest release](https://github.com/frida/frida/releases)).\
Eenreël-opdrag om adb in root-modus te herbegin, daaraan te koppel, frida-server op te laai, exec permissions te gee en dit in die agtergrond te laat loop:
```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 &"
```
@ -19,35 +20,88 @@ 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 <part_of_the_package_name> #Get all the package name
```
## Tutorials
## Frida server vs. Gadget (root vs. no-root)
### [Tutorial 1](frida-tutorial-1.md)
Twee algemene maniere om Android apps met Frida te instrumenteer:
**From**: [https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1](https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1)\
- Frida server (rooted devices): Stoot en voer 'n inheemse daemon uit wat jou toelaat om aan enige proses te koppel.
- Frida Gadget (no root): Bundel Frida as 'n gedeelde biblioteek binne die APK en laai dit outomaties in die teikenproses.
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-<ver>-android-<arch> /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) Pak die APK uit, voeg die gadget .so en konfigurasie by:
- Plaas libfrida-gadget.so in lib/<abi>/ (bv., lib/arm64-v8a/)
- Skep assets/frida-gadget.config met jou script-laaistellings
Voorbeeld frida-gadget.config
```json
{
"interaction": { "type": "script", "path": "/sdcard/ssl-bypass.js" },
"runtime": { "logFile": "/sdcard/frida-gadget.log" }
}
```
2) Verwys/laai die gadget sodat dit vroeg geïnitialiseer word:
- Maklikste: Voeg 'n klein Java-stub by System.loadLibrary("frida-gadget") in Application.onCreate(), of gebruik die reeds bestaande native lib loading.
3) Herpak en teken die APK, en installeer dit dan:
```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) Koppel vanaf host na die gadget-proses:
```bash
frida-ps -Uai
frida -U -n com.example.app
```
Aantekeninge
- Gadget word deur sommige beskermings opgespoor; hou name/paaie onopvallend en laai laat/voorwaardelik indien nodig.
- By geharde apps, verkies rooted testing met server + late attach, of kombineer met Magisk/Zygisk verberging.
## Handleidings
### [Handleiding 1](frida-tutorial-1.md)
**Van**: [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)\
**Source Code**: [https://github.com/t0thkr1s/frida-demo](https://github.com/t0thkr1s/frida-demo)
**Bronkode**: [https://github.com/t0thkr1s/frida-demo](https://github.com/t0thkr1s/frida-demo)
**Volg die [skakel om dit te lees](frida-tutorial-1.md).**
### [Tutorial 2](frida-tutorial-2.md)
### [Handleiding 2](frida-tutorial-2.md)
**From**: [https://11x256.github.io/Frida-hooking-android-part-2/](https://11x256.github.io/Frida-hooking-android-part-2/) (Dele 2, 3 & 4)\
**APKs en Bron kode**: [https://github.com/11x256/frida-android-examples](https://github.com/11x256/frida-android-examples)
**Van**: [https://11x256.github.io/Frida-hooking-android-part-2/](https://11x256.github.io/Frida-hooking-android-part-2/) (Dele 2, 3 & 4)\
**APKs en Bronkode**: [https://github.com/11x256/frida-android-examples](https://github.com/11x256/frida-android-examples)
**Volg die [skakel om dit te lees.](frida-tutorial-2.md)**
**Volg die [skakel om dit te lees](frida-tutorial-2.md).**
### [Tutorial 3](owaspuncrackable-1.md)
### [Handleiding 3](owaspuncrackable-1.md)
**From**: [https://joshspicer.com/android-frida-1](https://joshspicer.com/android-frida-1)\
**Van**: [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)
**Volg die [skakel om dit te lees](owaspuncrackable-1.md).**
**Jy kan meer wonderlike Frida-skripte hier vind:** [**https://codeshare.frida.re/**](https://codeshare.frida.re)
**Jy kan meer Awesome Frida-skripte hier vind:** [**https://codeshare.frida.re/**](https://codeshare.frida.re)
## Quick Examples
## Vinnige Voorbeelde
### Calling Frida from command line
### Frida vanaf die opdragreël aanroep
```bash
frida-ps -U
@ -60,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.
```
### Basiese Python Skrip
### Basiese Python-skrip
```python
import frida, sys
@ -71,9 +125,9 @@ print('[ * ] Running Frida Demo application')
script.load()
sys.stdin.read()
```
### Funksies sonder parameters aanhaak
### Hooking funksies sonder parameters
Haak die funksie `a()` van die klas `sg.vantagepoint.a.c` aan
Hook die funksie `a()` van die klas `sg.vantagepoint.a.c`
```javascript
Java.perform(function () {
; rootcheck1.a.overload().implementation = function() {
@ -83,14 +137,14 @@ return false;
};
});
```
Haal java `exit()` aan
Hook java `exit()`
```javascript
var sysexit = Java.use("java.lang.System")
sysexit.exit.overload("int").implementation = function (var_0) {
send("java.lang.System.exit(I)V // We avoid exiting the application :)")
}
```
Haal MainActivity `.onStart()` & `.onCreate()` aan
Hook MainActivity `.onStart()` en `.onCreate()`
```javascript
var mainactivity = Java.use("sg.vantagepoint.uncrackable1.MainActivity")
mainactivity.onStart.overload().implementation = function () {
@ -104,7 +158,7 @@ send("MainActivity.onCreate() HIT!!!")
var ret = this.onCreate.overload("android.os.Bundle").call(this, var_0)
}
```
Haal android `.onCreate()` aan
Hook android `.onCreate()`
```javascript
var activity = Java.use("android.app.Activity")
activity.onCreate.overload("android.os.Bundle").implementation = function (
@ -114,9 +168,9 @@ send("Activity HIT!!!")
var ret = this.onCreate.overload("android.os.Bundle").call(this, var_0)
}
```
### Funksies met parameters haak en die waarde terugkry
### Hooking funksies met parameters en die waarde terugkry
Haak 'n ontsleuteling funksie. Druk die invoer, roep die oorspronklike funksie aan om die invoer te ontsleutel en druk uiteindelik die gewone data:
Hooking 'n decryption function. Druk die input, roep die oorspronklike funksie aan om die input te decrypt en uiteindelik druk die plain data uit:
```javascript
function getString(data) {
var ret = ""
@ -141,9 +195,9 @@ send("Decrypted flag: " + flag)
return ret //[B
}
```
### Haak funksies en bel hulle met ons invoer
### Hooking funksies en hulle aanroep met ons inset
Haak 'n funksie wat 'n string ontvang en bel dit met 'n ander string (van [hier](https://11x256.github.io/Frida-hooking-android-part-2/))
Hook 'n funksie wat 'n string ontvang en roep dit aan met 'n ander string (van [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
@ -156,11 +210,11 @@ console.log("Return value: " + ret)
return ret
}
```
### Verkryging van 'n reeds geskepte objek van 'n klas
### Kry 'n reeds geskepte objek van 'n klas
As jy 'n attribuut van 'n geskepte objek wil onttrek, kan jy dit gebruik.
As jy 'n attribuut van 'n geskepte objek wil uittrek, kan jy dit gebruik.
In hierdie voorbeeld gaan jy sien hoe om die objek van die klas my_activity te verkry en hoe om die funksie .secret() aan te roep wat 'n private attribuut van die objek sal druk:
In hierdie voorbeeld gaan jy sien hoe om die objek van die klas my_activity te kry en hoe om die funksie .secret() aan te roep wat 'n privaat attribuut van die objek sal afdruk:
```javascript
Java.choose("com.example.a11x256.frida_test.my_activity", {
onMatch: function (instance) {
@ -171,10 +225,16 @@ console.log("Result of secret func: " + instance.secret())
onComplete: function () {},
})
```
## Ander Frida tutorials
## Ander Frida-handleidings
- [https://github.com/DERE-ad2001/Frida-Labs](https://github.com/DERE-ad2001/Frida-Labs)
- [Deel 1 van die Gevorderde Frida Gebruik blog reeks: IOS Enkripsie Biblioteke](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/)
## Verwysings
- [Bou 'n herhaalbare 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 dokumentasie](https://frida.re/docs/gadget/)
- [Frida vrystellings (server binaries)](https://github.com/frida/frida/releases)
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -1,20 +1,32 @@
# Installeer Burp Sertifikaat
# Installeer Burp-sertifikaat
{{#include ../../banners/hacktricks-training.md}}
## Stelselwye proxy via ADB
Konfigureer 'n globale HTTP proxy sodat alle apps verkeer deur jou interceptor (Burp/mitmproxy) stuur:
```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
```
Wenk: In Burp bind jou luisteraar aan 0.0.0.0 sodat toestelle op die LAN kan koppel (Proxy -> Options -> Proxy Listeners).
## Op 'n Virtuele Masjien
Eerstens moet jy die Der sertifikaat van Burp aflaai. Jy kan dit doen in _**Proxy**_ --> _**Opsies**_ --> _**Invoer / Uitvoer CA sertifikaat**_
Eerstens moet jy die Der-sertifikaat vanaf Burp aflaai. Jy kan dit doen in _**Proxy**_ --> _**Options**_ --> _**Import / Export CA certificate**_
![](<../../images/image (367).png>)
**Eksporteer die sertifikaat in Der formaat** en laat ons dit **transformeer** na 'n vorm wat **Android** gaan kan **begryp.** Let daarop dat **om die burp sertifikaat op die Android masjien in AVD te konfigureer** jy hierdie masjien moet **hardloop** met die **`-writable-system`** opsie.\
Byvoorbeeld, jy kan dit soos volg hardloop:
**Voer die sertifikaat uit in Der-formaat** en kom ons **transformeer** dit na 'n formaat wat **Android** gaan kan **begryp.** Let op dat **om die Burp-sertifikaat op die Android-masjien in AVD te konfigureer** jy hierdie masjien **met** die **`-writable-system`** opsie moet **begin.**\
Byvoorbeeld kan jy dit so begin:
```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -http-proxy 192.168.1.12:8080 -writable-system
```
Dan, om **burp se sertifikaat te konfigureer**:
Dan, om **die Burp-sertifikaat te konfigureer**, doen:
```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
```
Sodra die **masjien klaar herlaai** is, sal die burp sertifikaat deur dit gebruik word!
Sodra die **masjien klaar herlaai is** sal die Burp-sertifikaat deur dit gebruik word!
## Gebruik Magisc
## Gebruik van Magisc
As jy **jou toestel met Magisc ge-root het** (miskien 'n emulator), en jy **kan nie die vorige **stappe** volg** om die Burp sertifikaat te installeer nie omdat die **lêerstelsel slegs leesbaar** is en jy dit nie weer kan monteer nie, is daar 'n ander manier.
As jy **jou toestel met Magisc geroot het** (miskien 'n emulator), en jy **kan nie** die vorige **stappe** volg om die Burp-sertifikaat te installeer omdat die **lêerstelsel slegs-lees** is en jy dit nie kan remount om dit skryfbaar te maak nie, is daar 'n ander manier.
Soos verduidelik in [**hierdie video**](https://www.youtube.com/watch?v=qQicUW0svB8) moet jy:
In [**hierdie video**](https://www.youtube.com/watch?v=qQicUW0svB8) word dit verduidelik: jy moet:
1. **Installeer 'n CA sertifikaat**: Net **sleep\&laat** die DER Burp sertifikaat **en verander die uitbreiding** na `.crt` op die mobiele toestel sodat dit in die Downloads-gids gestoor word en gaan na `Installeer 'n sertifikaat` -> `CA sertifikaat`
1. **Installeer 'n CA certificate**: Net **drag&drop** die DER Burp-sertifikaat en **verander die uitbreiding** na `.crt` op die toestel sodat dit in die Downloads folder gestoor word en gaan na `Install a certificate` -> `CA certificate`
<figure><img src="../../images/image (53).png" alt="" width="164"><figcaption></figcaption></figure>
- Kontroleer dat die sertifikaat korrek gestoor is deur na `Vertroude geloofsbriewe` -> `GEBRUIKER` te gaan
- Kontroleer dat die sertifikaat korrek gestoor is deur na `Trusted credentials` -> `USER` te gaan
<figure><img src="../../images/image (54).png" alt="" width="334"><figcaption></figcaption></figure>
2. **Maak dit Stelsel vertrou**: Laai die Magisc module [MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts) (n .zip-lêer) af, **sleep\&laat dit** in die telefoon, gaan na die **Magics app** in die telefoon na die **`Modules`** afdeling, klik op **`Installeer vanaf stoor`**, kies die `.zip` module en sodra dit geïnstalleer is, **herlaai** die telefoon:
2. **Maak dit System trusted**: Laai die Magisc-module [MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts) (ʼn .zip-lêer) af, **drag&drop dit** in die telefoon, gaan na die **Magics app** op die telefoon na die **`Modules`**-afdeling, klik op **`Install from storage`**, kies die `.zip`-module en sodra dit geïnstalleer is **herbegin** die telefoon:
<figure><img src="../../images/image (55).png" alt="" width="345"><figcaption></figcaption></figure>
- Na herlaai, gaan na `Vertroude geloofsbriewe` -> `STELSEL` en kontroleer of die Postswigger sertifikaat daar is
- Nadat jy herbegin het, gaan na `Trusted credentials` -> `SYSTEM` en kontroleer dat die Postswigger-sertifikaat daar is
<figure><img src="../../images/image (56).png" alt="" width="314"><figcaption></figcaption></figure>
## Post Android 14
### Leer hoe om 'n Magisc-module te skep
In die nuutste Android 14 vrystelling is 'n beduidende verskuiwing waargeneem in die hantering van stelsel-vertroude Sertifikaat Owerheid (CA) sertifikate. Voorheen was hierdie sertifikate in **`/system/etc/security/cacerts/`** gehuisves, toeganklik en aanpasbaar deur gebruikers met wortelregte, wat onmiddellike toepassing regoor die stelsel moontlik gemaak het. Met Android 14 is die stoorplek egter na **`/apex/com.android.conscrypt/cacerts`** verskuif, 'n gids binne die **`/apex`** pad, wat van nature onveranderlik is.
Kyk na [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)
Pogings om die **APEX cacerts pad** as skryfbaar te monteer, misluk, aangesien die stelsel sulke operasies nie toelaat nie. Selfs pogings om die gids te ontkoppel of te oorlaai met 'n tydelike lêerstelsel (tmpfs) omseil nie die onveranderlikheid nie; toepassings bly toegang tot die oorspronklike sertifikaatdata, ongeag veranderinge op die lêerstelselniveau. Hierdie veerkragtigheid is te danke aan die **`/apex`** monteer wat met PRIVATE propagasie geconfigureer is, wat verseker dat enige aanpassings binne die **`/apex`** gids nie ander prosesse beïnvloed nie.
## Na Android 14
Die inisialisering van Android behels die `init` proses, wat, wanneer die bedryfstelsel begin, ook die Zygote proses inisieer. Hierdie proses is verantwoordelik vir die bekendstelling van toepassingsprosesse met 'n nuwe monteernaamruimte wat 'n private **`/apex`** monteer insluit, wat veranderinge aan hierdie gids van ander prosesse isoleer.
In die nuutste Android 14-uitgawe is daar 'n beduidende verandering waargeneem in die hantering van system-trusted Certificate Authority (CA) certificates. Voorheen is hierdie sertifikate bewaar in **`/system/etc/security/cacerts/`**, toeganklik en wysigbaar vir gebruikers met root-regte, wat onmiddellike toepassing deur die stelsel toegelaat het. Met Android 14 is die stoorplek egter verskuif na **`/apex/com.android.conscrypt/cacerts`**, 'n gids binne die **`/apex`**-pad, wat inherente onveranderlikheid het.
Nietemin, 'n omweg bestaan vir diegene wat die stelsel-vertroude CA sertifikate binne die **`/apex`** gids moet aanpas. Dit behels die handmatige hermontering van **`/apex`** om die PRIVATE propagasie te verwyder, wat dit skryfbaar maak. Die proses sluit in om die inhoud van **`/apex/com.android.conscrypt`** na 'n ander plek te kopieer, die **`/apex/com.android.conscrypt`** gids te ontkoppel om die slegs leesbare beperking te verwyder, en dan die inhoud na hul oorspronklike plek binne **`/apex`** te herstel. Hierdie benadering vereis vinnige aksie om stelselinbrake te vermy. Om stelselsgewys toepassing van hierdie veranderinge te verseker, word dit aanbeveel om die `system_server` te herbegin, wat effektief alle toepassings herbegin en die stelsel na 'n konsekwente toestand bring.
Pogings om die **APEX cacerts path** as skryfbaar te remount misluk, aangesien die stelsel sulke operasies nie toelaat nie. Selfs pogings om die gids te unmount of te oorlaai met 'n tydelike lêerstelsel (tmpfs) om die onveranderlikheid te omseil, omseil dit nie die probleem nie; toepassings bly steeds toegang tot die oorspronklike sertifikaatdata hê ongeag veranderinge op die lêerstelselvlak. Hierdie veerkragtigheid is te danke aan die feit dat die **`/apex`**-mount geconfigureer is met PRIVATE propagation, wat verseker dat enige wysigings binne die **`/apex`**-gids nie ander prosesse beïnvloed nie.
Die initialisering van Android behels die `init`-proses wat, by die begin van die bedryfstelsel, ook die Zygote-proses inisieer. Hierdie proses is verantwoordelik vir die bekendstelling van toepassingsprosesse met 'n nuwe mount namespace wat 'n private **`/apex`**-mount insluit, en sodoende veranderinge aan hierdie gids van ander prosesse isoleer.
Nietemin bestaan daar 'n ompad vir diegene wat die system-trusted CA-sertifikate binne die **`/apex`**-gids moet wysig. Dit behels handmatige remounting van **`/apex`** om die PRIVATE propagation te verwyder, sodat dit skryfbaar word. Die proses sluit in om die inhoud van **`/apex/com.android.conscrypt`** na 'n ander ligging te kopieer, die **`/apex/com.android.conscrypt`**-gids te unmount om die lees-alleen-beperking te verwyder, en dan die inhoud terug te plaas na hul oorspronklike ligging binne **`/apex`**. Hierdie benadering vereis vinnige optrede om stelselbotsings te voorkom. Om stelselwye toepassing van hierdie veranderinge te verseker, word dit aanbeveel om die `system_server` te herbegin, wat effektief alle toepassings herbegin en die stelsel na 'n konsekwente toestand bring.
```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.
@ -117,26 +133,26 @@ echo "System certificate injected"
```
### Bind-mounting deur NSEnter
1. **Stel 'n Skryfbare Gids In**: Aanvanklik word 'n skryfbare gids gevestig deur 'n `tmpfs` oor die bestaande nie-APEX stelselsertifikaatgids te monteer. Dit word bereik met die volgende opdrag:
1. **Opstel van 'n Skryfbare Gids**: Aanvanklik word 'n skryfbare gids geskep deur 'n `tmpfs` oor die bestaande non-APEX stelselsertifikaatgids te mount. Dit word bereik met die volgende opdrag:
```bash
mount -t tmpfs tmpfs /system/etc/security/cacerts
```
2. **Voorbereiding van CA Sertifikate**: Na die opstelling van die skryfbare gids, moet die CA sertifikate wat gebruik gaan word, in hierdie gids gekopieer word. Dit kan behels dat die standaard sertifikate van `/apex/com.android.conscrypt/cacerts/` gekopieer word. Dit is noodsaaklik om die toestemmings en SELinux etikette van hierdie sertifikate dienooreenkomstig aan te pas.
3. **Bind Mounting vir Zygote**: Deur `nsenter` te gebruik, betree mens die Zygote se mount naamruimte. Zygote, wat die proses is wat verantwoordelik is vir die bekendstelling van Android toepassings, vereis hierdie stap om te verseker dat alle toepassings wat vanaf nou af begin, die nuut geconfigureerde CA sertifikate gebruik. Die opdrag wat gebruik word, is:
2. **Voorbereiding van CA-sertifikate**: Nadat die skryfbare gids opgestel is, moet die CA-sertifikate wat gebruik gaan word in hierdie gids gekopieer word. Dit kan insluit om die standaardsertifikate vanaf `/apex/com.android.conscrypt/cacerts/` te kopieer. Dit is noodsaaklik om die toegangsregte en SELinux-etikette van hierdie sertifikate ooreenkomstig aan te pas.
3. **Bind-mounting vir Zygote**: Deur `nsenter` te gebruik, betree mens Zygote se mount-naamruimte. Zygote, die proses wat verantwoordelik is vir die opstart van Android-toepassings, vereis hierdie stap om te verseker dat alle toepassings wat van nou af begin die nuut gekonfigureerde CA-sertifikate gebruik. Die opdrag wat gebruik word, is:
```bash
nsenter --mount=/proc/$ZYGOTE_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
```
Dit verseker dat elke nuwe app wat begin, sal voldoen aan die opgedateerde CA sertifikaat opstelling.
Dit verseker dat elke nuwe app wat begin die opgedateerde CA certificates-opstelling sal toepas.
4. **Toepassing van Veranderinge op Loopende Apps**: Om die veranderinge op reeds lopende toepassings toe te pas, word `nsenter` weer gebruik om elke app se naamruimte individueel binne te gaan en 'n soortgelyke bind mount uit te voer. Die nodige opdrag is:
4. **Toepassing van veranderinge op lopende apps**: Om die veranderinge op reeds lopende apps toe te pas, word `nsenter` weer gebruik om in elke app se namespace afsonderlik in te gaan en 'n soortgelyke bind mount uit te voer. Die nodige opdrag is:
```bash
nsenter --mount=/proc/$APP_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
```
5. **Alternatiewe Benadering - Sagte Herlaai**: 'n Alternatiewe metode behels die uitvoering van die bind mount op die `init` proses (PID 1) gevolg deur 'n sagte herlaai van die bedryfstelsel met `stop && start` opdragte. Hierdie benadering sal die veranderinge oor alle namespaces versprei, wat die behoefte om elke lopende app individueel aan te spreek, vermy. Hierdie metode is egter oor die algemeen minder verkieslik weens die ongerief van herlaai.
5. **Alternative Approach - Soft Reboot**: 'n Alternatiewe metode behels die uitvoer van die bind mount op die `init` proses (PID 1), gevolg deur 'n soft reboot van die bedryfstelsel met die `stop && start` opdragte. Hierdie benadering sal die veranderinge oor alle namespaces versprei, sodat dit nie nodig is om elke lopende app afsonderlik aan te spreek nie. Hierdie metode word egter oor die algemeen minder verkies weens die ongerief van herbegin.
## Verwysings
- [https://httptoolkit.com/blog/android-14-install-system-ca-certificate/](https://httptoolkit.com/blog/android-14-install-system-ca-certificate/)
- [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}}