Pular para o conteúdo
Categoria: Pentest9 min de leitura

Pentest de Aplicacoes Mobile Android: Frida, MobSF e Lab com Genymotion

Por Lucas Andrade ·

Setup completo para analise dinamica de APKs proprios com Frida, MobSF e Genymotion, incluindo hooks praticos e checklist tecnico.

Pentest de Aplicacoes Mobile Android: Frida, MobSF e Lab com Genymotion
Neste artigo

Um APK e um arquivo zip disfarcado, e e exatamente isso que torna o pentest mobile Android tao divertido quanto cirurgico. Na Basilisk OffSec, montamos labs onde so testamos binarios de aplicacoes proprias ou com autorizacao escrita do dono do produto, porque engenharia reversa em app de terceiros sem consentimento e crime federal em quase todo lugar. Este guia percorre o fluxo completo: escopo e lei, um lab reproducivel, analise estatica, intercepcao de trafego, ataque ao backend, hooks personalizados, armazenamento local, defesas runtime e um relatorio limpo - na ordem em que um engagement real acontece.

Primeiro: escopo, contrato, modelo de ameaca#

Antes de qualquer hook com Frida, definimos escopo, contrato e modelo de ameaca, no mesmo espirito de Threat Modeling com STRIDE em Sprints: Exemplo Completo de Microservico. Fixe por escrito: quais package names estao no escopo, se o backend pode ser testado, quais classes de dados sao intocaveis e quem e o contato de emergencia num achado real. Sem isso, voce nao esta fazendo pesquisa, esta colecionando processos. Deixe tambem definido que achados so trafegam por canais cifrados.

O stack base para 2026#

O stack e simples: Genymotion Personal para emulacao x86_64 com Google Apps opcionais, MobSF rodando em Docker para analise estatica e dinamica automatizada, Frida 16.x com frida-tools no host, objection para acelerar workflows e jadx-gui para leitura de smali decompilado. Genymotion ganha do AVD por velocidade de IO e ja vem com ADB exposto na porta 5555. Levante uma maquina Android 13 root, instale magisk via setup-frida, e suba o frida-server-arm64 dentro de /data/local/tmp com permissao 755. Em menos de quinze minutos voce tem ambiente reproducivel, isolado da sua rede de producao, o que casa com a filosofia de Analise de Malware em Lab Isolado: Setup Seguro com FlareVM e Remnux.

Analise estatica com MobSF#

MobSF e seu primeiro pivo. Suba ele via docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest, jogue o APK na interface e ele extrai AndroidManifest, permissoes perigosas, hardcoded secrets, chamadas Janus, uso de WebView com setJavaScriptEnabled e ate domains expostos em network_security_config. O scan estatico costuma achar tokens AWS esquecidos, chaves Firebase com regras publicas e endpoints de staging que ninguem deveria ver. Use esse mapa de superficie para guiar suas hipoteses dinamicas, e nao caia na armadilha de tratar score numerico do MobSF como verdade absoluta. Como qualquer SAST, ele gera ruido, igual discutimos em AppSec Shift-Left: SAST, SCA e Secrets Scanning sem Travar o Time.

Decompilar e ler smali#

Abra o APK no jadx-gui e leia o Java decompilado mantendo a camada smali a mao para detalhes que o decompilador engole. Cace os classicos: Log.d com tokens, endpoints hardcoded, WebView.addJavascriptInterface, activities e receivers exportados no manifest, e constantes string para chaves cripto. Componentes exportados com android:exported="true" sem permissao sao ponto de entrada direto para um app malicioso no mesmo dispositivo. Marque cada componente desses como candidato de teste dinamico para o proximo passo.

Bypass de SSL pinning com Frida#

Com a superficie mapeada, abra o Frida. Um exemplo classico e bypass de SSL pinning para inspecionar trafego TLS no Burp ou no mitmproxy. Carregue o script com frida -U -f com.empresa.app -l ssl-bypass.js --no-pause; o hook reescreve checkServerTrusted da TrustManagerImpl e neutraliza okhttp3 CertificatePinner. Sem pinning ativo, voce vira proxy man-in-the-middle dentro do proprio emulador, captura JSONs autenticados e consegue testar a API por tras como faria em pentest web tradicional, com burp configurado igual em Pentest Web do Zero: Montando um Lab Seguro com DVWA, Juice Shop e Burp Suite. Lembre: pinning bypass so e legitimo no app que voce tem direito de auditar.

Ataque a API backend#

Depois do trafego limpo, comece a brincar com a API. Os mesmos vetores classicos voltam: mass assignment, IDOR em /v2/users/{id}, JWT com algoritmo none, GraphQL com introspeccao aberta. Aplique a metodologia de Pentest de APIs REST e GraphQL: Checklist Tecnico para Bug Bounty Legal e, para injecao em backend, valide candidatos com payloads parametrizados como ensinamos em SQL Injection na Pratica: Explorando, Detectando e Mitigando em Lab Controlado. Lembre que o app mobile e so um cliente: a falha real de autorizacao quase sempre fica no lado servidor, onde a UI do app foi erroneamente tratada como fronteira de seguranca.

WebView e addJavascriptInterface#

Outro alvo subestimado e o WebView interno. Se o app carrega HTML remoto sem allowlist, voce pode encadear XSS em contexto privilegiado usando addJavascriptInterface, chamando metodos Java expostos a partir do JS - em API levels antigos ate execucao remota via reflection. Verifique se setAllowFileAccess, setAllowUniversalAccessFromFileURLs e loadUrl se combinam com dados controlados pelo usuario. A mecanica de payload dissecamos em XSS Moderno: DOM, Stored e Reflected com Exemplos Reais em Ambiente de Teste. Um WebView que resolve URLs intent:// sem filtro tambem e candidato a deep-link hijacking.

