MASTG-TECH-0008: 访问应用数据目录

一旦安装了应用,就可以探索更多信息,像 objection 这样的工具就能派上用场。

使用 objection 时,可以检索各种信息,其中 env 会显示应用的所有目录信息。

$ 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

在这些信息中,我们发现

  • 内部数据目录(又名沙盒目录),位于 /data/data/[package-name]/data/user/0/[package-name]
  • 外部数据目录,位于 /storage/emulated/0/Android/data/[package-name]/sdcard/Android/data/[package-name]
  • 应用包的路径,位于 /data/app/

内部数据目录由应用用于存储运行时创建的数据,具有以下基本结构

...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

每个文件夹都有其自身的目的

  • cache:此位置用于数据缓存。例如,WebView 缓存位于此目录中。
  • code_cache:这是文件系统的应用程序特定缓存目录的位置,旨在存储缓存的代码。在运行 Android 5.0(API 级别 21)或更高版本的设备上,当应用或整个平台升级时,系统将删除存储在此位置的所有文件。
  • lib:此文件夹存储用 C/C++ 编写的本机库。这些库可以具有多种文件扩展名之一,包括 .so 和 .dll (x86 支持)。此文件夹包含应用具有本机库的平台的子目录,包括
    • armeabi:为所有基于 ARM 的处理器编译的代码
    • armeabi-v7a:为所有基于 ARM 的处理器(仅限版本 7 及以上)编译的代码
    • arm64-v8a:为所有 64 位基于 ARM 的处理器(仅限基于版本 8 及以上)编译的代码
    • x86:仅为 x86 处理器编译的代码
    • x86_64:仅为 x86_64 处理器编译的代码
    • mips:为 MIPS 处理器编译的代码
  • shared_prefs:此文件夹包含一个 XML 文件,用于存储通过 SharedPreferences APIs 保存的值。
  • files:此文件夹存储应用创建的常规文件。
  • databases:此文件夹存储应用在运行时生成的 SQLite 数据库文件,例如,用户数据文件。

但是,应用不仅可能在这些文件夹中存储更多数据,还可能在父文件夹 (/data/data/[package-name]) 中存储更多数据。

有关安全存储敏感数据的更多信息和最佳实践,请参阅“测试数据存储”章节。