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]
) 中存储更多数据。
有关安全存储敏感数据的更多信息和最佳实践,请参阅“测试数据存储”章节。