Skip to content
lzb112 edited this page Feb 10, 2026 · 4 revisions

以下是整理后的技术文档:

# 微信 4.1.7.30 版本数据库加密分析

## 1. 数据库路径结构

**基础路径**: `db_storage/wxid` 目录下

| 数据库文件 | 内容说明 |
|-----------|---------|
| `contact` | 联系人数据 |
| `message` | 消息记录 |

## 2. 加密方式

**加密标准**: SQLCipher 4 加密

### 2.1 逆向定位方法

1. **定位 SQLite3 函数**  
   通过 `sqlcipher_api_routines` 定位所有 `sqlite3` 相关函数的 **RVA**(相对虚拟地址)

2. **定位密钥设置函数**  
   通过全局变量 `"com.Tencent.WCDB.Config.Cipher"` 的引用交叉定位 `setCipherKey` 方法

### 2.2 密钥提取细节

**关键寄存器分析**(C++ 调用约定):
- 由于采用 C++ 编译,`RDX+8` 才是实际的数据库密钥地址

**Frida 脚本提取**- 编写 `dbkey.js` 脚本 Hook 密钥设置函数
- 重启微信进程即可捕获数据库密钥

## 3. 数据库解密流程

### 3.1 提取 Salt
每个数据库文件的前 **16 字节** 为加密盐值(Salt)

### 3.2 生成原始密钥

keyConver.py

- **Key**: 通过 Frida 脚本获取的密钥
- **Salt**: 文件头 16 字节
- 组合生成最终原始口令(Raw Key)

### 3.3 数据库访问
使用 **DB Browser for SQLite** 工具:
1. 打开加密数据库
2. 选择 SQLCipher 4 加密标准
3. 输入生成的 Raw Key 即可解密访问

Clone this wiki locally