从零打通微信数据到博客发布:一次 AI Agent 集成实践

⚠️ 2026-05-26 更新:微信账号被封风险警告

本文最初版本记录了通过扫描微信进程内存、解密本地 SQLCipher 数据库来提取文章的方法。这种方法已被微信安全机制检测并导致账号被封禁。

如果你只是想发布公众号文章到博客,请直接跳到文末的安全方案,使用朋友转发链接的方式即可,不要碰任何微信进程和解密工具。

前言

最近在做一个自动化工作流:把微信公众号上看到的好文章,自动提取、整理、发布到个人博客。

听起来很简单对吧?但实际上,它牵出了一整条技术链路——从 Windows 进程内存扫描,到 SQLCipher 数据库解密,再到 Hexo 博客构建部署。这篇文章就记录这个打通的过程和方法。


背景与目标

需求其实很直接:我有一个 Hexo 博客,希望每次在微信上看到有价值的公众号文章时,能自动或半自动地整理到博客上。

理想的工作流是这样的:

1
微信收到文章 → 自动提取 → 学习内化 → 生成博客 → 部署上线

前两个环节是最大的挑战:怎么”自动提取”微信里的数据?


第一关:理解微信的数据存储

微信 4.x 的新格式

如果你很久没研究过微信桌面版的数据存储,可能会以为它还在用 WeChat Files 那个老目录。实际上,微信 4.x 版本引入了全新的存储体系——xwechat_files。

新的目录结构大致是这样的:

1
2
3
4
5
6
7
8
9
10
xwechat_files/
└── wxid_xxx/
├── db_storage/
│ ├── message/ ← 聊天消息 + 公众号文章
│ ├── session/ ← 会话列表
│ ├── contact/ ← 联系人
│ ├── bizchat/ ← 公众号消息
│ └── sns/ ← 朋友圈
├── config/
└── cache/

所有核心数据都存储在 SQLite 数据库中,但——这些数据库全部经过 SQLCipher 加密。

SQLCipher 是什么

SQLCipher 是 SQLite 的加密扩展,对每个数据库页面进行 AES 加密,并附带 HMAC 完整性校验。简单说,没有密钥,这些 .db 文件就是一堆乱码。

微信使用的是 SQLCipher 4,具体参数:

  • 加密算法:AES-256-CBC
  • 密钥派生:PBKDF2-HMAC-SHA512(256,000 次迭代)
  • 页面大小:4096 字节
  • 每个数据库有独立的 salt(存储在文件头的 16 字节中)

第二关:密钥在哪里

既然数据库是加密的,密钥在哪里?

答案在意料之中,也在情理之中:密钥存储在微信进程(Weixin.exe)的运行内存中。

进程内存扫描

Windows 上读取其他进程的内存,核心 API 是:

  1. OpenProcess — 打开目标进程,获取句柄
  2. VirtualQueryEx — 枚举进程的虚拟内存区域
  3. ReadProcessMemory — 读取指定内存区域的内容

但有个前提:需要管理员权限。因为 PROCESS_VM_READ 权限对非管理员进程是受限的。

从海量内存中找到密钥

微信进程的内存空间很大(动辄数 GB),直接全量扫描是不现实的。关键是要知道 找什么。

通过分析 SQLCipher 的密钥存储习惯,微信在内存中保存密钥的格式是:

1
x'<64位十六进制密钥><32位十六进制盐值>'

这个模式非常具有辨识度:以 x' 开头,接着是 64 个 hex 字符(0-9, a-f),然后是可选的 32 个 hex 字符,最后以 ' 结尾。

扫描策略:

  1. 只扫描可写私有内存(PAGE_READWRITE + MEM_PRIVATE)——密钥存在堆上,不在代码段或映射文件中
  2. 使用 pymem.pattern_scan_all 搜索 x' 特征
  3. 对每个命中的位置,读取后续字节,验证 hex 格式
  4. 按出现频率排序,频率最高的就是正确的密钥

运行扫描后,从数十 GB 的虚拟地址空间中,可以提取到约 40-50 个候选密钥。

验证密钥的正确性

