Skip to content

is-a-zzzz/rust-chatlog

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

微信数据库密钥提取工具

项目简介

这是一个 macOS 微信数据库密钥提取工具,从微信进程内存中提取数据库密钥,并返回数据库文件路径。

核心功能

  • 自动检测微信进程 PID
  • 从进程内存提取数据库密钥(支持 V3 加密)
  • 查找并分类所有数据库文件
  • 生成环境变量配置文件(.env)
  • 版本适配器架构(易于扩展新版本)

项目结构

wechat-watch/
├── src/
│   ├── main.rs                    # 主程序入口
│   ├── version/                   # 版本适配模块(核心)
│   │   ├── mod.rs                 # 版本枚举和定义
│   │   ├── key_extractor.rs       # 密钥提取器 Trait
│   │   ├── factory.rs             # 工厂模式创建提取器
│   │   ├── v384.rs                # 3.8.4 版本实现
│   │   └── v4xx.rs                # 4.x 版本实现(待完成)
│   ├── db_key_scanner.rs          # 数据库密钥扫描器
│   ├── db_validator.rs            # 数据库验证器
│   ├── lldb_reader.rs             # lldb 内存读取
│   ├── macos.rs                   # macOS 平台功能
│   └── memory.rs                  # 内存操作
├── Cargo.toml                     # Rust 项目配置
├── wechat.env                     # 生成的环境变量文件
└── README.md                      # 本文档

架构设计

版本适配器模式

┌─────────────────────────────────────────────┐
│           ExtractorFactory                  │
│  (根据版本号创建对应的 KeyExtractor)         │
└────────────────┬────────────────────────────┘
                 │
        ┌────────┴────────┐
        │                 │
┌───────▼────────┐ ┌──────▼─────────┐
│  V384Extractor  │ │  V4xxExtractor │
│  (3.8.4 版本)   │ │  (4.x 版本)    │
└────────────────┘ └────────────────┘
        │                 │
        └────────┬────────┘
                 │
        ┌────────▼────────┐
        │  KeyExtractor   │
        │     Trait       │
        └─────────────────┘
                 │
        ┌────────▼────────┐
        │  ExtractResult  │
        │  - db_key       │
        │  - data_dir     │
        │  - db_files     │
        └─────────────────┘

KeyExtractor Trait

pub trait KeyExtractor: Send + Sync {
    fn name(&self) -> &str;
    fn version(&self) -> WechatVersion;
    fn extract(&self, pid: u32, data_dir: Option<PathBuf>) -> Result<ExtractResult>;
    fn verify_pid(&self, pid: u32) -> Result<bool>;
    fn find_data_dir(&self, pid: u32) -> Result<PathBuf>;
    fn find_db_files(&self, data_dir: &PathBuf) -> Result<Vec<PathBuf>>;
}

环境要求

系统要求

  • macOS (Darwin 20+)
  • ARM64 或 x86_64 架构

依赖工具

  • Rust 1.70+
  • lldb (系统自带)
  • Xcode Command Line Tools

安装步骤

1. 安装 Rust

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env

2. 构建项目

cd /path/to/wechat-watch

# 开发版本
cargo build

# 发布版本(推荐)
cargo build --release

可执行文件位于:./target/release/wechat-decrypt

3. (可选)禁用 SIP

如果 lldb 无法附加到微信进程,需要禁用 SIP:

# 重启进入恢复模式,执行:
csrutil disable

# 重启后验证:
csrutil status

使用方法

基本用法

# 使用默认版本 3.8.4
./target/release/wechat-decrypt

# 指定版本
./target/release/wechat-decrypt --version 3.9.x

# 查看帮助
./target/release/wechat-decrypt --help

命令参数

参数 说明 默认值
-v, --version 微信版本 (3.8.4, 3.9.x, 4.0.x, auto) 3.8.4
-h, --help 显示帮助信息 -

输出示例

========================================
   微信数据库密钥提取工具
========================================

[*] 使用提取器: WeChat 3.8.4 Key Extractor
[*] 目标版本: 3.8.4

[*] 自动检测微信进程...
[+] 找到微信进程 PID: 12887

[+] 找到验证数据库: msg_0.db
[+] 版本: V3
[+] 将扫描全部 2086 个内存区域...

[*] 等待 lldb 附加到进程...
[*] lldb 附加完成,开始扫描...

[扫描进度...]

========================================
           提取结果
========================================

[+] 数据库密钥:
    c4f3153c730749d1905807f2512c2bd0694b2b2c1e0249e09bce778366453438

[+] 数据目录:
    /Users/xxx/.../c26d233f1feeefd55aabdb0dc77d5962

[+] 加密版本:
    V3

