Translated ['src/mobile-pentesting/android-app-pentesting/frida-tutorial

This commit is contained in:
Translator 2025-08-19 12:35:22 +00:00
parent 20c9ecba71
commit c7081983ae

View File

@ -12,7 +12,7 @@
Basato su [https://joshspicer.com/android-frida-1](https://joshspicer.com/android-frida-1)
**Hook la funzione \_exit()** e **funzione di decrittazione** in modo che stampi il flag nella console frida quando premi verifica:
**Hook la funzione _exit()** e **la funzione di decrittazione** in modo che stampi il flag nella console di frida quando premi verifica:
```javascript
Java.perform(function () {
send("Starting hooks OWASP uncrackable1...")
@ -55,7 +55,7 @@ send("Hooks installed.")
Basato su [https://joshspicer.com/android-frida-1](https://joshspicer.com/android-frida-1)
**Collegare rootchecks** e decrittare la funzione in modo che stampi il flag nella console di frida quando premi verifica:
**Hook rootchecks** e decritta la funzione in modo che stampi il flag nella console di frida quando premi verifica:
```javascript
Java.perform(function () {
send("Starting hooks OWASP uncrackable1...")
@ -115,4 +115,52 @@ return false
send("Hooks installed.")
})
```
---
## Soluzione 3 `frida-trace` (Frida ≥ 16)
Se non vuoi scrivere a mano i hook, puoi lasciare che **Frida** generi i stub Java per te e poi modificarli:
```bash
# Spawn the application and automatically trace the Java method we care about
aadb shell "am force-stop owasp.mstg.uncrackable1"
frida-trace -U -f owasp.mstg.uncrackable1 \
-j 'sg.vantagepoint.a.a.a("[B","[B")[B' \
-j 'sg.vantagepoint.a.c!*' \
--output ./trace
# The first run will create ./trace/scripts/sg/vantagepoint/a/a/a__B_B_B.js
# Edit that file and add the logic that prints the decrypted flag or
# returns a constant for the root-checks, then:
frida -U -f owasp.mstg.uncrackable1 -l ./trace/_loader.js --no-pause
```
Con Frida 16+ il codice stub generato utilizza già la moderna sintassi dei template **ES6** e verrà compilato con il runtime integrato *QuickJS* non hai più bisogno di `frida-compile`.
---
## Soluzione 4 One-liner con Objection (2024)
Se hai **Objection >1.12** installato puoi estrarre il flag con un solo comando (Objection avvolge Frida internamente):
```bash
objection -g owasp.mstg.uncrackable1 explore \
--startup-command "android hooking watch class sg.vantagepoint.a.a method a \n && android hooking set return_value false sg.vantagepoint.a.c * \n && android hooking invoke sg.vantagepoint.a.a a '[B' '[B'"
```
* `watch class` stampa il testo in chiaro restituito dalla routine AES
* `set return_value false` costringe ogni controllo root / debugger a segnalare *false*
* `invoke` ti consente di chiamare il metodo direttamente senza premere **Verify**.
> NOTA: Su Android 14 (API 34) devi eseguire Objection/Frida in modalità *spawn* (`-f`) perché *attach* è bloccato dalle restrizioni **seccomp-bpf** introdotte nell'ottobre 2024.
---
## Note su Android moderno (2023 - 2025)
* **libsu 5.x** e **Zygisk** nascondono *su* piuttosto bene; tuttavia, i controlli basati su Java in Livello 1 falliscono ancora se il file `/system/bin/su` esiste. Assicurati di abilitare **denylist** o semplicemente aggancia `java.io.File.exists()` con Frida.
* Frida 16.1 ha risolto un crash su **Android 12/13** causato dall'allocatore *Scudo* di Google. Se vedi `Abort message: 'missing SHADOW_OFFSET'`, aggiorna Frida (o usa la nightly pre-compilata 17.0).
* Poiché Play Integrity ha sostituito SafetyNet nel 2023, alcune app più recenti chiamano l'API **com.google.android.gms.tasks.Task**. Il Livello 1 NON lo fa, ma la stessa strategia di hooking mostrata qui funziona aggancia `com.google.android.gms.safetynet.SafetyNetClient` e restituisci un *EvaluationType* contraffatto.
## Riferimenti
* Annuncio di rilascio di Frida "Frida 16.0 (2023-04-02): correzioni di affidabilità per Android 12/13 e revisione dell'API spawn"
* Objection 1.12 "Modalità solo spawn per Android 14" (diapositive della presentazione BlackHat USA 2024)
{{#include ../../../banners/hacktricks-training.md}}