Guia

Capture o tráfego de um app Android sem proxy Wi-Fi

O app Busymate DevTools para Android roda um motor de captura baseado em VPN no próprio celular. Sem proxy de desktop, sem Wi-Fi compartilhada, sem configuração de proxy — e um relato honesto de quais apps realmente são descriptografados em um celular sem root.

No Android, o caminho clássico para ler o HTTPS de um app é um proxy em um notebook mais uma entrada manual de proxy nas configurações de Wi-Fi do celular. Funciona até você sair daquela rede. O Busymate DevTools tira o proxy do caminho: o app se registra como a VPN do celular, vê todas as conexões que o celular faz, descriptografa os hosts que você escolher com um certificado gerado no dispositivo e envia o resultado para o mesmo dashboard usado pelo app iOS e pelo proxy de desktop.

Há um fato da plataforma que este guia não vai esconder. Desde o Android 7.0, um app ignora certificados instalados pelo usuário a menos que opte por aceitá-los. Isso significa que o celular consegue capturar o tráfego de todos os apps, mas só consegue descriptografar os apps que confiam no repositório de certificados do usuário — na prática, seus próprios builds de debug, além dos navegadores do sistema e clientes parecidos. O passo cinco mostra a mudança de um único arquivo que coloca seu app nessa lista, e o guia sobre pinning cobre o resto.

Antes de começar

O que você precisa

Um celular, uma conta e — se você quiser corpos descriptografados do seu próprio app — um build de debug que você consiga recompilar.

  • Um celular com Android 7.0 ou superior. Não é preciso root nem computador para capturar.

  • Uma conta Busymate. Entre com o Google ou com e-mail e senha; entrar pareia o celular ao seu dashboard.

  • Os nomes de host da API que você quer ler, para a lista de SSL proxy. Só os hosts listados são descriptografados.

  • Para o seu próprio app: a possibilidade de recompilar o build de debug com uma configuração de segurança de rede de um único arquivo, para que ele confie no certificado que o celular gerou.

Passo a passo

Faça na ordem

Seis passos. A configuração guiada do app cuida das permissões da plataforma uma tela de cada vez; o único trabalho fora do app é a mudança no build de debug do passo cinco.

  1. 01

    Instale o app e aceite o consentimento de captura

    Instale o Busymate DevTools pelo Google Play, ou faça sideload do APK de release assinado a partir da página do Android se a listagem ainda não estiver visível na sua região. No primeiro uso, o app pede seu consentimento explícito para capturar tráfego de rede. A captura é opcional e fica desligada até você ligá-la — nada roda em segundo plano antes de você autorizar.

    A tela de consentimento de captura de rede no Busymate DevTools para Android
  2. 02

    Entre na conta — o celular se pareia sozinho

    Entre com o Google ou com seu e-mail e senha. Como no iOS, entrar é parear: o app troca a sessão por uma credencial de dispositivo de longa duração guardada no armazenamento criptografado do app, e o celular aparece como Online na aba Devices do dashboard logo em seguida. A tela inicial mostra o nome do dispositivo, uma pílula de conta, o cartão com o botão de captura e um cartão de prontidão com uma engrenagem para as Configurações.

    A tela inicial do Busymate DevTools no Android com o botão de captura e o cartão de prontidão
  3. 03

    Adicione os domínios que quer descriptografar

    Abra as Configurações pela engrenagem e vá em SSL Proxying. Liste os hosts cujos corpos HTTPS você quer ler; todo o resto continua criptografado de ponta a ponta e aparece como um nome de host com a contagem de requisições. Um asterisco e um ponto no início cobrem um domínio e todos os seus subdomínios. A mesma seção contém os controles de descriptografia e uma lista Ignore Hosts para o ruído de fundo que você nunca quer no feed.

    Você não precisa fazer isso no celular. O dashboard edita a mesma lista por dispositivo, e uma alteração lá é enviada ao celular ao vivo, então um colega pode adicionar um host enquanto você continua testando.

  4. 04

    Execute a configuração guiada

    Toque no cartão de prontidão. A configuração guiada passa por três permissões da plataforma, uma tela de cada vez: permitir a notificação de captura, instalar no repositório de certificados do usuário o certificado que o app gerou só para você, e aprovar o pedido de conexão VPN do próprio Android. Cada etapa é marcada como concluída conforme você avança, e o cartão fica pronto quando as três passam.

    Esse certificado é pessoal do seu dispositivo — é criado no celular, nunca baixado de um servidor compartilhado — e é o que permite ao app apresentar um certificado confiável para cada host que você escolheu descriptografar.

    A configuração guiada de captura no Busymate DevTools para Android
  5. 05

    Faça seu próprio app confiar no repositório de certificados do usuário

    Este é o passo que nenhuma ferramenta de captura para Android consegue pular. Desde o Android 7.0, um app que mira esse nível ou superior confia por padrão apenas no repositório de certificados do sistema, então seu app vai fechar a conexão assim que o celular apresentar o certificado gerado. A solução é uma pequena configuração de segurança de rede, restrita a builds de debug, que adiciona o repositório do usuário ao lado do repositório do sistema. O Android remove completamente o bloco de debug-overrides dos builds de release, então ele não pode vazar para produção.

    Crie o arquivo abaixo no seu app, mantenha a âncora do sistema junto da âncora do usuário para que o HTTPS comum continue funcionando, referencie-o na tag application do seu manifesto, depois recompile e instale o build de debug. Reinstalar o binário antigo não adianta — a confiança vive no app recém-compilado.

    A configuração de segurança de rede só para debug, seguida da referência no manifesto
    xml
    <!-- app/src/main/res/xml/network_security_config.xml -->
    <network-security-config>
      <debug-overrides>
        <trust-anchors>
          <certificates src="user" />
          <certificates src="system" />
        </trust-anchors>
      </debug-overrides>
    </network-security-config>
    
    <!-- AndroidManifest.xml -->
    <application
        android:networkSecurityConfig="@xml/network_security_config"
        ... >
  6. 06

    Ligue a captura e inspecione

    Ligue o botão de captura. O Android mostra o ícone de chave VPN na barra de status, e toda requisição que o celular faz começa a chegar no feed do dashboard e na própria tela Network do app — uma linha de status, pílulas de estatísticas, chips de categoria e uma lista agrupada por host com busca na parte de baixo. Toque em um host e depois em uma requisição para ver o detalhe completo: abas General, Header, Summary, Timing e Body tanto para a requisição quanto para a resposta.

    Abra seu app e dispare uma chamada. As entradas HTTPS dele agora mostram cabeçalhos legíveis e um corpo descriptografado em vez de um túnel opaco. Quando terminar, desligue a captura — a VPN cai, e o certificado e o app podem ser removidos como qualquer outro.

    O feed Network em tempo real no Busymate DevTools para Android

