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 Appno 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 agorana 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?