LOADING

加载过慢请开启缓存 浏览器默认开启

电子取证——Android文件系统结构

Android 取证的第一步不是急着逆向 APK,而是先知道数据会落在哪里。很多比赛题问账号、时间、Wi-Fi、聊天、照片、安装记录,本质上都是在问:你知不知道应该去哪个目录找。

这篇文章从取证角度认识 Android 文件系统结构。我们不追求把 Linux/Android 内核讲完,而是先建立一张“看到题目就知道去哪找”的地图。每一部分后面都配几道小题,方便把路径和题型对应起来。

1. Android 取证先看什么

拿到 Android 检材后,先判断它属于哪一类:

检材形态 常见内容 第一反应
整机镜像 systemvendoruserdata 等分区 重点看 /data,再看系统分区补设备信息
应用数据导出 某个包名目录 先看 shared_prefsdatabases
APK 文件 AndroidManifest.xmlclasses.dex 先看权限、包名、入口、硬编码配置
备份文件 .ab、厂商备份、手机助手备份 先解包,再还原应用目录结构
模拟器/虚拟机 vmdkosimgdata.vmdk 当成第二台 Android 来看

Android 题最常用的排查顺序是:

  1. 问账号、登录状态、配置、token:先看 shared_prefs
  2. 问聊天、记录、历史、业务数据:先看 databases
  3. 问附件、图片、导出文件:看 filescache 和外部存储。
  4. 问装没装、版本、安装时间:看 /data/system/packages.xml
  5. 问 Wi-Fi:看 /data/misc/wifi/WifiConfigStore.xml
  6. 问恶意行为、权限、C2:再看 APK 的 Manifest 和代码。

小题 1

题目问“某 APP 的登录账号和 token 是什么”,你已经知道包名是 com.example.chat,第一步最应该看哪里?

答案:

/data/data/com.example.chat/shared_prefs/

解析:账号、token、登录状态、设备 ID 这类轻量配置,经常保存在 SharedPreferences XML 中。不要一上来逆向 APK。

2. Android 分区和 /data 的意义

Android 底层分区很多,但取证入门先记住这些:

分区/挂载点 常见文件系统 取证意义
boot ramdisk 内核和启动 ramdisk
recovery ramdisk 恢复模式
/system EXT4 / EROFS 系统应用、系统框架,通常只读
/vendor EXT4 / EROFS 厂商 HAL、驱动相关组件
/product EXT4 / EROFS 产品级系统应用和配置
/data EXT4 / F2FS 用户数据,取证核心
/cache EXT4 OTA、缓存,旧设备更常见
metadata EXT4 加密元数据
super 动态分区容器 Android 10+ 动态分区,把 system/vendor/product 等逻辑分区放进去

从取证角度看,/system 告诉你系统有什么,/data 告诉你用户做过什么。绝大多数用户行为痕迹都在 /data

现代 Android 的 /data 常见文件系统是 EXT4 或 F2FS。F2FS 是为闪存优化的日志结构文件系统,很多手机的 userdata 会使用它。文件系统层面的删除恢复、时间戳、元数据分析会受文件系统影响,但比赛中更多时候是直接在解析出的目录和数据库里找证据。

/data 下最重要的几类目录

路径 意义
/data/data/<package>/ 应用私有数据,旧写法和常见展示路径
/data/user/0/<package>/ 主用户空间的应用私有数据,常与 /data/data 对应
/data/user_de/0/<package>/ Device Encrypted 数据,开机未解锁前也可用的一部分数据
/data/system/ 系统配置、账号、安装信息、锁屏、使用记录
/data/misc/ Wi-Fi、蓝牙、系统杂项配置
/data/media/0/ 用户外部存储,等价于常见的 /sdcard

/data/data/data/user/0 的关系很容易混淆。现在很多系统里 /data/data 可以理解为指向主用户 0 的兼容入口,而多用户、分身空间可能出现在 /data/user/10/data/user/999 等路径。

小题 2

题目问“一台 Android 手机是否存在分身空间,某 APP 是否也在分身空间中安装过”,除了 /data/user/0,还应该注意哪些路径?

答案:

/data/user/10/
/data/user/999/
其他非 0 的 /data/user/<userId>/ 目录

解析:主空间是 user 0,分身、工作资料、厂商隐私空间经常使用其他 userId。只看 /data/data/data/user/0 会漏证据。

3. 应用私有目录四件套

Android 应用最核心的目录是:

/data/data/<package>/

或者:

/data/user/0/<package>/

里面最常见的四个子目录是:

子目录 取证意义
shared_prefs/ XML 键值配置,账号、token、开关、时间、设备 ID 高频出现
databases/ SQLite 数据库,聊天、历史、业务数据高频出现
files/ 应用保存的普通文件、附件、导出文件、密钥文件
cache/ 缓存图片、临时文件、接口缓存,有时能恢复已删除内容

shared_prefs

