微信PC端数据库解密方法与实现
下面从原理、文件位置、密钥提取、解密实现(工具+代码)、避坑与法律边界,完整讲一遍微信PC端数据库解密。
---
## ⚠️ 法律与隐私红线(必看)
- **仅可对自己的微信数据操作**,严禁用于他人账号、商业窃密、取证等未授权场景,否则涉嫌违法。
- 微信数据库采用**AES-256-CBC(SQLCipher)**,密钥仅在微信运行时驻留内存,**磁盘无明文密钥**。
---
## 一、数据库位置(Windows)
默认路径(按实际用户名/微信号替换):
```
C:\Users\<你的用户名>\Documents\WeChat Files\<你的微信号>\Msg\
```
核心文件:
- `ChatMsg.db`:聊天记录(核心)
- `contact/contact.db`:联系人
- `media_*.db`:图片/语音索引
> 操作前**复制备份原db文件**,防止损坏。
---
## 二、加密原理
- 算法:**SQLCipher(AES-256-CBC)**,4.x 后升级为 SQLCipher 4。
- 密钥:**32字节AES密钥 + 16字节盐(salt)**,运行时由 WeChatWin.dll 动态生成并加载到内存。
- 解密前提:**微信必须处于登录运行状态**(密钥在内存)。
---
## 三、密钥提取(两种方法)
### 方法A:一键工具(推荐,零基础)
用 **PyWxDump**(开源,支持最新微信):
1. 安装依赖
```bash
pip install pywxdump
```
2. 提取密钥(自动扫内存)
```bash
pywxdump key
```
输出示例:
```
[+] 微信进程PID: 1234
[+] 数据库密钥: 1234567890abcdef1234567890abcdef
```
- 项目地址:https://gitcode.com/GitHub_Trending/py/PyWxDump
### 方法B:动态调试(x64dbg,进阶)
1. 工具:x64dbg(附加 WeChat.exe)
2. 定位模块:WeChatWin.dll
3. 搜索特征字符串:`DBFactory::encryptDB` 或 `sqlite3_key`
4. 下断点,登录微信后断下,从寄存器/内存区提取 **32字节密钥**。
---
## 四、解密实现(工具+代码)
### 1. 用 PyWxDump 直接解密
```bash
# 解密ChatMsg.db,输出 de_ChatMsg.db
pywxdump decrypt -f "C:\Users\xxx\Documents\WeChat Files\wxid_xxx\Msg\ChatMsg.db" -o de_ChatMsg.db
```
### 2. 用 SQLCipher 原生解密(代码实现)
#### (1)安装依赖
```bash
pip install pysqlcipher3
```
#### (2)Python 解密脚本
```python
from pysqlcipher3 import dbapi2 as sqlite3
# 密钥(从PyWxDump或调试获取)
KEY = b"32字节密钥"
# 原加密库与输出明文库
ENCRYPTED_DB = "ChatMsg.db"
DECRYPTED_DB = "de_ChatMsg.db"
# 连接加密库
conn = sqlite3.connect(ENCRYPTED_DB)
cursor = conn.cursor()
# 设置密钥
cursor.execute(f"PRAGMA key = '{KEY.hex()}';")
cursor.execute("PRAGMA cipher_compatibility = 3;") # 适配旧版
# 导出到明文库
with sqlite3.connect(DECRYPTED_DB) as dest_conn:
conn.backup(dest_conn)
print("解密完成!")
```
### 3. 验证解密结果
用 SQLite 工具(如 DB Browser for SQLite)打开 `de_ChatMsg.db`:
```sql
.tables -- 查看表
SELECT * FROM Message LIMIT 10; -- 查看聊天记录
```
---
## 五、常见问题与避坑
1. **密钥提取失败**
- 微信必须**登录且前台运行**(最小化有时不行)
- 关闭微信多开、防撤回补丁(会改内存特征)
- 用管理员权限运行工具
2. **解密后乱码/打不开**
- 密钥错误(核对32字节)
- 版本不匹配(微信4.x用 SQLCipher 4,需调整 `cipher_compatibility`)
- 原文件损坏(重新备份)
3. **微信闪退/检测到调试**
- 用**官方纯净版微信**,不要用修改版
- 调试时避免频繁断点,防止反调试触发
---
## 六、macOS 简要流程
- 路径:`~/Library/Containers/com.tencent.xinWeChat/Data/Library/Application Support/com.tencent.xinWeChat/<UUID>/Msg/`
- 密钥提取:用 `lldb` 附加或 wechat-decrypt 工具
- 解密:同 SQLCipher 流程。
---
## 七、总结
- 零基础:直接用 **PyWxDump** 一键提取密钥+解密
- 进阶:用 x64dbg 调试提取密钥,再用 SQLCipher 代码解密
- 核心:**微信必须运行、密钥32字节、备份原文件、仅自用**

