Skip to content

MASTG-TECH-0003: Obtendo e Extraindo Apps

Existem várias maneiras de extrair arquivos APK de um dispositivo. Você precisará decidir qual é o método mais fácil dependendo se o aplicativo é público ou privado.

Lojas de Aplicativos Alternativas

Uma das opções mais fáceis é baixar o APK de sites que espelham aplicativos públicos da Google Play Store. No entanto, lembre-se de que esses sites não são oficiais e não há garantia de que o aplicativo não tenha sido reempacotado ou contenha malware. Alguns sites confiáveis que hospedam APKs e não são conhecidos por modificar aplicativos, além de listarem checksums SHA-1 e SHA-256 dos apps, são:

Esteja ciente de que você não tem controle sobre esses sites e não pode garantir o que eles farão no futuro. Use-os apenas se for sua única opção restante.

Usando gplaycli

Você pode usar gplaycli para baixar (-d) o APK selecionado especificando seu AppID (adicione -p para mostrar uma barra de progresso e -v para verbose):

$ gplaycli -p -v -d com.google.android.keep
[INFO] GPlayCli version 3.26 [Python3.7.4]
[INFO] Configuration file is ~/.config/gplaycli/gplaycli.conf
[INFO] Device is bacon
[INFO] Using cached token.
[INFO] Using auto retrieved token to connect to API
[INFO] 1 / 1 com.google.android.keep
[################################] 15.78MB/15.78MB - 00:00:02 6.57MB/s/s
[INFO] Download complete

O arquivo com.google.android.keep.apk estará em seu diretório atual. Como você pode imaginar, essa abordagem é uma maneira muito conveniente de baixar APKs, especialmente no que diz respeito à automação.

Você pode usar suas próprias credenciais ou token do Google Play. Por padrão, o gplaycli usará um token fornecido internamente.

Extraindo o Pacote do Aplicativo do Dispositivo

Obter pacotes de aplicativos do dispositivo é o método recomendado, pois podemos garantir que o aplicativo não foi modificado por terceiros. Para obter aplicativos de um dispositivo com root ou sem root, você pode usar os seguintes métodos:

Use adb pull para recuperar o APK. Se você não sabe o nome do pacote, o primeiro passo é listar todos os aplicativos instalados no dispositivo:

adb shell pm list packages

Depois de localizar o nome do pacote do aplicativo, você precisa do caminho completo onde ele está armazenado no sistema para baixá-lo.

adb shell pm path <nome do pacote>

Com o caminho completo para o APK, você agora pode simplesmente usar adb pull para extraí-lo.

adb pull <caminho do apk>

O APK será baixado em seu diretório de trabalho.

Alternativamente, também existem aplicativos como APK Extractor que não exigem root e podem até compartilhar o APK extraído por seu método preferido. Isso pode ser útil se você não quiser conectar o dispositivo ou configurar o adb pela rede para transferir o arquivo.

Testando Instant Apps

Com o Google Play Instant, você pode criar Instant Apps que podem ser lançadas instantaneamente a partir de um navegador ou do botão "experimentar agora" da loja de aplicativos a partir do Android 5.0 (API level 21). Eles não exigem nenhuma forma de instalação. Existem alguns desafios com um Instant App:

  • Há uma quantidade limitada de tamanho que você pode ter com um Instant App.
  • Apenas um número reduzido de permissões pode ser usado, conforme documentado na documentação do Android Instant app.

A combinação desses fatores pode levar a decisões inseguras, como: remover grande parte da lógica de autorização/autenticação/confidencialidade de um aplicativo, o que permite vazamento de informações.

Nota: Instant Apps exigem um App Bundle. App Bundles são descritos na seção "App Bundles)" do capítulo "Visão Geral da Plataforma Android".

Considerações de Análise Estática:

A análise estática pode ser feita após a engenharia reversa de um Instant App baixado ou analisando o App Bundle. Quando você analisa o App Bundle, verifique o Android Manifest para ver se dist:module dist:instant="true" está definido para um determinado módulo (seja a base ou um módulo específico com dist:module definido). Em seguida, verifique os vários pontos de entrada, quais pontos de entrada estão definidos (por meio de <data android:path="</PATH/AQUI>" />).

Agora siga os pontos de entrada, como você faria para qualquer Activity e verifique:

  • Existe algum dado recuperado pelo aplicativo que deve exigir proteção de privacidade desses dados? Se sim, todos os controles necessários estão implementados?
  • Todas as comunicações estão protegidas?
  • Quando você precisa de mais funcionalidades, os controles de segurança corretos também são baixados?

Considerações de Análise Dinâmica:

Existem várias maneiras de iniciar a análise dinâmica do seu Instant App. Em todos os casos, você primeiro precisará instalar o suporte para Instant Apps e adicionar o executável ia ao seu $PATH.

A instalação do suporte para Instant Apps é feita através do seguinte comando:

cd caminho/para/android/sdk/tools/bin && ./sdkmanager 'extras;google;instantapps'

Em seguida, você deve adicionar caminho/para/android/sdk/extras/google/instantapps/ia ao seu $PATH.

Após o preparo, você pode testar Instant Apps localmente em um dispositivo executando Android 8.1 (API level 27) ou superior. O aplicativo pode ser testado de diferentes maneiras:

  • Teste o aplicativo localmente: Implante o aplicativo via Android Studio (e marque a caixa Implantar como Instant App no diálogo Executar/Configuração) ou implante o aplicativo usando o seguinte comando:
ia run saída-do-comando-de-build <artefato-do-app>
  • Teste o aplicativo usando o Play Console:
  • Faça upload do seu App Bundle para o Google Play Console.
  • Prepare o pacote enviado para um lançamento na trilha de teste interno.
  • Faça login em uma conta de testador interno em um dispositivo e inicie sua experiência instantânea a partir de um link externo preparado ou via botão experimentar agora na loja de aplicativos da conta do testador.

Agora que você pode testar o aplicativo, verifique se:

  • Existem dados que exigem controles de privacidade e se esses controles estão implementados.
  • Todas as comunicações estão suficientemente protegidas.
  • Quando você precisa de mais funcionalidades, os controles de segurança corretos também são baixados para essas funcionalidades?