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.