MASTG-TECH-0008: Acessando Diretórios de App Data

Uma vez que você instalou o aplicativo, há mais informações a serem exploradas, onde ferramentas como o objection se tornam úteis.

Ao usar o objection, você pode recuperar diferentes tipos de informações, onde env mostrará todas as informações de diretório do aplicativo.

$ objection -g sg.vp.owasp_mobile.omtg_android explore

...g.vp.owasp_mobile.omtg_android on (google: 8.1.0) [usb] # env

Name                    Path
----------------------  ---------------------------------------------------------------------------
cacheDirectory          /data/user/0/sg.vp.owasp_mobile.omtg_android/cache
codeCacheDirectory      /data/user/0/sg.vp.owasp_mobile.omtg_android/code_cache
externalCacheDirectory  /storage/emulated/0/Android/data/sg.vp.owasp_mobile.omtg_android/cache
filesDirectory          /data/user/0/sg.vp.owasp_mobile.omtg_android/files
obbDir                  /storage/emulated/0/Android/obb/sg.vp.owasp_mobile.omtg_android
packageCodePath         /data/app/sg.vp.owasp_mobile.omtg_android-kR0ovWl9eoU_yh0jPJ9caQ==/base.apk

Entre essas informações, encontramos:

  • O diretório de dados interno (também conhecido como diretório sandbox) que está em /data/data/[nome-do-pacote] ou /data/user/0/[nome-do-pacote]
  • O diretório de dados externo em /storage/emulated/0/Android/data/[nome-do-pacote] ou /sdcard/Android/data/[nome-do-pacote]
  • O caminho para o pacote do aplicativo em /data/app/

O diretório de dados interno é usado pelo aplicativo para armazenar dados criados durante a execução e tem a seguinte estrutura básica:

...g.vp.owasp_mobile.omtg_android on (google: 8.1.0)  [usb] # ls
Type       ...  Name
---------  ...  -------------------
Directory  ...  cache
Directory  ...  code_cache
Directory  ...  lib
Directory  ...  shared_prefs
Directory  ...  files
Directory  ...  databases

Readable: True  Writable: True

Cada pasta tem sua própria finalidade:

  • cache: Esta localização é usada para cache de dados. Por exemplo, o cache do WebView é encontrado neste diretório.
  • code_cache: Esta é a localização do diretório de cache específico do aplicativo do sistema de arquivos, projetado para armazenar código em cache. Em dispositivos com Android 5.0 (nível de API 21) ou superior, o sistema excluirá quaisquer arquivos armazenados nesta localização quando o aplicativo ou toda a plataforma for atualizada.
  • lib: Esta pasta armazena bibliotecas nativas escritas em C/C++. Essas bibliotecas podem ter várias extensões de arquivo, incluindo .so e .dll (suporte x86). Esta pasta contém subdiretórios para as plataformas para as quais o aplicativo possui bibliotecas nativas, incluindo:
    • armeabi: código compilado para todos os processadores baseados em ARM
    • armeabi-v7a: código compilado para todos os processadores baseados em ARM, versão 7 e superior apenas
    • arm64-v8a: código compilado para todos os processadores ARM de 64 bits, versão 8 e superior apenas
    • x86: código compilado apenas para processadores x86
    • x86_64: código compilado apenas para processadores x86_64
    • mips: código compilado para processadores MIPS
  • shared_prefs: Esta pasta contém um arquivo XML que armazena valores salvos por meio das APIs SharedPreferences.
  • files: Esta pasta armazena arquivos regulares criados pelo aplicativo.
  • databases: Esta pasta armazena arquivos de banco de dados SQLite gerados pelo aplicativo durante a execução, por exemplo, arquivos de dados do usuário.

No entanto, o aplicativo pode armazenar mais dados não apenas dentro dessas pastas, mas também na pasta pai (/data/data/[nome-do-pacote]).

Consulte o capítulo "Testando Armazenamento de Dados)" para obter mais informações e melhores práticas sobre como armazenar com segurança dados sensíveis.