Hooks personalizados: onde o pentester diferencia#

Tres scripts Frida que valem ouro: dump de chaves AES passadas para Cipher.init capturando o primeiro argumento de javax.crypto.SecretKeySpec; instrumentacao de SharedPreferences.Editor.putString para flagrar tokens salvos em claro; e hook em java.io.File para listar tudo gravado em /data/data/com.empresa.app durante o login. Combine com adb shell run-as com.empresa.app para puxar databases sqlite e inspecionar com sqlitebrowser. Encontramos, em auditoria recente, refresh_token persistido sem keystore, problema que vira facilmente takeover de conta.

Armazenamento local e keystore#

Dados sensiveis vao no Android Keystore com chaves ancoradas em hardware, nunca em SharedPreferences em claro nem num SQLite sem cifra. Revise sistematicamente databases/, shared_prefs/, o cache e caminhos de armazenamento externo procurando tokens, PII e material cripto. Um achado comum e uma camada cripto caseira cuja chave fica bem ao lado dos dados - na pratica texto puro. Recomende EncryptedSharedPreferences ou Jetpack Security, com chaves atadas ao StrongBox ou ao TEE e nao extraiveis sob root.

Revisar as defesas runtime#

Nao termine sem revisar runtime defenses. Cheque deteccao de root via RootBeer, deteccao de Frida por scan de portas locais (27042), deteccao de emulador via Build.FINGERPRINT e integridade via Play Integrity API. Documente como cada protecao foi contornada e proponha defesa em profundidade, nao bala de prata - um unico check de root que um one-liner de objection mata nao e protecao. Para o lado server, garanta hardening de SSH no bastion da API conforme Hardening de SSH 2026: Algoritmos, Certificados e Bastion Hosts.

Relatorio e limpeza#

O relatorio e o produto: por achado, CVSS, passos de reproducao, a classe ou endpoint afetado e uma remediacao concreta. Higienize artefatos, screenshots e PDFs antes de mandar relatorio, como em Higiene de Metadados: Limpando EXIF, PDF e Office antes de Publicar, para nao vazar caminhos internos nem nomes de cliente. No fim, apague os dados de app extraidos e reverta o snapshot. Um bom relatorio prioriza por risco real, nao pela quantidade de linhas no output da ferramenta.

objection para iteracao rapida#

Onde um script Frida sob medida da trabalho demais, objection acelera o ciclo. Depois de objection -g com.empresa.app explore, os comandos android sslpinning disable, android keystore list, android hooking list classes e memory search --string "token" batem nos alvos mais comuns em minutos. android hooking watch class_method ... --dump-args --dump-return mostra argumentos e retornos de um metodo ao vivo sem escrever uma linha de JavaScript. Objection e um wrapper do Frida, nao um substituto: para qualquer coisa nao trivial voce continua escrevendo seus hooks, mas para recon e bypass de pinning o one-liner e imbativel em velocidade. Lembre que toda acao do objection roda na memoria do processo do app e some no restart.

Cheque os intent-filter no manifest: um handler de deep link com android:autoVerify="false" ou um redirect de custom scheme (meuapp://callback) pode ser interceptado por um app malicioso no mesmo dispositivo. O hit classico e um fluxo OAuth que devolve o authorization code para um custom scheme nao verificado: um segundo app registra o mesmo scheme e captura o code. A contramedida sao App Links verificados (HTTPS com assetlinks.json) mais PKCE, pra que um code interceptado seja inutil sem o verifier. Teste cada endpoint de deep link exportado com adb shell am start -a android.intent.action.VIEW -d "..." e observe qual activity inicia sem autenticacao.

FAQ: Emulador ou dispositivo fisico?#

Para a maior parte do trabalho, um emulador Genymotion com root basta, e e mais rapido e descartavel. Voce precisa de dispositivo fisico quando o app usa attestation atada ao hardware, SafetyNet/Play Integrity com veredito estrito, NFC, perifericos Bluetooth ou sensores especificos que o emulador nao reproduz limpo. Uma mistura pragmatica: emulador para iteracao rapida, um celular de teste dedicado para os casos que o emulador bloqueia.

FAQ: Como burlo Play Integrity sem root fisico?#

Honestamente: nem sempre, e e de proposito. Play Integrity com MEETS_STRONG_INTEGRITY e atestado por hardware e busca rejeitar justamente os ambientes modificados que voce roda. Num teste autorizado voce documenta que o controle aguenta, em vez de quebra-lo a qualquer custo - um check de integridade que passa e um resultado positivo. Onde o app so checa o veredito fraco ou avalia o resultado no lado cliente, e exatamente essa a falha que voce reporta.

Conclusao e takeaway pratico#

Rode Genymotion, MobSF e Frida em maquina virtual dedicada, com snapshot limpo por engagement, e nunca acoplada a sua identidade pessoal. Percorra o fluxo em ordem fixa: escopo, estatico, decompilar, trafego, backend, hooks personalizados, storage, defesas runtime, relatorio. A maioria dos achados serios nao mora em cripto exotica, e sim em autorizacao banal do lado servidor e em tokens persistidos em claro - e ali que voce olha primeiro, e ali que esta o valor para o cliente.

Leituras relacionadas

Nenhum comentário ainda

Seja o primeiro a comentar.

Deixe seu comentário

Entre com sua conta Canverly para comentar. Você pode usar a mesma conta em qualquer site da rede.

Entrar com Canverly