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 95d4c9f68..22d9b6dd8 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 @@ Baseado em [https://joshspicer.com/android-frida-1](https://joshspicer.com/android-frida-1) -**Hook a função \_exit()**\_ e **função de descriptografia** para que imprima a flag no console do frida quando você pressionar verificar: +**Hook a função _exit()** e **função de descriptografia** para que imprima a flag no console do frida quando você pressionar verificar: ```javascript Java.perform(function () { send("Starting hooks OWASP uncrackable1...") @@ -115,4 +115,52 @@ return false send("Hooks installed.") }) ``` +--- + +## Solução 3 – `frida-trace` (Frida ≥ 16) + +Se você não quiser escrever hooks manualmente, pode deixar o **Frida** gerar os stubs Java para você e depois editá-los: +```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 +``` +Com o Frida 16+, o stub gerado já utiliza a sintaxe moderna de template **ES6** e será compilado com o runtime *QuickJS* embutido – você não precisa mais do `frida-compile`. + +--- + +## Solução 4 – Um comando com Objection (2024) + +Se você tiver **Objection >1.12** instalado, pode despejar a flag com um único comando (Objection envolve o 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` imprime o texto em claro retornado pela rotina AES +* `set return_value false` força cada verificação de root / depurador a relatar *false* +* `invoke` permite que você chame o método diretamente sem pressionar **Verify**. + +> NOTA: No Android 14 (API 34) você deve executar Objection/Frida em modo *spawn* (`-f`) porque *attach* está bloqueado por restrições de **seccomp-bpf** introduzidas em outubro de 2024. + +--- + +## Notas sobre Android Moderno (2023 - 2025) + +* **libsu 5.x** e **Zygisk** escondem *su* muito bem; no entanto, as verificações baseadas em Java no Nível 1 ainda falham se o arquivo `/system/bin/su` existir. Certifique-se de habilitar **denylist** ou simplesmente hook `java.io.File.exists()` com Frida. +* Frida 16.1 corrigiu uma falha no **Android 12/13** causada pelo alocador *Scudo* do Google. Se você ver `Abort message: 'missing SHADOW_OFFSET'`, atualize o Frida (ou use a versão noturna pré-compilada 17.0). +* Como o Play Integrity substituiu o SafetyNet em 2023, alguns aplicativos mais novos chamam a API **com.google.android.gms.tasks.Task**. O Nível 1 NÃO faz isso, mas a mesma estratégia de hooking mostrada aqui funciona – hook `com.google.android.gms.safetynet.SafetyNetClient` e retorne um *EvaluationType* forjado. + +## Referências + +* Anúncio de lançamento do Frida – "Frida 16.0 (2023-04-02): correções de confiabilidade do Android 12/13 e reformulação da API spawn" +* Objection 1.12 – "Modo apenas spawn para Android 14" (slides da palestra BlackHat USA 2024) + {{#include ../../../banners/hacktricks-training.md}}