wechat-decrypt 构建与代码组织分析
目标读者:希望理解项目构建方式、源码树结构及依赖管理的开发者
1. 项目目录结构
本项目采用扁平化脚本结构,所有核心模块直接置于根目录,便于独立执行和快速开发。
graph TD
ROOT[wechat-decrypt/] --> CONFIG[配置层]
ROOT --> CORE[核心解密层]
ROOT --> MONITOR[监控服务层]
ROOT --> SERVER[服务接口层]
ROOT --> TOOL[工具脚本层]
ROOT --> DOC[文档层]
CONFIG --> GIT[.gitignore
版本控制排除] CONFIG --> CFG_EX[config.example.json
配置模板] CONFIG --> CFG_PY[config.py
运行时配置加载] CORE --> FIND_KEYS[find_all_keys.py
内存密钥提取] CORE --> DECRYPT[decrypt_db.py
数据库解密] MONITOR --> MON[monitor.py
文件系统监控] MONITOR --> MON_WEB[monitor_web.py
Web监控界面] SERVER --> MCP[mcp_server.py
MCP协议服务] TOOL --> LATENCY[latency_test.py
性能测试] DOC --> README[README.md
项目说明] DOC --> USAGE[USAGE.md
使用指南] style FIND_KEYS fill:#f9f,stroke:#333,stroke-width:2px style DECRYPT fill:#f9f,stroke:#333,stroke-width:2px
版本控制排除] CONFIG --> CFG_EX[config.example.json
配置模板] CONFIG --> CFG_PY[config.py
运行时配置加载] CORE --> FIND_KEYS[find_all_keys.py
内存密钥提取] CORE --> DECRYPT[decrypt_db.py
数据库解密] MONITOR --> MON[monitor.py
文件系统监控] MONITOR --> MON_WEB[monitor_web.py
Web监控界面] SERVER --> MCP[mcp_server.py
MCP协议服务] TOOL --> LATENCY[latency_test.py
性能测试] DOC --> README[README.md
项目说明] DOC --> USAGE[USAGE.md
使用指南] style FIND_KEYS fill:#f9f,stroke:#333,stroke-width:2px style DECRYPT fill:#f9f,stroke:#333,stroke-width:2px
目录职责说明
| 层级 | 文件/目录 | 职责 |
|---|---|---|
| 配置层 | config.py + config.example.json |
集中管理路径、密钥文件位置等运行时配置 |
| 核心解密层 | find_all_keys.py, decrypt_db.py |
密钥提取与数据库解密的核心能力 |
| 监控服务层 | monitor.py, monitor_web.py |
实时监听微信数据库变化并自动解密 |
| 服务接口层 | mcp_server.py |
对外提供标准化服务接口(MCP协议) |
| 工具脚本层 | latency_test.py |
性能基准测试 |
设计特点:无嵌套包结构,每个
.py文件均为可独立执行的入口点,适合工具型项目。
2. 构建 / 编译流水线
本项目为纯 Python 解释型项目,无需传统编译步骤。其"构建"流程实质是环境准备 → 依赖安装 → 入口配置的过程。
flowchart TD
subgraph ENV["1. 环境准备"]
A[Python 3.10+] --> B[创建虚拟环境]
B --> C[激活 venv]
end
subgraph DEPS["2. 依赖安装"]
C --> D{检查构建文件}
D -->|存在 pyproject.toml| E[pip install -e .]
D -->|无构建文件| F[手动 pip install 依赖]
E --> G[安装开发依赖组]
F --> H[安装 runtime 依赖
pycryptodome, watchdog, flask, ...] end subgraph CONFIG_STEP["3. 配置初始化"] H --> I[复制 config.example.json] I --> J[编辑为 config.json] J --> K[验证微信进程可访问] end subgraph RUN["4. 运行入口"] K --> L[python find_all_keys.py
提取密钥] L --> M[生成 all_keys.json] M --> N[下游模块就绪] N --> O1[python decrypt_db.py] N --> O2[python monitor.py] N --> O3[python mcp_server.py] N --> O4[python monitor_web.py] end style L fill:#f9f,stroke:#333,stroke-width:2px style M fill:#ff9,stroke:#333,stroke-width:2px
pycryptodome, watchdog, flask, ...] end subgraph CONFIG_STEP["3. 配置初始化"] H --> I[复制 config.example.json] I --> J[编辑为 config.json] J --> K[验证微信进程可访问] end subgraph RUN["4. 运行入口"] K --> L[python find_all_keys.py
提取密钥] L --> M[生成 all_keys.json] M --> N[下游模块就绪] N --> O1[python decrypt_db.py] N --> O2[python monitor.py] N --> O3[python mcp_server.py] N --> O4[python monitor_web.py] end style L fill:#f9f,stroke:#333,stroke-width:2px style M fill:#ff9,stroke:#333,stroke-width:2px
关键构建产物
| 产物 | 生成方式 | 用途 |
|---|---|---|
all_keys.json |
find_all_keys.py 运行时生成 |
下游所有模块的必需输入 |
config.json |
开发者手动配置 | 运行时参数(路径、端口等) |
解密后的 .db 文件 |
decrypt_db.py / monitor.py |
最终可用数据 |
3. 依赖管理
3.1 依赖声明现状
当前状态:项目未配置标准 Python 构建文件(无 pyproject.toml / setup.py / requirements.txt),依赖处于隐式管理状态。
graph TD
subgraph CURRENT["当前状态:隐式依赖"]
A[源码 import 语句] --> B[人工识别依赖]
B --> C[手动 pip install]
C --> D[本地环境生效]
end
subgraph RECOMMENDED["推荐改进:显式管理"]
E[创建 pyproject.toml] --> F[声明依赖组]
F --> G1[prod: pycryptodome,
watchdog, flask, waitress] F --> G2[dev: pytest, black,
mypy, pylint] F --> G3[test: pytest-cov,
pytest-asyncio] G1 --> H[pip install -e ".[dev,test]"] end style CURRENT fill:#fee,stroke:#933 style RECOMMENDED fill:#efe,stroke:#393
watchdog, flask, waitress] F --> G2[dev: pytest, black,
mypy, pylint] F --> G3[test: pytest-cov,
pytest-asyncio] G1 --> H[pip install -e ".[dev,test]"] end style CURRENT fill:#fee,stroke:#933 style RECOMMENDED fill:#efe,stroke:#393
3.2 推断的运行时依赖
通过分析源码 import 语句,识别出以下依赖:
| 模块 | 依赖包 | 用途 |
|---|---|---|
find_all_keys.py |
ctypes (内置), re (内置) |
Windows API 调用、内存扫描 |
decrypt_db.py |
pycryptodome |
SQLCipher 4 解密 (PBKDF2, AES-256-CBC, HMAC-SHA512) |
monitor.py |
watchdog |
文件系统事件监控 |
monitor_web.py |
flask, waitress |
Web 服务与 WSGI 服务器 |
mcp_server.py |
asyncio (内置), json (内置) |
MCP 协议实现 |
latency_test.py |
time, statistics (内置) |
性能测量 |
3.3 推荐的 pyproject.toml 配置
[project]
name = "wechat-decrypt"
version = "0.1.0"
requires-python = ">=3.10"
dependencies = [
"pycryptodome>=3.19.0",
"watchdog>=3.0.0",
"flask>=2.3.0",
"waitress>=2.1.0",
]
[project.optional-dependencies]
dev = [
"pytest>=7.4.0",
"black>=23.0.0",
"mypy>=1.5.0",
"pylint>=2.17.0",
]
test = [
"pytest-cov>=4.1.0",
"pytest-asyncio>=0.21.0",
]
[project.scripts]
wechat-find-keys = "find_all_keys:main"
wechat-decrypt = "decrypt_db:main"
wechat-monitor = "monitor:main"
wechat-mcp-server = "mcp_server:main"
[tool.setuptools]
py-modules = [
"config",
"find_all_keys",
"decrypt_db",
"monitor",
"monitor_web",
"mcp_server",
"latency_test",
]
3.4 版本锁定策略
flowchart LR
subgraph LOCK["版本锁定方案"]
A[pyproject.toml
宽松约束] --> B[pip-compile
或 poetry lock] B --> C[生成 requirements.lock] C --> D[CI/CD 使用锁定文件] D --> E[可复现构建] end A --> F[开发环境
允许小版本更新] C --> G[生产部署
精确版本匹配]
宽松约束] --> B[pip-compile
或 poetry lock] B --> C[生成 requirements.lock] C --> D[CI/CD 使用锁定文件] D --> E[可复现构建] end A --> F[开发环境
允许小版本更新] C --> G[生产部署
精确版本匹配]
4. 多语言协作
本项目以 Python 为主语言,但涉及关键的跨语言交互场景:
graph TD
subgraph PYTHON["Python 层"]
A[find_all_keys.py] --> B[ctypes 绑定]
C[decrypt_db.py] --> D[pycryptodome
C扩展] end subgraph NATIVE["原生/系统层"] B --> E[Windows API
kernel32.dll] E --> F[OpenProcess
VirtualQueryEx
ReadProcessMemory] D --> G[OpenSSL
底层加密实现] end subgraph TARGET["目标进程"] F --> H[Weixin.exe 内存空间] H --> I[WCDB 密钥缓存] I --> J[提取 x'...' 格式密钥] end subgraph DATA["数据流"] J --> K[all_keys.json] K --> L[Python 解密模块] G --> M[SQLCipher 4
数据库解密] end style E fill:#f9f,stroke:#333,stroke-width:2px style F fill:#f9f,stroke:#333,stroke-width:2px
C扩展] end subgraph NATIVE["原生/系统层"] B --> E[Windows API
kernel32.dll] E --> F[OpenProcess
VirtualQueryEx
ReadProcessMemory] D --> G[OpenSSL
底层加密实现] end subgraph TARGET["目标进程"] F --> H[Weixin.exe 内存空间] H --> I[WCDB 密钥缓存] I --> J[提取 x'...' 格式密钥] end subgraph DATA["数据流"] J --> K[all_keys.json] K --> L[Python 解密模块] G --> M[SQLCipher 4
数据库解密] end style E fill:#f9f,stroke:#333,stroke-width:2px style F fill:#f9f,stroke:#333,stroke-width:2px
4.1 Python ↔ Windows API(核心机制)
find_all_keys 模块通过 ctypes 直接调用 Windows 内核 API,这是项目的核心技术点:
| Python 组件 | 对应 Windows API | 功能 |
|---|---|---|
MBI 结构体 |
MEMORY_BASIC_INFORMATION |
内存区域元数据 |
enum_regions() |
VirtualQueryEx |
枚举进程虚拟地址空间 |
read_mem() |
ReadProcessMemory |
读取目标进程内存内容 |
get_pid() |
tasklist + subprocess |
定位微信进程 |
4.2 Python ↔ C 加密库
pycryptodome 作为 C 扩展模块,提供高性能密码学操作:
Crypto.Protocol.KDF.PBKDF2— 密钥派生Crypto.Cipher.AES— AES-256-CBC 解密Crypto.Hash.HMAC— HMAC-SHA512 验证
5. 开发工作流
5.1 环境初始化命令
# 1. 克隆仓库
git clone <repo-url>
cd wechat-decrypt
# 2. 创建虚拟环境(推荐)
python -m venv .venv
# Windows
.venv\Scripts\activate
# macOS/Linux
source .venv/bin/activate
# 3. 安装依赖(当前:手动模式)
pip install pycryptodome watchdog flask waitress
# 3'. 若已配置 pyproject.toml(推荐未来采用)
pip install -e ".[dev,test]"
5.2 核心开发命令
flowchart TD
subgraph DEV["日常开发"]
A[编辑源码] --> B[python find_all_keys.py]
B --> C{密钥提取成功?}
C -->|是| D[生成 all_keys.json]
C -->|否| E[检查微信运行状态
管理员权限] D --> F[python decrypt_db.py --db]
F --> G[验证解密结果]
end
subgraph TEST["测试验证"]
H[pytest tests/] --> I[单元测试]
H --> J[集成测试
模拟内存结构] I --> K[覆盖率报告] end subgraph SERVE["服务启动"] L[python monitor.py] --> M[后台监控模式] N[python monitor_web.py] --> O[Web界面
http://localhost:5000] P[python mcp_server.py] --> Q[MCP服务
stdio/sse模式] end subgraph PERF["性能调优"] R[python latency_test.py] --> S[测量解密耗时] S --> T[优化热点代码] end style B fill:#f9f,stroke:#333,stroke-width:2px style F fill:#f9f,stroke:#333,stroke-width:2px
管理员权限] D --> F[python decrypt_db.py --db
模拟内存结构] I --> K[覆盖率报告] end subgraph SERVE["服务启动"] L[python monitor.py] --> M[后台监控模式] N[python monitor_web.py] --> O[Web界面
http://localhost:5000] P[python mcp_server.py] --> Q[MCP服务
stdio/sse模式] end subgraph PERF["性能调优"] R[python latency_test.py] --> S[测量解密耗时] S --> T[优化热点代码] end style B fill:#f9f,stroke:#333,stroke-width:2px style F fill:#f9f,stroke:#333,stroke-width:2px
5.3 常用命令速查
| 场景 | 命令 | 说明 |
|---|---|---|
| 首次密钥提取 | python find_all_keys.py |
需管理员权限,微信正在运行 |
| 单次解密 | python decrypt_db.py --db "C:\...\MicroMsg.db" |
解密指定数据库 |
| 启动监控 | python monitor.py |
后台监听文件变化自动解密 |
| 启动 Web 服务 | python monitor_web.py |
浏览器访问监控界面 |
| 启动 MCP 服务 | python mcp_server.py |
提供标准化 API 接口 |
| 性能测试 | python latency_test.py |
测量各环节耗时 |
5.4 调试与故障排查
# 验证 Python 路径和版本
python -c "import sys; print(sys.executable, sys.version)"
# 检查依赖安装
python -c "import Crypto, watchdog, flask; print('OK')"
# 模块直接运行测试(利用 __main__ 块)
python -m find_all_keys # 若已配置为包
# 详细日志输出(建议添加 logging 配置)
python find_all_keys.py --verbose # 需实现参数解析
5.5 推荐的 CI/CD 流水线
flowchart LR
A[Push/PR] --> B[Lint
black, mypy, pylint] B --> C[Test
pytest] C --> D[Build
wheel/sdist] D --> E[Release
GitHub Release] subgraph QUALITY["质量门禁"] B --> F[代码风格检查] C --> G[测试覆盖率 >80%] end style B fill:#ff9,stroke:#333 style C fill:#ff9,stroke:#333
black, mypy, pylint] B --> C[Test
pytest] C --> D[Build
wheel/sdist] D --> E[Release
GitHub Release] subgraph QUALITY["质量门禁"] B --> F[代码风格检查] C --> G[测试覆盖率 >80%] end style B fill:#ff9,stroke:#333 style C fill:#ff9,stroke:#333
附录:模块依赖关系图
graph TD
CONFIG[config.py
配置中心] --> FIND[find_all_keys.py] CONFIG --> DECRYPT[decrypt_db.py] CONFIG --> MON[monitor.py] CONFIG --> MON_WEB[monitor_web.py] CONFIG --> MCP[mcp_server.py] FIND --> KEYS[(all_keys.json)] KEYS --> DECRYPT KEYS --> MON KEYS --> MON_WEB KEYS --> MCP DECRYPT -.->|被调用| MON DECRYPT -.->|被调用| MON_WEB style CONFIG fill:#f9f,stroke:#333,stroke-width:2px style KEYS fill:#ff9,stroke:#333,stroke-width:2px style FIND fill:#9cf,stroke:#333,stroke-width:2px
配置中心] --> FIND[find_all_keys.py] CONFIG --> DECRYPT[decrypt_db.py] CONFIG --> MON[monitor.py] CONFIG --> MON_WEB[monitor_web.py] CONFIG --> MCP[mcp_server.py] FIND --> KEYS[(all_keys.json)] KEYS --> DECRYPT KEYS --> MON KEYS --> MON_WEB KEYS --> MCP DECRYPT -.->|被调用| MON DECRYPT -.->|被调用| MON_WEB style CONFIG fill:#f9f,stroke:#333,stroke-width:2px style KEYS fill:#ff9,stroke:#333,stroke-width:2px style FIND fill:#9cf,stroke:#333,stroke-width:2px
关键洞察:
find_all_keys.py是整个工具链的前置瓶颈——所有下游模块均依赖其生成的all_keys.json。该模块的成功执行需要运行时环境配合(微信进程+管理员权限),这是构建系统无法预置的,需在部署文档中明确说明。