Solução de problemas

O que pode dar errado

A maioria dos problemas no Android é a plataforma sendo rígida com certificados, e o feed diz em qual deles você esbarrou.

  • O tráfego do seu próprio app ainda aparece criptografado

    A configuração de segurança de rede não entrou em vigor. Confirme que você recompilou e instalou o build de debug depois de adicioná-la, que o manifesto aponta para o arquivo e que o certificado está no repositório do usuário. Se a configuração fica em um source set só de debug, o atributo do manifesto também precisa estar no manifesto de debug.

  • Um app da loja que você não compilou continua opaco

    Esperado em um celular sem root: aquele app nunca optou por aceitar certificados do usuário, então o celular registra a conexão apenas como metadados. Descriptografá-lo exige um dispositivo com root onde o certificado possa ir para o repositório do sistema — o nível que a farm de celulares usa — e mesmo isso não abre um app que fixa o próprio certificado.

  • O pedido de VPN do Android fica voltando

    Outro app de VPN está ativo, ou a aprovação anterior foi revogada nas configurações de VPN do sistema. Só uma VPN pode rodar por vez; desconecte a outra e aprove o pedido de novo pela configuração guiada.

  • A notificação de captura nunca apareceu

    A permissão de notificação foi negada no primeiro pedido. Reative-a para o Busymate DevTools nas configurações de apps do sistema; a configuração guiada verifica de novo e marca a etapa como concluída.

  • Um host está na lista, mas a regra por caminho não dispara

    Regras que casam por caminho precisam que o host esteja descriptografado; em um host que passa criptografado só o nome do host é visível. Adicione primeiro o host à lista de SSL proxy e depois verifique a regra novamente.

Perguntas frequentes

Perguntas que as pessoas fazem

Preciso de root?

Não para capturar, e não para descriptografar seus próprios builds de debug ou clientes que confiam no repositório do usuário. Root só é necessário para mover o certificado para o repositório do sistema, de modo que apps que você não compilou confiem nele.

Isso é um proxy por baixo dos panos?

Não. O app é registrado como a VPN do celular, então vê o tráfego de todos os apps por Wi-Fi e dados móveis sem tocar em nenhuma configuração de proxy. Existe um proxy de desktop separado para navegadores e backends, mas este guia nunca o usa.

O que acontece com os apps que não estão na minha lista?

Continuam funcionando exatamente como antes. As conexões deles são registradas apenas como host e tempo e nunca são descriptografadas, e o Ignore Hosts pode tirar as mais barulhentas do feed por completo.

O tráfego do seu app, lido no celular

Instale o app, execute a configuração guiada, adicione a configuração de debug de um arquivo e veja as requisições do seu app chegarem descriptografadas.

Ask your mate