找到候选密钥后,需要验证它是否真的能解密数据库。验证方法很巧妙:

  1. 读取数据库文件的前 16 字节(salt)
  2. 用密钥和 salt 派生出 HMAC 密钥
  3. 校验数据库第一页的 HMAC 签名
  4. 匹配成功 → 密钥正确

意外发现:不同数据库用不同密钥

在验证过程中发现一个有趣的现象:同一个微信账号的不同数据库,使用的加密密钥不同。

数据库 密钥
biz_message_*.db(公众号消息) 密钥 A
session.db(会话) 密钥 B
contact.db(联系人) 密钥 C

这意味着不能用一个密钥解密所有数据库。这给那些只支持单密钥的工具带来了兼容性问题。


第三关:现有工具的局限

在探索过程中,尝试了两个主流的微信 CLI 工具:

wx-cli (@jackwener/wx-cli)

这是一个 Node.js 编写的 CLI 工具,提供了 18 个命令来查询微信数据。但它有两个关键问题:

  1. 只支持老版微信格式:它寻找的是 WeChat Files 目录路径,而微信 4.x 用的是 xwechat_files
  2. 单密钥模型:所有数据库共享一个 master_key,但微信 4.x 每个库的密钥不同

即使手动配置文件路径和密钥,也无法正常工作。

wechat-cli (@canghe_ai/wechat-cli)

一个 npm 包,自带内存密钥提取功能。在 Windows 上安装受限——npm 包只提供了 macOS arm64 二进制。

huohuoer/wechat-cli

另一个 Python 实现的 CLI 工具(v0.2.4),设计思路清晰、AI 友好的 JSON 输出。实际测试中通过 conda 创建 Python 3.10 环境后能在 Windows 上正常运行:

1
2
3
4
5
6
# 实测可用的安装方式
conda create -n wechat-cli python=3.10
conda install -n wechat-cli click pycryptodome zstandard
pip install huohuoer/wechat-cli
wechat-cli init --db-dir ~/Documents/xwechat_files/xxx/db_storage
wechat-cli sessions

内存扫描能提取全部 28 个数据库密钥,查询功能正常。

解决方案:ZedeX/weixin-decrypte-script

另一个可用的开源工具集。优势在于:

  • Python 3.8+ 兼容,Windows 原生支持
  • 支持微信 4.x 的 xwechat_files 格式
  • 自动扫描进程内存提取密钥
  • 提供解密、读取、API 服务的完整工具链

实际测试中,在已有 conda 环境内安装 pymem 依赖后,扫描全部 5 个微信子进程,成功提取到 28/29 个数据库密钥。


⚠️ 但上述工具最终都因扫描微信进程内存触发了安全检测,导致账号被封禁。 详见下文「血的教训」。


第四关:处理公众号文章内容

解密数据库只是第一步。从数据库中读到的公众号文章消息是 XML 格式的:

