wechat-android-paths.md 8.07 KB

微信 Android 目录结构备忘

设备: 59131FDCG000YB
记录时间: 2026-05-19
微信包名: com.tencent.mm


1. App 安装目录

类型 路径
APK 主文件 /data/app/~~r29exJFAh0ogsnZN1Kunig==/com.tencent.mm-tpUbm3hU146jfQ2ArDpZBg==/base.apk
内部数据根目录 /data/user/0/com.tencent.mm/
外部存储目录 /sdcard/Android/data/com.tencent.mm/

2. SQLite 数据库目录

2.1 主用户数据目录

/data/user/0/com.tencent.mm/MicroMsg/653cdc2320abb089e149a3f7a7683fcf/

653cdc2320abb089e149a3f7a7683fcf 为用户哈希目录,不同账号/设备此值不同。

2.2 核心数据库文件

数据库文件 用途
EnMicroMsg.db 主数据库(聊天记录、联系人、会话等)
SnsMicroMsg.db 朋友圈数据
FinderWCDB.db 视频号主数据库
FinderMessage006.db 视频号消息
WalletPay.db 微信支付
VoIPDB-8.db 语音通话记录
AppBrandComm.db 小程序数据
MMPlayerMediaInfo.db 媒体播放信息
newuba.db 用户行为分析
enFavorite.db 收藏数据
KaraMM.db / KaraCore.db 卡拉 OK / 音乐相关
UnEncryptNewBiz.db 公众号/服务号
PreDownloadCheck.db 预下载检查
WxCgiReport.db CGI 上报日志
MicroMsgPriority.db 优先级消息队列
MBExternalVideoInfo.db 外部视频信息
FinderLiveShopMsg.db 视频号直播购物消息
WxExpt.db 实验配置
FinderAccounts_01.db 视频号账号

2.3 数据库加密状态

微信使用 WCDB(基于 SQLCipher)对核心数据库进行加密。通过检查文件头(前 16 字节)判断:

数据库文件 加密状态 备注
EnMicroMsg.db 加密 主数据库,聊天记录/联系人
SnsMicroMsg.db 未加密 朋友圈数据,可直接读取
FinderWCDB.db 加密 视频号
FinderMessage006.db 加密 视频号消息
WalletPay.db 未加密(空) 支付数据(schema 空)
VoIPDB-8.db 未加密(空) 语音通话(schema 空)
PreDownloadCheck.db 未加密(空) 预下载检查(schema 空)
biz.db 未加密 公众号消息,可直接读取
enFavorite.db 加密 收藏数据
newuba.db 加密 用户行为分析
WxExpt.db 加密 实验配置
WxCgiReport.db 加密 CGI 上报日志

检测命令:

# 检查文件头是否为 "SQLite format 3"
adb shell su -c 'grep -rl "SQLite format 3" /data/user/0/com.tencent.mm'

2.4 其他数据库位置

路径 说明
/data/user/0/com.tencent.mm/databases/ 通用系统数据库目录
/data/user/0/com.tencent.mm/files/public/voip/db/voip.db VoIP 独立数据库
/data/user/0/com.tencent.mm/cache/653cdc2320abb089e149a3f7a7683fcf/finder/aff/*.db 视频号缓存数据库
/data/user/0/com.tencent.mm/files/liteapp/*/kv/*.db 轻应用 KV 数据库
/data/user/0/com.tencent.mm/MicroMsg/AFFUDRPath/resource/udr/db/udr.db UDR 资源数据库
/data/user/0/com.tencent.mm/MicroMsg/ee1da3ae2100e09165c2e52382cfe79f/EnResDown.db 资源下载数据库(其他用户)
/data/user/0/com.tencent.mm/MicroMsg/653cdc2320abb089e149a3f7a7683fcf/roam_backup/sdk/roam_backupper.db 漫游备份数据库

3. 常用 adb 操作命令

3.1 列出所有数据库

adb shell su -c "find /data/user/0/com.tencent.mm -name '*.db'"

3.2 导出主数据库

adb shell su -c "cat /data/user/0/com.tencent.mm/MicroMsg/653cdc2320abb089e149a3f7a7683fcf/EnMicroMsg.db" > EnMicroMsg.db

3.3 查看数据库结构(需设备上有 sqlite3)

adb shell su -c "sqlite3 /data/user/0/com.tencent.mm/MicroMsg/653cdc2320abb089e149a3f7a7683fcf/EnMicroMsg.db '.schema'"

3.4 导出整个 MicroMsg 目录

adb shell su -c "tar -czf /sdcard/wechat_mm.tar.gz -C /data/user/0/com.tencent.mm MicroMsg"
adb pull /sdcard/wechat_mm.tar.gz .

3.5 查找特定表

# 例如查找联系人表
adb shell su -c "sqlite3 /data/user/0/com.tencent.mm/MicroMsg/653cdc2320abb089e149a3f7a7683fcf/EnMicroMsg.db \"SELECT name FROM sqlite_master WHERE type='table' AND name LIKE '%contact%';\""

4. 数据目录完整结构(内部存储)

/data/user/0/com.tencent.mm/
├── .auth_cache          # 认证缓存
├── .vfs                 # VFS 缓存
├── MicroMsg/             # 主数据目录
│   ├── 653cdc2320abb089e149a3f7a7683fcf/   # 用户哈希目录(含数据库)
│   ├── ee1da3ae2100e09165c2e52382cfe79f/   # 其他用户目录
│   └── AFFUDRPath/      # 资源路径
├── account.bin          # 账号信息
├── app_WxaCronet/       # Cronet 网络组件
├── app_flutter/         # Flutter 引擎
├── app_font/            # 字体缓存
├── app_ringtone/        # 铃声
├── app_webview_*/       # WebView 各进程数据
├── appbrand/            # 小程序相关
├── cache/               # 缓存(含视频号缓存 db)
├── code_cache/          # 代码缓存
├── databases/           # 系统数据库目录
├── files/               # 文件存储
│   ├── liteapp/         # 轻应用数据
│   └── public/voip/db/  # VoIP 数据库
├── shared_prefs/        # SharedPreferences
├── tinker/              # 热修复
└── ...

5. 外部存储目录结构

/sdcard/Android/data/com.tencent.mm/
├── MicroMsg/
│   ├── 989381bff69c06b245fd644651338164/   # 外部存储用户目录
│   ├── Download/        # 下载文件
│   ├── appbrand/        # 小程序外部数据
│   ├── card/            # 卡包
│   ├── fts/             # 全文搜索
│   ├── networkfiles/    # 网络文件
│   ├── wallet/          # 钱包外部数据
│   └── xlog/            # 日志
├── cache/               # 外部缓存
└── files/               # 外部文件

6. 相关包名

包名 应用
com.tencent.mm 微信主应用
com.tencent.wetype 微信键盘(输入法)

7. 已导出数据库 Schema

以下数据库已成功导出并可直接用 sqlite3 打开:

7.1 SnsMicroMsg.db(朋友圈)

表清单:

  • SnsInfo — 朋友圈内容
  • SnsComment — 评论
  • SnsMedia — 媒体文件
  • SnsCover — 封面
  • snsTagInfo2 — 标签分组
  • snsDraft — 草稿
  • adsnsinfo — 广告朋友圈
  • SnsReportKv — 上报日志
  • SnsWsFoldGroup / SnsWsFoldGroupDetail — 折叠分组
  • CanvasInfo / AdCanvasCacheInfo / AdDynamicCanvasInfo / UxCanvasInfo — 广告画布
  • AdPullRecordsInfo — 广告拉取记录

完整 schema 见 SnsMicroMsg_schema.sql

7.2 biz.db(公众号消息)

表清单:

  • bizMsg — 公众号消息
  • bizMsgExt — 消息扩展
  • bizMsgTemp — 临时消息
  • bizNotifyMsg — 通知消息
  • bizRecExposeInfo — 曝光记录

完整 schema 见 biz_schema.sql


8. 加密数据库解密说明

微信核心数据库(如 EnMicroMsg.db)使用 SQLCipher 加密,密钥派生自设备信息 + 用户 UIN。

8.1 获取解密密钥的思路

# 1. 从 .db.ini 获取 MD5(密钥派生参数之一)
adb shell su -c "cat /data/user/0/com.tencent.mm/MicroMsg/653cdc2320abb089e149a3f7a7683fcf/EnMicroMsg.db.ini"
# 输出: createmd5=72e5fdd648765281b159b559ebdb0725

# 2. 密钥通常需要从运行中的微信进程内存 dump,或通过 WCDB 的 open 函数 hook 获取
# 3. 也可以使用已有的开源解密工具(如基于 frida 的脚本)

8.2 解密命令示例(获得密钥后)

# 使用 sqlcipher 命令行工具
sqlcipher EnMicroMsg.db
PRAGMA key = '你的密钥';
.schema

8.3 参考密钥派生逻辑

微信 SQLCipher 密钥大致逻辑:

  • 取设备 IMEI + 用户 UIN
  • MD5 处理后取前 7 位作为密钥
  • 具体实现因微信版本不同有所变化