From c7081983ae535af149a4b4ad94efcf8ba1018448 Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 19 Aug 2025 12:35:22 +0000 Subject: [PATCH] Translated ['src/mobile-pentesting/android-app-pentesting/frida-tutorial --- .../frida-tutorial/owaspuncrackable-1.md | 52 ++++++++++++++++++- 1 file changed, 50 insertions(+), 2 deletions(-) diff --git a/src/mobile-pentesting/android-app-pentesting/frida-tutorial/owaspuncrackable-1.md b/src/mobile-pentesting/android-app-pentesting/frida-tutorial/owaspuncrackable-1.md index ea354dba1..8f14d3240 100644 --- a/src/mobile-pentesting/android-app-pentesting/frida-tutorial/owaspuncrackable-1.md +++ b/src/mobile-pentesting/android-app-pentesting/frida-tutorial/owaspuncrackable-1.md @@ -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}}