SharedPreferences 是 Android 应用最常见的键值存储。文件通常是 XML:

<map>
<string name="username">alice</string>
<string name="token">eyJ...</string>
<boolean name="is_logged_in" value="true" />
<long name="last_login_at" value="1744796769000" />
</map>

常见 key:

key 形态 常见含义
usernameaccountphoneemail 账号
uiduser_idmember_id 用户 ID
tokensessionauth 登录凭据
device_idandroid_iddid 设备 ID
last_login_atcreate_timetimestamp 时间
db_passwordkey_iterations 数据库或加密参数

读 SharedPreferences 时不要只看 value,先看 key 名。很多题的答案就藏在 key 的语义里。

databases

Android 应用大量使用 SQLite。常见文件形式:

main.db
main.db-wal
main.db-shm

-wal 是 Write-Ahead Log,可能保存尚未合并进主库的新记录,也可能残留旧版本页面。取证导出数据库时,最好把 .db.db-wal.db-shm 一起导出,否则可能看到的记录不完整。

filescache

files/ 常见业务文件、附件、密钥、导出内容。cache/ 常见缓存图、头像、缩略图、接口响应。不要因为叫 cache 就忽略它,很多“原图删除但缩略图还在”的题都靠缓存拿分。

小题 3

你在 databases/ 里看到:

chat.db
chat.db-wal
chat.db-shm

只导出 chat.db 分析是否稳妥?

答案:不稳妥。应同时导出 chat.dbchat.db-walchat.db-shm

解析:Android SQLite 常用 WAL 模式,新记录可能还在 WAL 文件中。只看主库可能漏掉最新聊天或状态变化。

4. 系统级关键路径

应用目录解决的是单个 APP 的行为,系统级目录解决的是“这台手机本身”的问题。

路径 内容 常见题型
/data/system/packages.xml 已安装应用、版本、路径、签名、时间字段 APP 是否安装、版本、更新时间
/data/system/packages.list 包名与 UID 映射 目录属主、权限关联
/data/system/users/0/settings_secure.xml Android ID 等安全设置 设备标识、派生密钥
/data/system/users/0/accounts.db 系统账户 Google、微信、QQ、邮箱账户
/data/system/usagestats/0/ 应用使用统计 APP 使用时间、前台行为
/data/system/notification_log.db 通知记录,视系统而定 收到过什么通知
/data/system/gatekeeper.pattern.key 图案锁相关 锁屏破解
/data/system/gatekeeper.password.key 密码锁相关 锁屏破解
/data/system/device_policy.xml 设备策略 密码复杂度、长度约束

packages.xml

packages.xml 是比赛里非常常见的系统文件。高频字段包括:

字段 含义
name 包名
codePath APK 安装路径
version versionCode 或版本相关值
userId 系统分配 UID
ut 常用于最后更新时间
ft / it 常与首次安装、首次扫描或文件时间相关,需要交叉验证
<sigs> / <cert> 签名证书信息

不要机械认为 ftit 在所有 Android 版本里含义完全一致。比赛中如果问安装时间,最好用取证工具解析结果、APK 文件时间、包管理记录一起验证。

系统账户

账户数据库常见位置:

/data/system/users/0/accounts.db

常见 type

type 服务
com.google Google 账户
com.tencent.mm 微信
com.tencent.mobileqq QQ
com.xiaomi 小米
com.whatsapp WhatsApp
org.telegram.messenger Telegram

小题 4

题目问“某 APP 的版本号和最后更新时间是什么”,最优先看的系统文件是哪一个?

答案:

/data/system/packages.xml

解析:packages.xml 记录包名、安装路径、版本、更新时间、签名等信息,是安装类题目的第一入口。

5. Wi-Fi、蓝牙和设备标识

Android Wi-Fi 记录常见位置:

/data/misc/wifi/WifiConfigStore.xml
/data/misc/apexdata/com.android.wifi/WifiConfigStore.xml

不同版本路径可能变化,但文件名经常仍是 WifiConfigStore.xml

常见字段:

字段 含义
SSID Wi-Fi 名称
BSSID 接入点 MAC 地址
PreSharedKey Wi-Fi 密码或密钥表示
HiddenSSID 是否隐藏网络
NumAssociation 连接/关联次数
CreatorUid 创建该配置的 UID
IpAssignment DHCP 或 STATIC
ProxySettings 代理设置
RandomizedMacAddress 随机 MAC

注意:BSSID 是路由器/AP 的 MAC,不是手机自己的 MAC。很多初学者会把这两个搞混。

蓝牙配置常见在:

/data/misc/bluedroid/bt_config.conf

有些系统还会在数据库或 XML 中保存已配对设备、设备名、MAC 等。

小题 5

题目问“手机连接过的 Wi-Fi 接入点 MAC 地址是什么”,应该优先看 SSID 还是 BSSID

答案:BSSID

解析:SSID 是 Wi-Fi 名称,BSSID 才是具体接入点的 MAC 地址。一个 SSID 可以对应多个 BSSID。

