数据存储格式

手机 App 的数据落地基本逃不出这几种格式,识别格式 → 选对应解析工具,是手机数据取证的基本功。

image-20241028174225664.png

SQLite 数据库

手机端绝对主力:安卓/iOS 的短信、通讯录、通话记录、聊天记录(微信 MM.sqlite/EnMicroMsg.db、QQ)几乎都是 SQLite。

  • 扩展名:.db .sqlite .db3 .sqlitedb,也有无扩展名的
  • 文件头魔数:SQLite format 3\0(53 51 4C 69 74 65)
  • WAL 机制:配套文件 -wal(预写日志)/ -journal(回滚日志)。最新写入的数据可能还在 -wal 里没合并进主库——取证时必须把 -wal、-shm 一起提取,否则漏数据;用 DB Browser 打开时会自动合并
  • 删除恢复:删除的记录不立即抹除,留在 freeblock / freelist 页中,可用 Undark、SQLite 恢复工具或手工解析页面结构恢复(删除后立刻 VACUUM 才真没救)
  • 工具:DB Browser for SQLite、SQLite Expert、Navicat、命令行 sqlite3

Plist(iOS 属性列表)

苹果生态的配置/数据存储格式,两种形态:

  • XML plist:文本可直接读,根节点 <plist>,键值对 <key>/<dict>/<array>
  • 二进制 plist(bplist):文件头 bplist00,需用 plutil -convert xml1(macOS)、plistutil(libimobiledevice)或 Python plistlib 转 XML 后读

iOS 应用的偏好设置都在 Library/Preferences/<bundleID>.plist,常藏登录态 token、服务器地址、开关状态。

XML / 二进制 AXML(Android)

  • 安卓应用配置:/data/data/<包名>/shared_prefs/*.xml,明文键值对,登录 token、服务器地址、用户 ID 高频出现
  • APK 内的 AndroidManifest.xml 和布局文件是编译后的二进制 AXML,直接打开是乱码,用 apktool/jadx 解析

JSON

  • 各类 App 的缓存、接口返回落地、配置文件(如代理软件的 gui-config.json)
  • 特征:{ 开头,文本可读;注意有的文件是 JSON Lines(一行一个 JSON)

其他专用格式

格式场景解析
Protocol Buffers微信部分数据、IM 消息体无 schema 只能猜字段,用 protoc —decode_raw 试探
MMKV微信等腾讯系 App 的 KV 存储(mmkv/ 目录)默认可配 AES 加密,需找 key;有开源 mmkv 解析工具
LevelDB浏览器 LocalStorage、部分 App字符特征 \x00\x01 键值流,用 leveldb 库读

通用识别思路

  1. 看文件头魔数(010 Editor / file 命令)比看扩展名可靠
  2. 无魔数先 strings 拉一遍,文本类格式(JSON/XML/plist)立现
  3. 二进制库文件先找配套工具,别硬啃——SQLite/plist/MMKV 都有成熟轮子