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

This commit is contained in:
Translator 2025-08-19 13:20:00 +00:00
parent 104b7f3f0e
commit e3faed1159

View File

@ -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}}