mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['', 'src/mobile-pentesting/android-app-pentesting/avd-androi
This commit is contained in:
parent
df06e5f98c
commit
ba5b4b7a72
@ -13,17 +13,17 @@ android-applications-basics.md
|
|||||||
|
|
||||||
## ADB (Android Debug Bridge)
|
## ADB (Android Debug Bridge)
|
||||||
|
|
||||||
Dit is die hoofgereedskap wat jy nodig het om aan 'n Android-toestel te koppel (geëmuleer of fisies).\
|
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 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.
|
**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.
|
Kyk na die volgende lys van [**ADB Commands**](adb-commands.md) om te leer hoe om adb te gebruik.
|
||||||
|
|
||||||
## Smali
|
## 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.\
|
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 dinamiese analise** wat aangebied gaan word. Hou dus **altyd hierdie moontlikheid in gedagte**.
|
[**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)
|
- [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)
|
- [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
|
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
|
```bash
|
||||||
mkdir splits
|
mkdir splits
|
||||||
adb shell pm path com.android.insecurebankv2 | cut -d ':' -f 2 | xargs -n1 -i adb pull {} 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
|
../../linux-hardening/privilege-escalation/android-rooting-frameworks-manager-auth-bypass-syscall-hook.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
## Statiese Analise
|
## Statiese Ontleding
|
||||||
|
|
||||||
Eerstens, om 'n APK te ontleed moet jy **na die Java-kode kyk** met 'n dekompiler.\
|
Eerstens, om 'n APK te analiseer moet jy **'n blik werp op die Java-code** gebruikmakend van 'n decompiler.\
|
||||||
Lees asseblief, [**read here to find information about different available decompilers**](apk-decompilers.md).
|
Lees asseblief [**hier vir inligting oor verskillende beskikbare decompilers**](apk-decompilers.md).
|
||||||
|
|
||||||
### Soek na interessante inligting
|
### 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**
|
**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
|
### 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.
|
- **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 `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.
|
- **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**: 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.
|
- **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**: 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.
|
- **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 noukeurig ondersoek word.
|
- **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 besondere aandag aan hoe URL schemes vir invoer-kwesbaarhede bestuur 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` attribuute dui die ondersteunde Android weergawes aan, wat die belangrikheid uitlig om nie verouderde, kwesbare Android weergawes te ondersteun nie.
|
- **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
|
||||||
|
|
||||||
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.\
|
**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 maak dit die gebruiker blind vir die feit dat hulle eintlik handelinge op die slagoffer-app verrig.
|
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}}
|
{{#ref}}
|
||||||
@ -104,82 +104,82 @@ tapjacking.md
|
|||||||
|
|
||||||
### Task Hijacking
|
### 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}}
|
{{#ref}}
|
||||||
android-task-hijacking.md
|
android-task-hijacking.md
|
||||||
{{#endref}}
|
{{#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:**
|
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:**
|
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**:
|
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**:
|
2. **Sekuriteitskwessies**:
|
||||||
- Gegewe die maklike toegang, word dit aanbeveel **om nie sensitiewe inligting op external storage te stoor nie**.
|
- Gegee die maklike toegang, is dit nie aanbeveel om sensitiewe inligting op external storage te stoor nie.
|
||||||
- External storage kan verwyder word of deur enige toepassing benader word, wat dit minder veilig maak.
|
- External storage kan verwyder of deur enige toepassing bereik word, wat dit minder veilig maak.
|
||||||
3. **Hantering van data vanaf external storage**:
|
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.
|
- 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 ontraden om uitvoerbare of klasklasse op external storage te stoor vir dinamiese lading.
|
- Dit word sterk ontried om uitvoerbare of klas-lêers op external storage te stoor vir dinamiese inlaai.
|
||||||
- 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.
|
- 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]
|
> [!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.
|
- **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-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.
|
- **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
|
### 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
|
```java
|
||||||
SSLSocketFactory sf = new cc(trustStore);
|
SSLSocketFactory sf = new cc(trustStore);
|
||||||
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
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
|
### Ander kontroles
|
||||||
|
|
||||||
- Dit word aanbeveel om die APK te **obfuskeer** om die reverse-engineer se werk vir aanvalers moeiliker te maak.
|
- 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 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 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 bankapps), behoort dit te kontroleer of ’n **emulator** gebruik word.
|
- As die app sensitief is (soos bank apps), 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.
|
- 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 kyk watter compiler/packer/obfuscator gebruik is om die APK te bou
|
- Gebruik [**APKiD**](https://github.com/rednaga/APKiD) om te kontroleer watter compiler/packer/obfuscator gebruik is om die APK te bou
|
||||||
|
|
||||||
### React Native Application
|
### 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}}
|
{{#ref}}
|
||||||
@ -188,7 +188,7 @@ react-native-application.md
|
|||||||
|
|
||||||
### Xamarin Applications
|
### 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}}
|
{{#ref}}
|
||||||
@ -197,17 +197,17 @@ Read the following page to learn how to easily access C# code of a xamarin appli
|
|||||||
|
|
||||||
### Superpacked Applications
|
### 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
|
### 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
|
### Bypass Biometric Authentication
|
||||||
|
|
||||||
@ -218,9 +218,9 @@ bypass-biometric-authentication-android.md
|
|||||||
|
|
||||||
### Ander interessante funksies
|
### Ander interessante funksies
|
||||||
|
|
||||||
- **Code execution**: `Runtime.exec(), ProcessBuilder(), native code:system()`
|
- **Kode-uitvoering**: `Runtime.exec(), ProcessBuilder(), native code:system()`
|
||||||
- **Send SMSs**: `sendTextMessage, sendMultipartTestMessage`
|
- **Stuur SMS'e**: `sendTextMessage, sendMultipartTestMessage`
|
||||||
- **Native functions** declared as `native`: `public native, System.loadLibrary, System.load`
|
- **Native functions** gedeclareer as `native`: `public native, System.loadLibrary, System.load`
|
||||||
- [Read this to learn **how to reverse native functions**](reversing-native-libraries.md)
|
- [Read this to learn **how to reverse native functions**](reversing-native-libraries.md)
|
||||||
|
|
||||||
### **Other tricks**
|
### **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.
|
||||||
|
|
||||||
.png>)
|
.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).
|
- [**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).
|
||||||
- Learn to set it up in this page:
|
- Leer om dit op te stel op hierdie bladsy:
|
||||||
|
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
avd-android-virtual-device.md
|
avd-android-virtual-device.md
|
||||||
{{#endref}}
|
{{#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._)
|
- [**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) (Free, but it doesn't support Frida or Drozer).
|
- [**Nox**](https://es.bignox.com) (Gratis, maar dit ondersteun nie Frida of Drozer nie).
|
||||||
|
|
||||||
> [!TIP]
|
> [!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:
|
||||||
|
|
||||||
.png>)
|
.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**:
|
Jy moet die **debugging** opsies aktiveer en dit sal goed wees as jy dit kan **root**:
|
||||||
|
|
||||||
1. **Settings**.
|
1. **Settings**.
|
||||||
2. (FromAndroid 8.0) Select **System**.
|
2. (FromAndroid 8.0) Kies **System**.
|
||||||
3. Select **About phone**.
|
3. Kies **About phone**.
|
||||||
4. Press **Build number** 7 times.
|
4. Druk **Build number** 7 keer.
|
||||||
5. Go back and you will find the **Developer options**.
|
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.\
|
> 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 baie **interesting** **data** vang wat jy later kan hersien.
|
> 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]
|
> [!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.\
|
> 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.\
|
||||||
> Anyway, it's still recommended to **not log sensitive information**.
|
> Dit word tog steeds aanbeveel om **nie sensitiewe inligting te log nie**.
|
||||||
|
|
||||||
**Copy/Paste Buffer Caching**
|
**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**
|
**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**
|
**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
|
### 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).\
|
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).\
|
||||||
Databases behoort te wees in `/data/data/the.package.name/databases` soos `/data/data/com.mwr.example.sieve/databases`
|
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)
|
### Drozer (Exploit Activities, Content Providers and Services)
|
||||||
|
|
||||||
From [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** allows you to **assume the role of an Android app** and interact with other apps. It can do **anything that an installed application can do**, such as make use of Android’s Inter-Process Communication (IPC) mechanism and interact with the underlying operating system. .\
|
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 tool om **exploit exported activities, exported services and Content Providers** te doen soos jy in die volgende afdelings sal leer.
|
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
|
### Exploiting exported Activities
|
||||||
|
|
||||||
[**Read this if you want to refresh what is an Android Activity.**](android-applications-basics.md#launcher-activity-and-other-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)
|
[**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
|
- PackageName is com.example.demo
|
||||||
- Exported ActivityName is com.example.test.MainActivity
|
- Exported ActivityName is com.example.test.MainActivity
|
||||||
```bash
|
```bash
|
||||||
adb shell am start -n com.example.demo/com.example.test.MainActivity
|
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]
|
> [!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
|
#### 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)\
|
[**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.
|
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**
|
### **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`.
|
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.\
|
'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...\
|
||||||
[**Leer hoe om Services met Drozer te exploit.**](drozer-tutorial/index.html#services)
|
[**Learn how to exploit Services with Drozer.**](drozer-tutorial/index.html#services)
|
||||||
|
|
||||||
### **Exploiting Broadcast Receivers**
|
### **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`.
|
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.\
|
'n Broadcast Receiver sal wag vir 'n tipe boodskap. Afhangende daarvan hoe die receiver die boodskap hanteer, kan dit kwesbaar wees.\
|
||||||
[**Leer hoe om Broadcast Receivers met Drozer te exploit.**](#exploiting-broadcast-receivers)
|
[**Learn how to exploit Broadcast Receivers with Drozer.**](#exploiting-broadcast-receivers)
|
||||||
|
|
||||||
### **Exploiting Schemes / Deep links**
|
### **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 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 gedeklareerde **scheme** oopmaak met **adb** of 'n **browser**:
|
Jy kan 'n verklaarde **scheme** oopmaak met **adb** of 'n **browser**:
|
||||||
```bash
|
```bash
|
||||||
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
|
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
|
```html
|
||||||
<!-- Browser regular link -->
|
<!-- Browser regular link -->
|
||||||
<a href="scheme://hostname/path?param=value">Click me</a>
|
<a href="scheme://hostname/path?param=value">Click me</a>
|
||||||
<!-- fallback in your url you could try the intent url -->
|
<!-- 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>
|
<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`**.
|
||||||
|
|
||||||
 (1) (1) (1).png>)
|
 (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`.\
|
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 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/).
|
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_).
|
'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.
|
- **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 kwesbaar vir man-in-the-middle (MITM)-aanvalle, wat aanvallers toelaat om die data te ontsleutel.
|
- **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 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.
|
- **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
|
||||||
|
|
||||||
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
|
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.
|
- 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 die presiese lêerpad, reëlnommer en 'n kodefragment vir elke ooreenkoms.
|
- Rapporteer presiese lêerpad, reëlnommer, en 'n kode-snippet vir elke trefffer.
|
||||||
- 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.
|
- 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
|
Install
|
||||||
- Vereistes: Python >= 3.8, Java on PATH, apktool
|
- Prereqs: Python >= 3.8, Java on PATH, apktool
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/aancw/SSLPinDetect
|
git clone https://github.com/aancw/SSLPinDetect
|
||||||
cd 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
|
python sslpindetect.py -a apktool_2.11.0.jar -f sample/app-release.apk -v
|
||||||
```
|
```
|
||||||
Voorbeeld patroonreëls (JSON)
|
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
|
```json
|
||||||
{
|
{
|
||||||
"OkHttp Certificate Pinning": [
|
"OkHttp Certificate Pinning": [
|
||||||
@ -471,55 +479,55 @@ Gebruik of brei signatures uit om proprietêre/aangepaste pinning-styls te ontde
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Notas en wenke
|
Notes and tips
|
||||||
- Vinnige skandering van groot apps via multi-threading en memory-mapped I/O; vooraf-gecompileerde regex verminder overhead en valse positiewe.
|
- 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
|
- Pattern collection: https://github.com/aancw/smali-sslpin-patterns
|
||||||
- Tipiese detectiedoelwitte om volgende te triage:
|
- Tipiese deteksiedoelwitte om volgende te triage:
|
||||||
- OkHttp: CertificatePinner gebruik, setCertificatePinner, okhttp3/okhttp pakketverwysings
|
- OkHttp: CertificatePinner usage, setCertificatePinner, okhttp3/okhttp package references
|
||||||
- Aangepaste TrustManagers: javax.net.ssl.X509TrustManager, checkServerTrusted overrides
|
- Custom TrustManagers: javax.net.ssl.X509TrustManager, checkServerTrusted overrides
|
||||||
- Aangepaste SSL contexts: SSLContext.getInstance + SSLContext.init met aangepaste managers
|
- Custom SSL contexts: SSLContext.getInstance + SSLContext.init with custom managers
|
||||||
- Deklaratiewe pinne in res/xml network security config en manifestverwysings
|
- Declarative pins in res/xml network security config and manifest references
|
||||||
- Gebruik die ooreenstemmende plekke om Frida hooks, statiese patches, of config-resensies te beplan voor dinamiese toetsing.
|
- 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/)
|
- 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 **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 **outomaties SSL Pinning te omseil** using **MobSF dynamic analysis** (explained below)
|
- Jy kan ook probeer om **automatically bypass SSL Pinning** met behulp van **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)
|
- 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
|
||||||
|
|
||||||
[Frida](https://www.frida.re) is 'n dinamiese instrumenteringspakket vir ontwikkelaars, reverse-engineers, en sekuriteitsnavorsers.\
|
[Frida](https://www.frida.re) is 'n dinamiese instrumentasie toolkit 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...**\
|
**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 jy moet weet hoe om Frida te gebruik.
|
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)
|
- 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)
|
- Some "GUI" for actions with 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)
|
- 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)
|
||||||
- You can find some Awesome Frida scripts here: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
|
- 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))
|
- 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}}
|
{{#ref}}
|
||||||
android-anti-instrumentation-and-ssl-pinning-bypass.md
|
android-anti-instrumentation-and-ssl-pinning-bypass.md
|
||||||
{{#endref}}
|
{{#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.
|
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
|
```bash
|
||||||
# With PID
|
# With PID
|
||||||
python3 fridump3.py -u <PID>
|
python3 fridump3.py -u <PID>
|
||||||
@ -528,63 +536,63 @@ python3 fridump3.py -u <PID>
|
|||||||
frida-ps -Uai
|
frida-ps -Uai
|
||||||
python3 fridump3.py -u "<Name>"
|
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
|
```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]+$"
|
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**
|
### **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
|
```bash
|
||||||
frida -U -f com.example.app -l frida-scripts/tracer-cipher.js
|
frida -U -f com.example.app -l frida-scripts/tracer-cipher.js
|
||||||
```
|
```
|
||||||
### **Fingerprint/Biometrics Bypass**
|
### **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
|
```bash
|
||||||
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>
|
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>
|
||||||
```
|
```
|
||||||
### **Agtergrondbeelde**
|
### **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`**
|
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
|
```bash
|
||||||
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||||
```
|
```
|
||||||
### **Android Application Analyzer**
|
### **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
|
### 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.
|
- **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.
|
- Exploits behels die deurgee van `Intent`-objekte as extras, wat omgerig kan word om onveilige operasies uit te voer.
|
||||||
- Dit kan nie-geëxporteerde komponente en content providers aan aanvallers blootstel.
|
- Dit kan non-exported komponente en content providers voor aanvallers openbaar maak.
|
||||||
- `WebView` se URL-naar-`Intent` omskakeling kan onbedoelde aksies vergemaklik.
|
- `WebView` se URL-na-`Intent` omskakeling kan onverwagte aksies vergemaklik.
|
||||||
|
|
||||||
### Android Client Side Injections and others
|
### 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.
|
- **SQL Injection:** Wanneer jy met dinamiese navrae of Content-Providers werk, maak seker dat jy geparameteriseerde navrae 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).
|
- **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 moet toegang tot die lêerstelsel gedeaktiveer hê (geaktiveer per verstek) - `(webview.getSettings().setAllowFileAccess(false);)`. [Meer inligting hier](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-applikasie die sessie beëindig, word die cookie nie herroep nie of dit kan selfs op die skyf gestoor word
|
- **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)
|
- [**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)
|
### [MobSF](https://github.com/MobSF/Mobile-Security-Framework-MobSF)
|
||||||
|
|
||||||
**Static analysis**
|
**Statiese ontleding**
|
||||||
|
|
||||||
.png>)
|
.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
|
```bash
|
||||||
docker pull opensecurity/mobile-security-framework-mobsf
|
docker pull opensecurity/mobile-security-framework-mobsf
|
||||||
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
|
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
|
### 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:
|
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.
|
- **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.
|
||||||
- Capture **HTTPS traffic**
|
- Vang **HTTPS** verkeer
|
||||||
- Use **Frida** to obtain **runtime** **information**
|
- 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.
|
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**
|
**Frida**
|
||||||
|
|
||||||
By default, it will also use some Frida Scripts to **bypass SSL pinning**, **root detection** and **debugger detection** and to **monitor interesting APIs**.\
|
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").\
|
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**").
|
||||||
|
|
||||||
.png>)
|
.png>)
|
||||||
|
|
||||||
Moreover, you have some Auxiliary Frida functionalities:
|
Moreover, you have some Auxiliary Frida functionalities:
|
||||||
|
|
||||||
- **Enumerate Loaded Classes**: It will print all the loaded classes
|
- **Enumerate Loaded Classes**: Dit sal al die gelaaide klasse uitdruk
|
||||||
- **Capture Strings**: It will print all the capture strings while using the application (super noisy)
|
- **Capture Strings**: Dit sal al die capture strings uitdruk terwyl die toepassing gebruik word (baie lawaaierig)
|
||||||
- **Capture String Comparisons**: Could be very useful. It will **show the 2 strings being compared** and if the result was True or False.
|
- **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**: Put the class name (like "java.io.File") and it will print all the methods of the class.
|
- **Enumerate Class Methods**: Sit die klasnaam (soos "java.io.File") in en dit sal al die metodes van die klas druk.
|
||||||
- **Search Class Pattern**: Search classes by pattern
|
- **Search Class Pattern**: Soek klasse per patroon
|
||||||
- **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.
|
- **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**".
|
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**
|
**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
|
```bash
|
||||||
help
|
help
|
||||||
shell ls
|
shell ls
|
||||||
@ -652,13 +660,13 @@ receivers
|
|||||||
```
|
```
|
||||||
**HTTP gereedskap**
|
**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.\
|
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, _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)).
|
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]
|
> [!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
|
> 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
|
### Assisted Dynamic Analysis with Inspeckage
|
||||||
|
|
||||||
Jy kan die tool kry by [**Inspeckage**](https://github.com/ac-pm/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.
|
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/)
|
### [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**
|
||||||
|
|
||||||
.png>)
|
.png>)
|
||||||
|
|
||||||
### [Qark](https://github.com/linkedin/qark)
|
### [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
|
```bash
|
||||||
pip3 install --user qark # --user is only needed if not using a virtualenv
|
pip3 install --user qark # --user is only needed if not using a virtualenv
|
||||||
qark --apk path/to/my.apk
|
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)
|
### [**ReverseAPK**](https://github.com/1N3/ReverseAPK.git)
|
||||||
|
|
||||||
- Wys alle uitgehaalde lêers vir maklike verwysing
|
- 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
|
- Ontleed AndroidManifest.xml vir algemene kwesbaarhede en gedrag
|
||||||
- Statiese bronkode-analise vir algemene kwesbaarhede en gedrag
|
- Statiese bronkode-analise vir algemene kwesbaarhede en gedrag
|
||||||
- Toestelinligting
|
- Toestelinligting
|
||||||
@ -697,9 +705,9 @@ reverse-apk relative/path/to/APP.apk
|
|||||||
```
|
```
|
||||||
### [SUPER Android Analyzer](https://github.com/SUPERAndroidAnalyzer/super)
|
### [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)
|
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.
|
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
|
./stacoan
|
||||||
```
|
```
|
||||||
### [AndroBugs](https://github.com/AndroBugs/AndroBugs_Framework)
|
### [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)
|
[Windows releases](https://github.com/AndroBugs/AndroBugs_Framework/releases)
|
||||||
```
|
```
|
||||||
python androbugs.py -f [APK file]
|
python androbugs.py -f [APK file]
|
||||||
@ -727,9 +735,9 @@ androbugs.exe -f [APK file]
|
|||||||
```
|
```
|
||||||
### [Androwarn](https://github.com/maaaaz/androwarn)
|
### [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...
|
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
|
|||||||
|
|
||||||
.png>)
|
.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
|
- Haal Java- en Smali-kode uit met verskillende gereedskap
|
||||||
- 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)
|
- 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)
|
||||||
- Ekstraheer privaat inligting uit die APK using regexps.
|
- Haal privaat inligting uit die APK met behulp van regexps.
|
||||||
- Analiseer die Manifest.
|
- Ontleed 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)
|
- Ontleed 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)
|
- Deobfuscate APK via [apk-deguard.com](http://www.apk-deguard.com)
|
||||||
|
|
||||||
### Koodous
|
### 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)>)
|
### [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)
|
### [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;
|
- laai 'n resource as 'n InputStream;
|
||||||
- feed the result to a class inheriting from FilterInputStream to decrypt it;
|
- voer die resultaat na 'n klas wat van FilterInputStream erf om dit te ontsleutel;
|
||||||
- do some useless obfuscation to waste a few minutes of time from a reverser;
|
- doen 'n paar nuttelose obfuskasies om 'n paar minute van 'n reverser se tyd te mors;
|
||||||
- feed the decrypted result to a ZipInputStream to get a DEX file;
|
- voer die ontsleutelde resultaat na 'n ZipInputStream om 'n DEX file te kry;
|
||||||
- finally load the resulting DEX as a Resource using the `loadDex` method.
|
- laastens laai die resulterende DEX as 'n Resource using die `loadDex` method.
|
||||||
|
|
||||||
### [DeGuard](http://apk-deguard.com)
|
### [DeGuard](http://apk-deguard.com)
|
||||||
|
|
||||||
**DeGuard reverses the process of obfuscation performed by Android obfuscation tools. This enables numerous security analyses, including code inspection and predicting libraries.**
|
**DeGuard 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
|
### [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)
|
### [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](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
|
### 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](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
|
## References
|
||||||
|
|
||||||
- [https://owasp.org/www-project-mobile-app-security/](https://owasp.org/www-project-mobile-app-security/)
|
- [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://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://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)
|
- [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: 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)
|
- [SSLPinDetect GitHub](https://github.com/aancw/SSLPinDetect)
|
||||||
- [smali-sslpin-patterns](https://github.com/aancw/smali-sslpin-patterns)
|
- [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://www.vegabird.com/yaazhini/](https://www.vegabird.com/yaazhini/)
|
||||||
- [https://github.com/abhi-r3v0/Adhrit](https://github.com/abhi-r3v0/Adhrit)
|
- [https://github.com/abhi-r3v0/Adhrit](https://github.com/abhi-r3v0/Adhrit)
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
Hierdie bladsy verskaf 'n praktiese werkvloei om dynamic analysis teen Android-apps te herstel wat instrumentation opspoor/root‑blokkeer of TLS pinning afdwing. Dit fokus op vinnige triage, algemene opsporings, en copy‑pasteable hooks/taktieke om dit te omseil sonder om te repak waar moontlik.
|
Hierdie bladsy bied 'n praktiese werkvloei om dynamic analysis teen Android‑apps te hervind wat instrumentation opspoor/wortel‑blokkeer of TLS pinning afdwing. Dit fokus op vinnige triage, algemene detecties, en kopieer‑plak hooks/taktieke om dit te omseil sonder herverpakking waar moontlik.
|
||||||
|
|
||||||
## Detection Surface (what apps check)
|
## 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
|
## Step 1 — Quick win: hide root with Magisk DenyList
|
||||||
|
|
||||||
- Skakel Zygisk in Magisk aan
|
- Skakel Zygisk in Magisk aan
|
||||||
- Skakel DenyList aan, voeg die teikenpakket by
|
- Skakel DenyList aan, voeg die teiken‑pakket by
|
||||||
- Herbegin en toets weer
|
- 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:
|
References:
|
||||||
- Magisk (Zygisk & DenyList): https://github.com/topjohnwu/Magisk
|
- Magisk (Zygisk & DenyList): https://github.com/topjohnwu/Magisk
|
||||||
|
|
||||||
## Step 2 — 30‑second Frida Codeshare tests
|
## Step 2 — 30‑sekonde Frida Codeshare tests
|
||||||
|
|
||||||
Probeer algemene drop‑in skripte voordat jy dieper delf:
|
Probeer algemene drop‑in skripte voordat jy dieper delf:
|
||||||
|
|
||||||
@ -35,22 +35,39 @@ Example:
|
|||||||
```bash
|
```bash
|
||||||
frida -U -f com.example.app -l anti-frida-detection.js
|
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 hê.
|
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/
|
- 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(). Spawn‑time 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(). Spawn‑time injection (-f) of gadgets word gevang; deur laat aan te heg nadat die UI gelaai is, kan dit verbyglip.
|
||||||
```bash
|
```bash
|
||||||
# Launch the app normally (launcher/adb), wait for UI, then attach
|
# Launch the app normally (launcher/adb), wait for UI, then attach
|
||||||
frida -U -n com.example.app
|
frida -U -n com.example.app
|
||||||
# Or with Objection to attach to running process
|
# Or with Objection to attach to running process
|
||||||
aobjection --gadget com.example.app explore # if using gadget
|
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:
|
Statiese triage-sleutelwoorde in Jadx:
|
||||||
- "frida", "gum", "root", "magisk", "ptrace", "su", "getprop", "debugger"
|
- "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)
|
- java.lang.Runtime.exec / ProcessBuilder (probing commands)
|
||||||
- android.os.SystemProperties.get (root/emulator heuristics)
|
- 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:
|
Oorskryf aangepaste guards om veilige waardes terug te gee sonder repacking:
|
||||||
```js
|
```js
|
||||||
@ -85,7 +102,7 @@ const AM = Java.use('android.app.ActivityManager');
|
|||||||
AM.getRunningAppProcesses.implementation = function () { return java.util.Collections.emptyList(); };
|
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
|
```js
|
||||||
Java.perform(() => {
|
Java.perform(() => {
|
||||||
Java.enumerateLoadedClasses({
|
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
|
```js
|
||||||
Java.perform(() => {
|
Java.perform(() => {
|
||||||
const Det = Java.use('com.example.security.DetectionManager');
|
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
|
```bash
|
||||||
frida-trace -n com.example.app -i "JNI_OnLoad"
|
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
|
```bash
|
||||||
# List exported symbols & JNI
|
# List exported symbols & JNI
|
||||||
nm -D libfoo.so | head
|
nm -D libfoo.so | head
|
||||||
@ -121,7 +186,7 @@ Interaktiewe/native reversing:
|
|||||||
- Ghidra: https://ghidra-sre.org/
|
- Ghidra: https://ghidra-sre.org/
|
||||||
- r2frida: https://github.com/nowsecure/r2frida
|
- r2frida: https://github.com/nowsecure/r2frida
|
||||||
|
|
||||||
Voorbeeld: neutriseer ptrace om eenvoudige anti‑debug in libc te omseil:
|
Voorbeeld: neutraliseer ptrace om eenvoudige anti‑debug in libc te omseil:
|
||||||
```js
|
```js
|
||||||
const ptrace = Module.findExportByName(null, 'ptrace');
|
const ptrace = Module.findExportByName(null, 'ptrace');
|
||||||
if (ptrace) {
|
if (ptrace) {
|
||||||
@ -137,26 +202,28 @@ reversing-native-libraries.md
|
|||||||
|
|
||||||
## Stap 7 — Objection patching (embed gadget / strip basics)
|
## 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
|
```bash
|
||||||
objection patchapk --source app.apk
|
objection patchapk --source app.apk
|
||||||
```
|
```
|
||||||
Aantekeninge:
|
Aantekeninge:
|
||||||
- Vereis apktool; verseker 'n huidige weergawe vanaf die amptelike gids om bouprobleme te vermy: https://apktool.org/docs/install
|
- Requires apktool; ensure a current version from the official guide to avoid build issues: https://apktool.org/docs/install
|
||||||
- Gadget injection stel instrumentation sonder root in staat, maar kan steeds deur sterker init‑time checks opgespoor word.
|
- Gadget injection enables instrumentation without root but can still be caught by stronger init‑time checks.
|
||||||
|
|
||||||
|
Opsioneel, voeg LSPosed modules en Shamiko by vir sterker root hiding in Zygisk environments, en curate DenyList om child processes te cover.
|
||||||
|
|
||||||
Verwysings:
|
Verwysings:
|
||||||
- Objection: https://github.com/sensepost/objection
|
- Objection: https://github.com/sensepost/objection
|
||||||
|
|
||||||
## Stap 8 — Valopsie: Patch TLS pinning vir netwerk‑sigbaarheid
|
## 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
|
```bash
|
||||||
apk-mitm app.apk
|
apk-mitm app.apk
|
||||||
# Then install the patched APK and proxy via Burp/mitmproxy
|
# Then install the patched APK and proxy via Burp/mitmproxy
|
||||||
```
|
```
|
||||||
- Gereedskap: https://github.com/shroudedcode/apk-mitm
|
- Gereedskap: https://github.com/shroudedcode/apk-mitm
|
||||||
- Vir netwerkkonfigurasie CA‑trust truuks (en Android 7+ user CA trust), sien:
|
- Vir netwerkconfig CA‑trust truuks (en Android 7+ user CA trust), sien:
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
make-apk-accept-ca-certificate.md
|
make-apk-accept-ca-certificate.md
|
||||||
@ -166,7 +233,7 @@ make-apk-accept-ca-certificate.md
|
|||||||
install-burp-certificate.md
|
install-burp-certificate.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
## Handige opdrag-snelverwysing
|
## Handige opdragte cheat‑sheet
|
||||||
```bash
|
```bash
|
||||||
# List processes and attach
|
# List processes and attach
|
||||||
frida-ps -Uai
|
frida-ps -Uai
|
||||||
@ -186,12 +253,12 @@ apk-mitm app.apk
|
|||||||
```
|
```
|
||||||
## Wenke & waarskuwings
|
## Wenke & waarskuwings
|
||||||
|
|
||||||
- Gee voorkeur aan late attach bo spawn wanneer apps by opstart crash
|
- Liewer later attach as om te spawn wanneer apps by opstart crash
|
||||||
- Sommige detecties word weer uitgevoer in kritieke flows (e.g., payment, auth) — hou hooks aktief tydens navigasie
|
- 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; dan hook methods om by runtime te verifieer
|
- Meng static en dynamic: string hunt in Jadx om klasse te kortlys; hook methods om by runtime te verifieer
|
||||||
- Versterkte apps kan packers en native TLS pinning gebruik — verwag om native code te reverseer
|
- 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/)
|
- [Reversing Android Apps: Bypassing Detection Like a Pro](https://www.kayssel.com/newsletter/issue-12/)
|
||||||
- [Frida Codeshare](https://codeshare.frida.re/)
|
- [Frida Codeshare](https://codeshare.frida.re/)
|
||||||
@ -202,5 +269,7 @@ apk-mitm app.apk
|
|||||||
- [r2frida](https://github.com/nowsecure/r2frida)
|
- [r2frida](https://github.com/nowsecure/r2frida)
|
||||||
- [Apktool install guide](https://apktool.org/docs/install)
|
- [Apktool install guide](https://apktool.org/docs/install)
|
||||||
- [Magisk](https://github.com/topjohnwu/Magisk)
|
- [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}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
@ -6,29 +6,29 @@ Baie dankie aan [**@offsecjay**](https://twitter.com/offsecjay) vir sy hulp tyde
|
|||||||
|
|
||||||
## Wat is
|
## 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).
|
- Die **Android SDK tools** - [Download here](https://developer.android.com/studio/releases/sdk-tools).
|
||||||
- Of **Android Studio** (met Android SDK gereedskap) - [Laai hier af](https://developer.android.com/studio).
|
- 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
|
```bash
|
||||||
brew tap homebrew/cask
|
brew tap homebrew/cask
|
||||||
brew install --cask android-sdk
|
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
|
```java
|
||||||
export JAVA_HOME=/Applications/Android\ Studio.app/Contents/jbr/Contents/Home
|
export JAVA_HOME=/Applications/Android\ Studio.app/Contents/jbr/Contents/Home
|
||||||
```
|
```
|
||||||
## GUI
|
## 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">
|
<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>
|
</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>
|
<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]
|
> [!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">
|
> <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>
|
<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).**\
|
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 beeld afgelaai is, kies net **`Volgende`** en **`Voltooi`**.
|
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**_.
|
||||||
|
|
||||||
.png>)
|
.png>)
|
||||||
|
|
||||||
## Opdraglyn hulpmiddel
|
## Opdraglyn-gereedskap
|
||||||
|
|
||||||
> [!WARNING]
|
> [!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
|
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat list device
|
||||||
|
|
||||||
@ -95,16 +95,15 @@ Name: Nexus 10
|
|||||||
OEM : Google
|
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.**\
|
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`:
|
||||||
Jy kan al die opsies lys met `sdkmanager`:
|
|
||||||
```bash
|
```bash
|
||||||
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat --list
|
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
|
```bash
|
||||||
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat "platforms;android-28" "system-images;android-28;google_apis;x86_64"
|
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
|
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat list target
|
||||||
----------
|
----------
|
||||||
@ -120,12 +119,12 @@ Type: Platform
|
|||||||
API level: 29
|
API level: 29
|
||||||
Revision: 4
|
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
|
```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"
|
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_".\
|
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 **die virtuele masjiene** wat jy geskep het lys met:
|
Nou kan jy **lys die virtuele masjiene** wat jy geskep het met:
|
||||||
```bash
|
```bash
|
||||||
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat list avd
|
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
|
Path: C:\Users\cpolo\.android\avd\Pixel_2_API_27_1.avd
|
||||||
Error: Google pixel_2 no longer exists as a device
|
Error: Google pixel_2 no longer exists as a device
|
||||||
```
|
```
|
||||||
### Voer Virtuele Masjien Uit
|
### Voer Virtuele Masjien uit
|
||||||
|
|
||||||
> [!WARNING]
|
> [!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.
|
> 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
|
```bash
|
||||||
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -list-avds
|
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -list-avds
|
||||||
AVD9
|
AVD9
|
||||||
Pixel_2_API_27
|
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
|
```bash
|
||||||
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "VirtualMachineName"
|
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "VirtualMachineName"
|
||||||
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9"
|
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
|
```bash
|
||||||
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -http-proxy 192.168.1.12:8080 -writable-system
|
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 name` : Start VM snapshot
|
||||||
- `-snapshot-list -snapstorage ~/.android/avd/Nexus_5X_API_23.avd/snapshots-test.img` : Lys al die geregistreerde snapshots
|
- `-snapshot-list -snapstorage ~/.android/avd/Nexus_5X_API_23.avd/snapshots-test.img` : Lys al die opgeneemde snapshots
|
||||||
|
|
||||||
**Netwerk**
|
**Netwerk**
|
||||||
|
|
||||||
- `-dns-server 192.0.2.0, 192.0.2.255` : Laat toe om komma-geskeide DNS-bedieners aan die VM aan te dui.
|
- `-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 die verkeer met Burp te vang)
|
- **`-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 om dit intern te konfigureer of met 'n toepassing soos "Super Proxy" of "ProxyDroid".
|
- 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.
|
- `-netdelay 200` : Stel die netwerklatensie-emulasie in millisekondes.
|
||||||
- `-port 5556` : Stel die TCP-poortnommer 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 in wat vir die konsole 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
|
- **`-tcpdump /path/dumpfile.cap`** : Vang al die verkeer in 'n lêer
|
||||||
|
|
||||||
**Stelsel**
|
**Stelsel**
|
||||||
|
|
||||||
- `-selinux {disabled|permissive}` : Stel die Security-Enhanced Linux-sekuriteitsmodule in op ofwel gedeaktiveer of permissiewe modus op 'n Linux-bedryfstelsel.
|
- `-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 in
|
- `-timezone Europe/Paris` : Stel die tydsone vir die virtuele toestel
|
||||||
- `-screen {touch(default)|multi-touch|o-touch}` : Stel die geëmuleerde aanraakskermmodus in.
|
- `-screen {touch(default)|multi-touch|o-touch}` : Stel die geëmuleerde raakskermmodus 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.
|
- **`-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
|
$ adb root
|
||||||
adbd cannot run as root in production builds
|
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}}
|
{{#ref}}
|
||||||
install-burp-certificate.md
|
install-burp-certificate.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
## Lekker AVD Opsies
|
## Goeie AVD-opsies
|
||||||
|
|
||||||
### Neem 'n Snapshot
|
### 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:
|
||||||
|
|
||||||
.png>)
|
.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}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
# Frida Tutorial
|
# Frida Handleiding
|
||||||
|
|
||||||
{{#include ../../../banners/hacktricks-training.md}}
|
{{#include ../../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
|
|
||||||
## Installasie
|
## Installasie
|
||||||
|
|
||||||
Installeer **frida tools**:
|
Installeer **frida tools**:
|
||||||
@ -9,8 +10,8 @@ Installeer **frida tools**:
|
|||||||
pip install frida-tools
|
pip install frida-tools
|
||||||
pip install frida
|
pip install frida
|
||||||
```
|
```
|
||||||
**Laai af en installeer** in die android die **frida server** ([Download the latest release](https://github.com/frida/frida/releases)).\
|
**Laai af en installeer** op die Android-toestel 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:
|
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
|
```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 &"
|
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 #List packages and processes
|
||||||
frida-ps -U | grep -i <part_of_the_package_name> #Get all the package name
|
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)\
|
**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).**
|
**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)\
|
**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 Bron kode**: [https://github.com/11x256/frida-android-examples](https://github.com/11x256/frida-android-examples)
|
**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)
|
**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).**
|
**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
|
```bash
|
||||||
frida-ps -U
|
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
|
#frozen so that the instrumentation can occur, and the automatically
|
||||||
#continue execution with our modified code.
|
#continue execution with our modified code.
|
||||||
```
|
```
|
||||||
### Basiese Python Skrip
|
### Basiese Python-skrip
|
||||||
```python
|
```python
|
||||||
import frida, sys
|
import frida, sys
|
||||||
|
|
||||||
@ -71,9 +125,9 @@ print('[ * ] Running Frida Demo application')
|
|||||||
script.load()
|
script.load()
|
||||||
sys.stdin.read()
|
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
|
```javascript
|
||||||
Java.perform(function () {
|
Java.perform(function () {
|
||||||
; rootcheck1.a.overload().implementation = function() {
|
; rootcheck1.a.overload().implementation = function() {
|
||||||
@ -83,14 +137,14 @@ return false;
|
|||||||
};
|
};
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
Haal java `exit()` aan
|
Hook java `exit()`
|
||||||
```javascript
|
```javascript
|
||||||
var sysexit = Java.use("java.lang.System")
|
var sysexit = Java.use("java.lang.System")
|
||||||
sysexit.exit.overload("int").implementation = function (var_0) {
|
sysexit.exit.overload("int").implementation = function (var_0) {
|
||||||
send("java.lang.System.exit(I)V // We avoid exiting the application :)")
|
send("java.lang.System.exit(I)V // We avoid exiting the application :)")
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Haal MainActivity `.onStart()` & `.onCreate()` aan
|
Hook MainActivity `.onStart()` en `.onCreate()`
|
||||||
```javascript
|
```javascript
|
||||||
var mainactivity = Java.use("sg.vantagepoint.uncrackable1.MainActivity")
|
var mainactivity = Java.use("sg.vantagepoint.uncrackable1.MainActivity")
|
||||||
mainactivity.onStart.overload().implementation = function () {
|
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)
|
var ret = this.onCreate.overload("android.os.Bundle").call(this, var_0)
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Haal android `.onCreate()` aan
|
Hook android `.onCreate()`
|
||||||
```javascript
|
```javascript
|
||||||
var activity = Java.use("android.app.Activity")
|
var activity = Java.use("android.app.Activity")
|
||||||
activity.onCreate.overload("android.os.Bundle").implementation = function (
|
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)
|
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
|
```javascript
|
||||||
function getString(data) {
|
function getString(data) {
|
||||||
var ret = ""
|
var ret = ""
|
||||||
@ -141,9 +195,9 @@ send("Decrypted flag: " + flag)
|
|||||||
return ret //[B
|
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
|
```javascript
|
||||||
var string_class = Java.use("java.lang.String") // get a JS wrapper for java's String class
|
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
|
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
|
```javascript
|
||||||
Java.choose("com.example.a11x256.frida_test.my_activity", {
|
Java.choose("com.example.a11x256.frida_test.my_activity", {
|
||||||
onMatch: function (instance) {
|
onMatch: function (instance) {
|
||||||
@ -171,10 +225,16 @@ console.log("Result of secret func: " + instance.secret())
|
|||||||
onComplete: function () {},
|
onComplete: function () {},
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
## Ander Frida tutorials
|
## Ander Frida-handleidings
|
||||||
|
|
||||||
- [https://github.com/DERE-ad2001/Frida-Labs](https://github.com/DERE-ad2001/Frida-Labs)
|
- [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}}
|
{{#include ../../../banners/hacktricks-training.md}}
|
||||||
|
@ -1,20 +1,32 @@
|
|||||||
# Installeer Burp Sertifikaat
|
# Installeer Burp-sertifikaat
|
||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#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
|
## 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**_
|
||||||
|
|
||||||
.png>)
|
.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.\
|
**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, jy kan dit soos volg hardloop:
|
Byvoorbeeld kan jy dit so begin:
|
||||||
```bash
|
```bash
|
||||||
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -http-proxy 192.168.1.12:8080 -writable-system
|
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
|
```bash
|
||||||
openssl x509 -inform DER -in burp_cacert.der -out burp_cacert.pem
|
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"
|
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 shell chmod 644 /system/etc/security/cacerts/$CERTHASHNAME #Assign privileges
|
||||||
adb reboot #Now, reboot the machine
|
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>
|
<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>
|
<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>
|
<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>
|
<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
|
```bash
|
||||||
# Create a separate temp directory, to hold the current certificates
|
# Create a separate temp directory, to hold the current certificates
|
||||||
# Otherwise, when we add the mount we can't read the current certs anymore.
|
# 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
|
### 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
|
```bash
|
||||||
mount -t tmpfs tmpfs /system/etc/security/cacerts
|
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.
|
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 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:
|
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
|
```bash
|
||||||
nsenter --mount=/proc/$ZYGOTE_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
|
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
|
```bash
|
||||||
nsenter --mount=/proc/$APP_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
|
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
|
## 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}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user