解密微信聊天记录,语音,表情,照片, 生成可训练的数字分身

📅 2026/8/11 12:52:40
解密微信聊天记录,语音,表情,照片, 生成可训练的数字分身
name: “wechat-decrypt”description: “解密微信 4.x 数据库并导出聊天记录、语音、表情、照片生成可训练的对话语料。当用户要求提取/破解微信数据、导出微信媒体语音/表情/图片、或为数字分身准备聊天训练语料时使用。”微信聊天记录解密与语料提取工具包用途把微信 4.x 客户端的加密数据库解密出来导出指定联系人的完整聊天记录、语音、表情包、照片并整理成可用于训练数字分身AI 人格模仿的对话语料。工具包位置E:\project\yeyu\tools\wechat-decrypt\已完成的导出示例E:\project\yeyu\tools\wechat-decrypt\wechat_files\wxid_tx2otle9oiod22\kemy\含 chat_enriched.txt / voice/ / images/ / emoji/ / asr/运行环境前置条件项要求说明操作系统Windows 10/11密钥提取依赖进程内存扫描必须 Windows权限管理员权限运行终端读 Weixin.exe 进程内存需要提权微信微信 4.x 已登录并保持运行提取密钥的瞬间需要进程在跑密钥每小时刷新提取后立刻解密Python3.10脚本兼容性按 3.10 验证依赖pip install -r requirements.txt含 pycryptodome、zstandard、pilk、faster-whisper 等第三方ffmpeg语音/视频转换需要加入 PATH配置文件关键编辑config.json工具包根目录核心字段{db_dir:C:\\Users\\用户名\\xwechat_files\\wxid_端口\\db_storage,keys_file:E:\\project\\yeyu\\tools\\wechat-decrypt\\all_keys.json,decrypted_dir:E:\\project\\yeyu\\tools\\wechat-decrypt\\decrypted,wechat_base_dir:C:\\Users\\用户名\\xwechat_files\\wxid_端口,output_base_dir:E:\\project\\yeyu\\tools\\wechat-decrypt\\wechat_files\\wxid_端口,xwechat_attach_dir:...\\msg\\attach,image_aes_key:5b731f508c779a63,image_xor_key:145}完整流程阶段 0环境准备确认微信 4.x 正在运行、已登录目标账号管理员权限打开 PowerShell安装依赖cd E:\project\yeyu\tools\wechat-decrypt; pip install -r requirements.txt检查/更新config.json见上表阶段 1破解/提取数据库密钥核心步骤务必细读本节1.1 原理为什么能从内存里捡到密钥微信数据库由 SQLCipher 加密密钥本身无法暴力破解PBKDF2 迭代 256000 次。但微信使用的 WCDB 数据库引擎会为每个 DB 缓存解密密钥缓存在微信进程内存中形式是 SQLite 的 hex 字面量字符串x64位十六进制enc_key32位十六进制salt xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy |------------ 32 字节加密密钥 -----------|-------- 16 字节 salt --------|关键点salt盐同时以明文存在每个数据库文件的前 16 字节里。所以提取思路是遍历微信数据目录所有.db文件读出每个文件头部的salt扫描Weixin.exe全部可读内存用正则x([0-9a-fA-F]{64,192})找出所有 keysalt 字符串把内存里的 salt 和文件里的 salt 对上号再用HMAC-SHA512 校验第 1 页verify_enc_key确认真伪所有匹配成功的 enc_key 写入keys_fileJSON这就是提取而非破解——只是从运行中的进程内存里把缓存读出来。所以微信必须在运行状态且要有管理员权限才能读进程内存。1.2 运行命令# 管理员 PowerShell工具包根目录 python find_all_keys.py执行后会依次做两件事A离线爆破图片 AES 密钥find_image_key_offline从msg/attach/*/*/Img/*_t.dat缩略图文件推导 XOR key再对 UIN 空间2^24多进程爆破出图片 AES key若微信里从没打开过图片无_t.dat缓存这一步会跳过并提示请先在微信中查看 2-3 张图片成功则自动写回config.json的image_aes_key/image_xor_key该密钥只用于图片解密与数据库无关B提取所有数据库 keyfind_all_keys_windows.main收集db_dir下所有.db的 salt通过tasklist找所有Weixin.exe进程按内存降序多进程都扫VirtualQueryExReadProcessMemory逐块读取可读内存区域每块 500MB跳过不可读区正则匹配 → salt 配对 → HMAC 校验 → 记录到key_map1.3 预期输出对照判断进度提取所有微信数据库密钥 找到 37 个数据库, 12 个不同的salt salt a1b2...: message_0.db, message_1.db ... [] Weixin.exe PID1234 (2800MB) [*] 扫描 PID1234 (3200MB, 42 区域) [12.5%] 0/12 salts matched, 2351 hex patterns, 21.3s ... [FOUND] salta1b2... enc_key5f3d... PID1234 地址: 0x000002A1F3C4D500 数据库: message_0.db, message_1.db判定成功所有 salt 都打印[FOUND]最后一行结果: 12/12 salts 找到密钥 OK: message_0.db (12.3MB) OK: message_1.db ... 密钥保存到: E:\...\all_keys.json产物all_keys.json格式供decrypt_db.py使用{message_0.db:{enc_key:5f3d...64位hex,salt:a1b2...32位hex,size_mb:12.3},message_1.db:{enc_key:...,salt:...,size_mb:8.1},_db_dir:C:\\Users\\25844\\xwechat_files\\wxid_xxx_8804\\db_storage}1.4 耗时说明为什么会花很长时间因素影响内存扫描量Weixin.exe 常占 2~4GB全量逐块读取 正则匹配是主要耗时几分钟量级多进程微信渲染/子进程也扫进程越多越久salt 数量每命中一个 salt 就少匹配一个越到后面越快图片爆破UIN 2^24 空间多核并行下一般 1~3 分钟整体上首次提取 3~10 分钟属正常。中途的[12.5%]进度行不是卡死是正常的区域扫描进度。1.5 失败排查表按出现频率排序现象原因处理Weixin.exe 未运行微信没开/已退出重新登录微信并保持前台运行无法打开进程 PIDxxx权限不足用管理员权限重开 PowerShell杀软临时放行 python.exe扫完0/12 salts matched微信登录太短key 缓存未建立 / 权限不足读不到内存确认微信登录 2 分钟、检查管理员权限重跑部分 DBMISSING该库 salt 未在内存中key 未缓存先解密已找到的未找到的库可等下次微信运行重试图片密钥爆破跳过无_t.dat缩略图缓存在微信里打开 2-3 张聊天图片再重跑find_all_keys.py目录名不是wxid_xxx_端口无法推导图片 key检查config.json的db_dir是否为微信默认账号目录提取成功但解密报错key 是旧会话的微信已刷新密钥key 约每小时刷新提取后立即执行阶段 2 解密1.6 提速与稳妥建议提取前关掉其他大内存程序减少微信进程分页分页的内存读不到提取成功后立刻解密密钥有时效别隔天再跑可先只提取、不着急图片爆破图片密钥是独立步骤不影响聊天记录解密阶段 2解密数据库python decrypt_db.py # 全量解密 python decrypt_db.py -i # 增量只解更新的库 python decrypt_db.py --dry-run # 预览将解密的库读取db_dir下message_*.db、micro_msg.db等加密库按 key 解密输出到decrypted_dir本项目decrypted/得到明文 SQLitemessage_0..6.db注意解密前若存在 -wal/-shm 残留脚本会处理若报database disk image is malformed删除对应 -wal/-shm 后重试阶段 3导出聊天记录通用python export_all_chats.py把解密后的数据库导出为 JSON / CSV / HTML按联系人拆分自动关联媒体也可启动 Web UI 交互查看python monitor_web.py→ 浏览器打开 http://localhost:5678阶段 4导出目标联系人的媒体图片/表情/语音本项目的定制脚本硬编码了目标 wxid 和输出路径换联系人必须先改脚本顶部常量见关键常量一节# 图片解密 dec_all 目录下微信图片V1/V2/XOR 解码python batch_decrypt_save.py# 照片全量导出到 kemy/images/含 HEVC 解码依赖 cv2python export_photos.py# 表情包下载/整理 emoji 到 kemy/emoji/生成覆盖报告 emoji_report.txtpython finalize_emoji_all.py# 语音SILK → WAV 转换命名 日期_时间_序号.wav→ kemy/voice/# 参考 voice_to_mp3.py 或 pilk 库转换输出目录由脚本常量指定阶段 5语音转写ASRpython asr_kemy_voice_parallel.py本地 faster-whisper模型目录tools/wechat-decrypt/models/smallCPU int82 进程并行输入kemy/voice/*.wav输出kemy/asr/transcripts.csvfilename, datetime, duration_s, text断点续跑已转写的自动跳过阶段 6生成训练语料数字分身用python export_kemy_full.py # 精确 join ASR 转写输出统一 chat.txt python export_kemy_enriched.py # 增强版媒体消息带具体文件标识严格时间线输出kemy/combined/chat_enriched.txt格式文本消息直接输出图片[图片:md5.jpg]表情[表情:md5.gif]语音[语音:xxx.wav] 转录文本按(create_time, local_id)严格时间线排序同时生成media_sender_map.csv每条媒体是哪个发送者发的供区分我方/对方关键常量换目标联系人必须改本项目以kemy为例常量散落在各脚本顶部换人时全局搜索替换常量本项目值说明SELF_WXIDwxid_tx2otle9oiod22你自己本机账号的 wxidKEMY目标wxid_wx3ikgdnfk4u22目标联系人的 wxid消息表名Msg_ md5(目标wxid)Msg_ 目标 wxid 的 md5 十六进制MESSAGE_DBSmessage_0..6.db解密后的消息库列表输出根...\wechat_files\wxid_端口\kemy目标联系人导出目录输出物清单\wechat_files/wxid_tx2otle9oiod22/xxxx/ ├── combined/chat_enriched.txt # 最终训练语料严格时间线、媒体标识 ├── voice/*.wav # 全部语音724 个137 分钟 ├── images/*.jpg # 照片dec_all 解码后全量导出 ├── emoji/*.gif # 表情包 emoji_report.txt ├── asr/transcripts.csv # 语音转写文本 └── media_sender_map.csv # 媒体-发送者映射注意事项密钥有时效微信密钥约每小时刷新提取后尽快解密避免 key 失效管理员权限find_all_keys.py必须管理员运行否则读不到内存杀软干扰内存读取会被 Defender/杀软拦截需临时放行或白名单路径硬编码定制脚本export_/asr_/finalize_emoji*都是硬编码路径换联系人必须改否则会覆盖旧数据WAL 残留解密遇到 malformed 报错先清理对应 .db 的 -wal/-shm隐私解密数据含完整聊天/语音/照片仅用于本人合法用途