6. 媒体、下载和外部存储

普通用户看到的“内部存储”通常对应:

/sdcard/
/storage/emulated/0/
/data/media/0/

常见目录:

路径 内容
/sdcard/DCIM/ 相机照片、视频
/sdcard/Pictures/ 图片、截图、应用保存图
/sdcard/Download/ 下载文件
/sdcard/Android/data/<package>/ 应用外部私有目录
/sdcard/Android/media/<package>/ 新版本常见媒体共享目录

媒体数据库也很重要:

/data/data/com.android.providers.media/databases/external.db
/data/data/com.android.providers.media.module/databases/external.db

高频字段:

字段 含义
_data 文件完整路径,旧版本更常见
_display_name 显示文件名
relative_path 相对路径,新版本更常见
date_added 加入媒体库时间,Unix 秒
date_modified 修改时间
mime_type MIME 类型
latitude / longitude GPS
is_trashed 是否在回收站

相册题不能只看 DCIM。应用私有图片、缓存图、缩略图经常出现在:

/sdcard/Android/data/<package>/
/data/data/<package>/cache/
/data/data/<package>/files/

小题 6

原图在相册里找不到,但题目提示某 APP 曾经显示过这张图,你还可以去哪里找?

答案示例:

/data/data/<package>/cache/
/data/data/<package>/files/
/sdcard/Android/data/<package>/
媒体缩略图缓存目录

解析:很多 APP 会缓存图片、头像、缩略图。原图删除不代表缓存一定同步删除。

7. 常见应用路径举例

不同 APP 路径不同,但思路相同:先用包名定位应用目录,再按四件套看。

应用/场景 常见路径 取证点
微信 /data/data/com.tencent.mm/MicroMsg/<hash>/EnMicroMsg.db 聊天记录,常需解密
微信配置 /data/data/com.tencent.mm/shared_prefs/auth_info_key_prefs.xml UIN、解密线索
Chrome /data/data/com.android.chrome/app_chrome/Default/History 浏览历史、下载
WebView /data/data/<pkg>/app_webview/Default/History 应用内网页访问
小米智能家庭 /data/data/com.xiaomi.smarthome/ 家庭、房间、设备 DID
Telegram /data/data/org.telegram.messenger/ 账号、缓存、数据库
WhatsApp /data/data/com.whatsapp/ 消息、媒体、群组
Termux /data/data/com.termux/files/ Linux 环境、脚本、命令痕迹
VMOS /sdcard/Android/data/com.VMOS.pro/osimg/ 虚拟 Android 系统

微信数据库经常要用 UIN 和设备信息派生密钥;Chrome/Chromium 时间戳常是从 1601 年开始的 WebKit 微秒;Android 普通业务时间戳常是 Unix 秒或毫秒。

小题 7

一个 Android 时间字段值是 1744796769000,它大概率是什么单位?

答案:Unix 毫秒时间戳。

解析:13 位整数通常是毫秒。换算时要除以 1000;如果直接当秒,会得到明显离谱的未来时间。

8. APK 什么时候看

APK 不是不能看,而是要在合适的时候看。

APK 本质是 ZIP,常见结构:

文件/目录 内容
AndroidManifest.xml 包名、权限、组件、入口
classes.dex Dalvik 字节码
resources.arsc 编译后资源表
res/ 资源
assets/ 原始资产
lib/ native so 库
META-INF/ 旧版签名信息

适合看 APK 的题:

  1. 问包名、应用名、权限、入口 Activity;
  2. 问 C2、Webhook、硬编码密钥;
  3. 问加密算法、数据库密码如何派生;
  4. 问恶意行为、后台服务、广播接收器;
  5. 问 Flutter、React Native、壳或 native 库。

但如果题目问登录账号、聊天记录、安装时间,通常先看本地数据,不要先逆向。

小题 8

题目问“这个 APP 是否申请了读取短信权限”,应该看应用数据目录还是 APK?

答案:看 APK 的 AndroidManifest.xml

解析:权限声明在 Manifest 中;应用数据目录更适合找用户数据和运行痕迹。

9. 做 Android 题的路线图

最后整理成一张路线图:

题目关键词 第一入口
账号、token、登录状态 shared_prefs/
聊天、历史、业务记录 databases/
图片、附件、缓存 files/cache//sdcard/Android/data/
APP 版本、安装时间 /data/system/packages.xml
Wi-Fi 名称、BSSID、密码 WifiConfigStore.xml
Android ID settings_secure.xml
系统账户 accounts.db
浏览器历史 Chrome/WebView History
权限、C2、硬编码密钥 APK Manifest、DEX、assets、lib
分身/虚拟机 /data/user/<非0>/、VMOS/Nox/雷电镜像

一句话总结:Android 取证不是背一个万能路径,而是根据题目类型判断数据层级:系统级、应用级、媒体级、还是 APK 代码级。