wechat-cli如何从进程内存中找出微信加密密钥?macOS/Windows/Linux内存扫描与HMAC验证机制详解
发布时间:2026/10/4 3:01:30 锦皓数字建站

wechat-cli如何从进程内存中找出微信加密密钥macOS/Windows/Linux内存扫描与HMAC验证机制详解【免费下载链接】wechat-cliA CLI tool to query your local WeChat data — chat history, contacts, sessions, favorites, and more. Designed for LLM integration.项目地址: https://gitcode.com/gh_mirrors/wech/wechat-cliwechat-cli 是一款命令行查询本地微信数据聊天记录、联系人、会话、收藏的工具。解密的最大难点在于微信数据库采用 SQLCipher 4 加密加密密钥从不明文落盘只存在于运行中微信进程的内存里。wechat-cli 通过「进程内存扫描 HMAC 验证」机制解决它逐区域读取微信进程内存找到形似密钥的候选值再与数据库内置的 HMAC 签名做密码学校验。下面完整拆解这套机制。准备工作安装 wechat-cli 并确认微信在运行密钥藏在微信进程的内存中所以提取前必须保证微信正在运行。安装只需一条命令npm install -g canghe_ai/wechat-cli # 或 pip install wechat-cli一键初始化wechat-cli init 触发内存扫描在终端执行sudo wechat-cli initWindows 直接wechat-cli init整体流程由 commands/init.py 驱动自动检测微信数据目录db_storage多账号时交互选择收集所有 .db 文件及其 16 字节 salt定位微信进程按内存占用降序内存最大的通常是主进程逐内存区域读取hex 模式匹配候选密钥并用 HMAC 验证保存结果密钥写入~/.wechat-cli/下的all_keys.json数据全程不出本机平台分发逻辑在 keys/init.pydarwin 走 macOS 扫描器windows 走 Windows 扫描器linux 走/proc扫描器。核心机制HMAC 验证如何确认密钥正确SQLCipher 4 的 Salt 与页内 HMAC每个数据库首页4096 字节/页开头都存有自己的 salt页尾还存有一段 HMAC 签名。验证函数 verify_enc_key 的流程是步骤操作1读取数据库首页前 16 字节作为salt2salt逐字节 XOR0x3A得到mac_salt3PBKDF2-HMAC-SHA512(候选密钥, mac_salt, 2次迭代)派生出 32 字节 MAC 密钥4取首页第 164032 字节作为 MAC 数据5取首页最后 64 字节作为「已存 HMAC 值」6计算HMAC-SHA512(MAC密钥, 数据)并追加页码 1小端 4 字节7摘要与已存值完全相等→ 候选密钥就是真密钥 ✅这就是整个方案的灵魂内存里随机出现的 32 字节恰好能匹配 HMAC 的概率微乎其微所以扫描不需要猜测密码学校验即可一锤定音。内存中的密钥长什么样hex 模式匹配微信的数据库库WCDB把密钥以 SQLite hex 字面量x...的形式传给 SQLCipher因此密钥在进程内存里会留下这种特征的字符串。扫描器用正则x([0-9a-fA-F]{64,192})匹配三种情况见 scan_memory_for_keyshex 串长度含义处理64密钥本体32 字节对每个待匹配 salt 做 HMAC 验证96前 64 位是密钥后 32 位是 salt先比对 salt 是否待匹配再验证96 且为偶数前 64 位密钥 末 32 位 salt同上每命中一个密钥对应的 salt 就从待匹配集合中移除全部命中后提前终止扫描不再浪费时间读剩余区域。三大平台的内存扫描实现对比Linux通过 /proc/maps 与 /proc/mem 读取进程内存scanner_linux.py 完全利用 Linux 的/proc机制找进程遍历/proc/pid/comm与exe软链匹配wechat/wechatappex/weixin并排除 python、node 等解释器进程查权限需要 root 或CAP_SYS_PTRACE能力位 19否则提示使用sudo wechat-cli init枚举区域解析/proc/pid/maps取可读区域跳过[vdso]、[vsyscall]及系统库路径单区域上限 500MB读内存打开/proc/pid/mem对每个区域seek到基址后整块读入做匹配WindowsVirtualQueryEx 枚举区域 ReadProcessMemoryscanner_windows.py 走 Win32 API用tasklist找出所有Weixin.exe的 PID按内存降序OpenProcess打开进程读内存 查询信息权限VirtualQueryEx循环枚举已提交MEM_COMMIT且可读的内存区域ReadProcessMemory逐区域读出字节执行与 Linux 完全相同的 hex 匹配 HMAC 验证macOSC 二进制 task_for_pid自动重签名scanner_macos.py 的策略是调用内置 C 二进制按架构选择find_all_keys_macos.arm64/x86_64二进制它通过task_for_pid附加微信进程读取内存若检测到task_for_pid failedmacOS 安全策略拦截工具会自动对 WeChat.app 重新签名提取原有 entitlements仅追加com.apple.security.get-task-allow调试权限再 ad-hoc 重签重签后完全退出微信不是最小化、重新登录再次执行sudo wechat-cli init即可交叉验证补齐漏网的数据库同一微信账号下多个数据库可能共享同一把密钥只是 salt 不同。如果首轮扫描有 salt 未匹配cross_verify_keys 会用已找到的密钥逐一交叉验证这些「漏网」数据库通常能把 100% 的密钥补全。最终结果按「数据库 → 密钥」的映射写入all_keys.json。常见问题排查权限与多账号init 因权限不足要求 sudo 时按提示在终端执行sudo wechat-cli init本地登录过多个微信账号时init 会列出所有db_storage目录让你选择默认第一个不确定当前登录的是哪个账号在 Finder 中按「修改日期」排序最近活动的wxid_*文件夹就是常见报错解决方案需要 root 或 CAP_SYS_PTRACEsudo wechat-cli inittask_for_pid failedmacOS工具自动重签微信按提示重启微信后重试未检测到微信进程确认微信已启动并保持前台运行密钥提取成功后SQLCipher 即时解密密钥与配置保存在~/.wechat-cli/之后执行sessions、history、search等命令时工具按 SQLCipher 4AES-256-CBC4096 字节页即时解密数据库页解密实现见 core/crypto.py。整个链路——内存扫描、HMAC 验证、交叉验证、即时解密——都在本机完成数据不出你的设备。【免费下载链接】wechat-cliA CLI tool to query your local WeChat data — chat history, contacts, sessions, favorites, and more. Designed for LLM integration.项目地址: https://gitcode.com/gh_mirrors/wech/wechat-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。