1
2
3
4
5
6
7
8
<msg>
<appmsg appid="" sdkver="0">
<title><![CDATA[文章标题]]></title>
<des><![CDATA[文章描述]]></des>
<type>5</type>
<url><![CDATA[https://mp.weixin.qq.com/s/...]]></url>
</appmsg>
</msg>

而且消息体经过 Zstandard (zstd) 压缩,需要先解压才能解析。

提取出文章 URL 后,再通过 HTTP 抓取获取完整正文,最终生成博客文章。


完整工作流(旧方案,已废弃)

⚠️ 以下方案因扫描微信进程内存已被封号,仅供参考,请勿效仿。

旧方案的全流程:

1
2
3
4
5
6
7
1. 微信运行中 → 扫描 Weixin.exe 进程内存 → 提取 SQLCipher 密钥
2. 用密钥解密 biz_message_*.db 数据库
3. 读取数据库中的消息记录 → zstd 解压 → 解析 XML → 提取文章 URL
4. 通过 HTTP 抓取文章全文
5. 学习内化内容,重新组织为博客文章
6. 生成 Hexo Markdown 文件(含 front-matter)
7. 执行 hexo generate + deploy → 发布到 GitHub Pages

整个过程从手动执行到半自动,再到脚本化一键完成——但这条路已经被微信封死。

最终推荐方案

如果你也想做公众号文章到博客的自动化,建议直接用最轻量的方案:

1
朋友/自己转发链接 → 复制 URL → fetch_article.py 抓取 → generate_blog.py 生成 → deploy 上线

不需要管理员权限,不需要解密任何数据库,不需要扫描进程内存。微信零感知。

具体工具链见 wechat-to-blog skill。


安全方案:手动转发 + 自动发布

如果你和我一样只是想发文章到博客,不要碰微信数据库。最安全也最简单的工作流:

1
朋友转发链接 → 你复制链接 → 脚本抓取全文 → AI 整理 → 生成博客 → 部署上线

这套方案用到的工具完全不涉及微信内部数据:

  • fetch_article.py — 用 curl 模拟浏览器抓取公众号文章页面,提取标题和正文(纯 HTTP 请求,不碰微信进程)
  • generate_blog.py — 将提取的内容整理成 Hexo Markdown 文件
  • deploy_blog.py — 执行 hexo generate + 部署到 GitHub Pages

三个脚本在一个独立的 wechat-to-blog skill 里,只处理公开的 URL 内容和本地文件,对微信零侵入。

实际操作流程

1
2
3
4
5
6
7
8
9
# 1. 朋友发了链接,你复制后执行
python scripts/fetch_article.py "https://mp.weixin.qq.com/s/XXXXX"

# 2. 生成博客文章
python scripts/generate_blog.py _temp/article.json \
-t "文章标题" --tags "标签1,标签2" --category "分类"

# 3. 部署上线
python scripts/deploy_blog.py

整个过程不到 30 秒,零风险。


经验与教训

0. ⚠️ 不要扫描微信进程内存(血的教训)

这是最重要的教训:任何读写微信进程内存、解密微信数据库的操作,都会被微信的安全机制检测到,导致账号被封禁。

2026年5月,我在测试 wechat-cli 和 weixin-decrypte-script 等工具后,微信直接封停了账号。这些工具的原理——OpenProcess + ReadProcessMemory 扫描进程内存、SQLCipher 数据库解密——触发了微信的反外挂检测。

如果你的目的只是发博客文章,完全不需要走这条路。

1. 不要假设旧工具能用

微信的本地数据存储格式在 4.x 版本发生了根本性变化。很多基于旧版微信的工具已经失效。遇到问题时,第一反应应该是检查目标软件版本,而不是在错误的方向上调试。

2. 进程内存是宝藏——但别碰

桌面应用的敏感数据(密钥、令牌、解密后的内容)几乎必然出现在进程内存中。只要有权访问进程内存,就能找到这些数据。但微信对此有严格的检测机制,碰了就会封号。

3. 简单方案胜过复杂方案

一开始我走入了误区:觉得”自动化”就必须从数据库源头打通。实际上最简单的方案——朋友转发链接,我复制到脚本里抓取——已经能满足 100% 的需求,而且零风险。在开始复杂的技术方案之前,先问问自己:有没有更简单的做法?

wx-cli 虽然不兼容新版本,但它的设计思路(AI 友好的 JSON 输出、命令式交互)值得借鉴。

4. 权限问题永远是门槛

读取进程内存需要管理员权限。但安全方案(URL 抓取)不需要任何特殊权限,普通用户就可运行。


隐私与安全说明

安全方案的特点:

  • 零侵入:只通过 HTTP 请求访问公开的公众号文章 URL,不碰微信进程和数据
  • 可控输出:发布到博客的内容需要人工审核,不会自动公开私人信息
  • 低权限:不需要管理员权限,普通用户即可运行

总结

打通微信文章到博客的自动化,最终落地的是一条安全、简单的路径:

  1. 获取文章 → 朋友转发链接,你手动复制
  2. 抓取内容 → fetch_article.py 通过 HTTP 抓取公开页面
  3. 整理发布 → generate_blog.py 生成 Hexo 文章 + deploy_blog.py 部署上线

最初尝试的数据库解密方案虽然技术上更有趣,但最终证明是错误的方向——不仅复杂度高,而且导致了微信账号被封。

如果你也在做类似的数据集成,建议先问自己:最简单的方案是什么? 很多时候,手动复制一个链接比逆向整个系统要明智得多。


本文为技术实践记录,不涉及具体密钥、账号信息及本地路径。