[+] 数据库文件 (共 34 个):

    【聊天记录数据库】
      /path/to/msg_0.db
      /path/to/msg_1.db
      ...

    【其他数据库】
      /path/to/wccontact_new2.db
      /path/to/session_new.db
      ...

========================================

[+] 环境变量已保存到: wechat.env
[*] 使用方法: source wechat.env

环境变量文件

程序成功运行后会生成 wechat.env 文件:

# 微信数据库配置
# 生成时间: 2026-01-13 14:00:04

WECHAT_DB_KEY=c4f3153c730749d1905807f2512c2bd0694b2b2c1e0249e09bce778366453438
WECHAT_DATA_DIR=/Users/xxx/.../c26d233f1feeefd55aabdb0dc77d5962
WECHAT_CRYPTO_VERSION=V3

# 主要数据库文件
WECHAT_DB_MSG_0_DB=/path/to/msg_0.db
WECHAT_DB_MSG_1_DB=/path/to/msg_1.db
...

使用环境变量

# 加载环境变量
source wechat.env

# 使用变量
echo $WECHAT_DB_KEY
echo $WECHAT_DATA_DIR

数据库文件说明

数据库类型 文件名示例 用途
MSG0.db ~ MSG9.db msg_0.db, msg_1.db... 聊天记录数据库(分片存储)
MicroMsg.db WCContactNew2.db 联系人/群组信息
Session.db session_new.db 会话列表
FTS.db ftsmessage.db 全文搜索索引

MSG 数据库分片原因

  1. 性能优化:单文件过大时查询变慢
  2. 并发读写:减少锁竞争
  3. 归档管理:便于按时间归档历史消息

扩展新版本支持

当微信升级时,添加新版本支持只需 3 步:

1. 创建新的提取器

// src/version/v410.rs
pub struct V410Extractor;

impl KeyExtractor for V410Extractor {
    fn name(&self) -> &str {
        "WeChat 4.1.0 Key Extractor"
    }

    fn version(&self) -> WechatVersion {
        WechatVersion::V410
    }

    fn extract(&self, pid: u32, data_dir: Option<PathBuf>) -> Result<ExtractResult> {
        // 实现具体的提取逻辑
    }

    // ... 其他方法
}

2. 注册到工厂

// src/version/factory.rs
impl ExtractorFactory {
    pub fn create(version: WechatVersion) -> Result<Box<dyn KeyExtractor>> {
        match version {
            WechatVersion::V384 => Ok(Box::new(V384Extractor::new())),
            WechatVersion::V410 => Ok(Box::new(V410Extractor::new())),  // 新增
            // ...
        }
    }
}

3. 添加版本枚举

// src/version/mod.rs
pub enum WechatVersion {
    V384,
    V410,  // 新增
    Auto,
}

技术原理

密钥提取流程

1. 获取微信进程 PID
   └─> ps 命令查找 WeChat 进程

2. 读取进程内存
   └─> lldb 附加到进程
   └─> 读取内存区域 (vmmap)

3. 搜索密钥
   └─> 扫描内存中的 "rtree_i32" 模式
   └─> 偏移 24 字节提取 32 字节密钥

4. 验证密钥
   └─> 尝试用密钥打开数据库
   └─> 验证成功则返回

5. 查找数据库文件
   └─> 遍历数据目录下的 .db 文件
   └─> 分类整理

6. 生成环境文件
   └─> 保存密钥和路径到 wechat.env

加密版本对比

版本 页大小 HMAC 算法 密钥派生
V3 1024 SHA-1 (20字节)
V4 4096 SHA-512 (64字节) PBKDF2-SHA512

常见问题

Q: lldb 无法附加到进程

解决方法

  1. 检查 SIP 状态:
csrutil status
  1. 如果显示 System Integrity Protection is enabled,需要禁用:
# 重启进入恢复模式,执行:
csrutil disable
# 重启后生效

Q: 未找到数据库密钥

可能原因

  1. 微信未登录
  2. 微信版本不支持(目前仅支持 3.8.4)
  3. 内存中密钥位置变化

解决方法

  • 确保微信已登录
  • 尝试重启微信后再运行
  • 查看支持的版本列表

Q: 扫描时间太长

说明

  • 扫描 2000+ 个内存区域需要 6-7 分钟
  • 每个区域约 0.2 秒
  • 这是正常速度,请耐心等待

安全说明

  • 本工具仅供个人数据备份使用
  • 严禁用于窃取他人隐私数据
  • 获取的密钥请妥善保管
  • 建议在使用后删除环境变量文件

许可证

本项目仅供学习和研究使用。使用本工具需遵守相关法律法规。


文档更新日期: 2026-01-13 项目版本: v0.1.0

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages