Pentest de aplicações Android além dos scanners automatizados.
Simulamos ataques reais em apps Android — avaliando armazenamento, transporte, autenticação/autorização, engenharia reversa e proteção de APIs/backend. Relatório acionável, priorização por risco e reteste incluso.
Escopo: apps Android (APK), suas APIs e a comunicação app-servidor. Abordagens black/gray/white box conforme seu objetivo.
Por que fazemos
Proteja seu negócio.
Vulnerabilidades em apps Android expõem dados sensíveis e afetam a confiança dos usuários. Nossa abordagem manual e criteriosa vai além do scanner para identificar e explorar falhas com real impacto no seu app.
Análise de app, APIs e comunicação (app ⇄ servidor).
Engenharia reversa e descompilação para visão profunda.
Priorização por risco e recomendações práticas.
Reteste incluso para validar correções críticas.
Escopo: hoje testamos apenas aplicações Android. Se o seu produto também tem app iOS, avisamos na proposta e mantemos o escopo no que conseguimos testar com profundidade.
Na prática
Na prática: como testamos seu aplicativo mobile.
Demonstração com objection e Frida em ambiente de laboratório. App fictício com.labbank.app.
O ambiente: Android Studio com o app do banco em um celular virtual
Rodamos o aplicativo em um emulador Android controlado, igual a um celular real, e observamos por dentro tudo o que o app faz enquanto ele é usado normalmente.
Android Studio — LabBank-Pentest
Run📱 Pixel 7 · API 34 ▾Network InspectorLogcatProfiler
Corpo em texto claro · capturado no nível da app (Network Inspector)
objection — SSL Pinning bypass + hooking ao vivo
O pentester conecta no app via USB, desabilita o SSL Pinning e observa chamadas de autenticação em tempo real.
pentester@kali: ~/mobile/lab-bank
# Passo 1: conectamos no app pelo cabo USB e entramos no modo de análise$objection-gcom.labbank.appexplore _ _ _ _
___| |_|_|___ ___| |_|_|___ ___
| . | . | | -_| _| _| | . | |
|___|___|_|___|___|___|_|___|_|_|
Runtime Mobile Exploration by: @leonjza from @sensepost[tab] for command suggestions# Passo 2: desligamos o SSL Pinning, a trava que impede interceptar o tráfego do appcom.labbank.app on (Android: 14) [usb] # android sslpinning disable(agent) Registering job a1b2c3(agent)[a1b2c3] Found TrustManagerImpl, hooking checkServerTrusted()
(agent)[a1b2c3] Found OkHTTPv3 CertificatePinner, hooking check()
(agent)[a1b2c3] Found HostnameVerifier, hooking verify()
(agent)[a1b2c3] Found com.labbank.app.net.PinningHelper, hooking validateCert()
(agent)[+] SSL Pinning disabled. 4 hooks active# Passo 3: passamos a observar as funções de login do app enquanto ele é usadocom.labbank.app on (Android: 14) [usb] # android hooking watch class com.labbank.app.api.AuthService--dump-args--dump-return(agent) Registering job d4e5f6(agent)[d4e5f6] Hooking AuthService.login(String, String)
(agent)[d4e5f6] Hooking AuthService.refreshToken(String)
(agent)[d4e5f6] Hooking AuthService.validateOTP(String, String)
(agent)[+]3 methods hooked# Passo 4: o usuário faz login normalmente, e nós vemos tudo por dentro(agent)[d4e5f6] Called AuthService.login("maria@lab.local", "S3gur@2026")
(agent)[d4e5f6] Return: {"token":"eyJhbGciOi...R5cCI","userId":1042,"role":"customer"}(agent)[d4e5f6] Called AuthService.validateOTP("1042", "847291")
(agent)[d4e5f6] Return: {"status":"approved","session":"s3ss_7f8a9b..."}
# Resultado: email, senha e código OTP capturados em texto clarocom.labbank.app on (Android: 14) [usb] # _
1
SSL Pinning bypass: 4 hooks desabilitam todas as validações de certificado (TrustManager, OkHTTP, HostnameVerifier, custom). Agora o tráfego pode ser interceptado no Burp.
2
Class hooking: os 3 métodos da AuthService estão sendo observados com args e return values. Quando o usuário faz login, o pentester vê tudo.
3
Credenciais interceptadas: email, senha, código OTP e token JWT capturados em tempo real. Se o SSL Pinning fosse a única defesa, ela caiu.
Frida — Root detection bypass + interceptação de API
Script Frida customizado bypassa root detection e intercepta tráfego HTTP — pegando um IDOR no ato.
pentester@kali: ~/mobile/lab-bank
# Passo 1: injetamos nosso script de análise no app assim que ele abre$frida-U-lhooks.js-fcom.labbank.app ____
/ _ | Frida 16.5.2 - A world-class dynamic instrumentation toolkit
| (_| |
> _ | Commands:
/_/ |_| help -> Displays the help system
. . . . object? -> Display information about 'object'
. . . . exit/quit -> Exit
[Android 14::com.labbank.app]-># Passo 2: enganamos a checagem de root, o app passa a achar que roda num celular comum[*] Hooking RootBeer.isRooted()-> forced return:false[*] Hooking RootBeer.detectRootManagementApps()-> forced return:false[*] Hooking RootBeer.detectPotentiallyDangerousApps()-> forced return:false[*] Hooking c.l.a.security.IntegrityCheck.isCompromised()-> forced return:false[+] Root detection bypassed 4 checks neutralized# Passo 3: com o tráfego liberado, passamos a ler tudo o que o app troca com o servidor[*] Intercepting HTTP traffic...
[->]POSThttps://api.labbank.local/v1/auth/loginBody: {"email":"maria@lab.local","password":"[REDACTED]"}
[<-]200 OK(187ms)Body: {"token":"eyJhbG...kX9c","user":{"id":1042,"role":"customer"}}
[->]GEThttps://api.labbank.local/v1/accounts/1042/balanceAuth: Bearer eyJhbG...kX9c
[<-]200 OK(34ms)Body: {"balance":15420.75,"currency":"BRL"}
# Passo 4: trocamos o número da conta (1042) pelo de outro cliente (1043)[->]GEThttps://api.labbank.local/v1/accounts/1043/balance<- IDOR testAuth: Bearer eyJhbG...kX9c (token do user 1042)[!!]200 OK(38ms)SHOULD BE 403Body: {"balance":89200.00,"currency":"BRL","holder":"Carlos Mendes"}[->]GEThttps://api.labbank.local/v1/accounts/1043/transactions[!!]200 OK(41ms)SHOULD BE 403Body: [
{"id":"TX-9921","amount":-3500.00,"desc":"PIX para João Silva"},
{"id":"TX-9918","amount":12000.00,"desc":"Salário"},
{"id":"TX-9915","amount":-890.00,"desc":"Cartão crédito"}
][+] IDOR confirmed: user 1042 can access full financial data of user 1043
# Resultado: o app entregou saldo e transações de outro cliente, sem autorização (falha de IDOR)[Android 14::com.labbank.app]->_
1
Root detection bypass: RootBeer + check customizado do app — 4 funções hookadas, todas forçadas a retornar false. O app roda normal no device rooteado.
2
Interceptação de API: com SSL Pinning desabilitado (via objection antes), o Frida loga todas as chamadas HTTP — login, consulta de saldo, transações.
3
IDOR no ato: trocou /accounts/1042/ por /1043/ e a API retornou dados financeiros de outro cliente. A badge vermelha SHOULD BE 403 é o ponto.
Entregáveis
O que você recebe.
Relatório executivo: principais vulnerabilidades e riscos priorizados.
Relatório técnico com evidências, PoCs e passos de reprodução.
Mapa de superfície de ataque: visualização do sistema completo e de todas as vulnerabilidades identificadas.
Recomendações práticas com referências (OWASP/NIST/CWE/MSTG).
Debrief técnico + executivo, com sessão de perguntas e respostas.
Este site não usa cookies nem ferramentas de análise. Guardamos apenas um registro no seu navegador para não repetir este aviso. Saiba mais na Política de Privacidade.