做到这些居然用了一天时间;还是用的很笨的免费LLM;所以,如果有人有更好的agent和LLM,应该可以做得更好,我只是提出这个想法,试做成功了而已
即时通讯数据提取 · SILK 转码 · 动态照片提取toolkit

纯离线、本地、零封号风险的工具集:一端从本地即时通讯数据库提取原始 .silk 语音 / 文字聊天记录 / 收发文件目录 / 图片,一端把 .silk 转码为 MP3/WAV,另一端把手机动态照片拆分为静态图 + 视频。三件事严格分离——提取工具绝不解码,转码工具绝不接触加密密钥,照片提取仅做字节切割。
本仓库为 private,仅供自己备份 / 研究使用。
仓库结构
voice-silk-toolkit/
├── README.md # 本文件(仓库总览)
├── voice-extract/ # 组件一:语音提取技能 (Skill)
│ ├── SKILL.md # 技能说明(含 version 字段)
│ ├── CHANGELOG.md # 版本变更日志
│ ├── references/schema.md # 数据库表结构 / 数据布局
│ └── scripts/
│ ├── decrypt_v4.py # 数据库解密模块(魔改 SQLCipher v4)
│ ├── server.py # 本地回环 HTTP 服务(浏览器界面筛选提取语音)
│ ├── extract_by_year.py # 命令行按单一年份提取语音
│ ├── extract_all_timestamped.py # 命令行全量/多年份提取语音(文件名带时间标签)
│ ├── export_chat.py # 命令行按会话导出 文件目录+文字记录+图片
│ ├── launch.bat # Windows 一键启动
│ └── static/index.html # 服务前端页面
├── silk-converter/ # 组件二:SILK → MP3/WAV 转码工具
│ ├── README_SILK2MP3.md # 转码工具说明
│ ├── silk2mp3.html # 纯前端离线转码界面(双击即用)
│ ├── silk2mp3.py # Python 启动器 / 命令行批量转码
│ ├── run_silk2mp3.bat # Windows 一键批处理
│ ├── silk_lib/ # 解码依赖(silk.wasm / lame / jszip 等)
│ └── Images/ # 界面截图(工具组件,非案件证据)
└── motion-photo-extractor/ # 组件三:动态照片提取工具
├── CHANGELOG.md # 版本变更日志
├── extract_motion_photos.html # 纯前端离线预览+提取界面(双击即用)
├── extract_motion_photos.py # 标准库命令行版(零依赖)
└── 使用说明_预览与编辑.md # 功能与交互说明
⚠️ 本仓库不含任何案件语音样本(.silk/.mp3/.wav 文件已刻意排除),仅含可复用的工具与说明。语音文件请由使用者自行从本地应用目录经提取工具产出。
组件一:voice-extract(提取,当前版本 1.2.1)
从目标即时通讯应用 4.0 本地数据 xapp_files\\<user_id>\\db_storage\\ 中纯离线提取四类内容:
核心原理
- 该应用 4.0 使用魔改 SQLCipher v4:HMAC 密钥由 salt ^ 0x3a 派生(标准 SQLCipher 无法复现)。
- decrypt_v4.py 实现:
- cipher_key = PBKDF2-HMAC-SHA512(口令, salt, 256000 轮, 32B)
- mac_key = PBKDF2-HMAC-SHA512(cipher_key, salt ^ 0x3a, 2 轮, 32B)
- 逐页 AES-256-CBC 解密(页 4096、保留 80 字节:IV 16 + HMAC 64),HMAC-SHA512 校验。
- 语音:db_storage/message/media_*.db、biz_media_*.db 的 VoiceInfo 表(voice_data BLOB,头部 0x02#!SILK_V3);会话名经 Name2Id 映射,显示名在 contact/contact.db。
- 消息:message/message_N.db 的 Msg_<md5(username)> 表(同会话分片多库,自动合并去重),local_type & 0xFFFFFFFF 判定类型(1 文字明文 / 3 图片 / 49 文件 / 10000 系统)。
- 文件:message/message_resource.db 的 MessageResourceInfo/Detail,packed_info protobuf 解析文件名;磁盘位置 msg/file/YYYY-MM/<存储名>。
- 图片:msg/attach/<md5(username)>/YYYY-MM/Img/<hash>.dat(单字节 XOR 加密,暴力 key 0-255 按魔数还原)。
依赖
- Python 3.10+,仅需一个包:pip install pycryptodome
- 推荐运行环境:用户自备 Python 环境(例如 C:\\Users\\<user>\\path\\to\\python.exe)
用法
# ① 语音:命令行全量/多年份提取,文件名自带北京时间标签 YYYYMMDD_HHMMSS
WKEY=<64位十六进制密钥> python scripts/extract_all_timestamped.py \\
–root "C:/path/to/xapp_files/<user_id>_xxxx" \\
–out voices_all.zip \\
–years 2021 2022 2023 2024 2025 2026
# ② 会话批量导出:文件目录 + 文字记录 + 图片(自动合并分片、判定收发方向、XOR还原图片)
WKEY=<密钥> python scripts/export_chat.py \\
–root "C:/path/to/xapp_files/<user_id>_xxxx" \\
–out chat_export.zip \\
–targets "群组显示名=<群ID>;好友显示名=<好友ID>"
# ③ 命令行按单一年份提取语音(保留解密库用 –decrypt-dir)
WKEY=<密钥> python scripts/extract_by_year.py 2022 \\
–root "C:/path/to/xapp_files/<user_id>_xxxx" –out-dir ./silk_2022 –decrypt-dir ./decrypted_dbs
# ④ 或启动浏览器界面(密钥仅存内存)
python scripts/server.py # 启动后访问本地服务(默认端口)
安全边界(硬性)
组件三:motion-photo-extractor(动态照片提取,当前版本 v1.5.2)
把主流手机拍摄的 **Motion Photo(动态照片)**无损拆分为静态图(JPG/HEIC)与视频(MP4)。纯字节切割、零转码、零画质损失。
核心原理
- 方案一(主流品牌 A):完整 JPEG + 16 字节标记 b"MotionPhoto_Data" + 完整 MP4。图片 = 标记之前;视频 = 标记之后跳过 16 字节。
- 方案二(主流品牌 B,启发式):文件以 b"ftyp"(MP4) 开头、静态 JPEG 在末尾。取最后一个 JPEG 起始标记 b"\\xff\\xd8\\xff" 分界:视频 = 开头到该位置,图片 = 该位置到结尾。
- 仅做字节切割,不做转码,零画质损失。
两个版本
| HTML 网页版(推荐) | extract_motion_photos.html | 拖放/多选 → 拆分 → 预览 → 下载,零依赖、离线可用。支持多卡片网格布局、窗口自由缩放、旋转预览、一键批量导出 JPG/MP4/全部(带去重时间后缀) |
| Python CLI 版 | extract_motion_photos.py | 纯标准库实现,零第三方依赖。支持 -o 输出目录、-r 保留原文件名、-d 提取后删除原文件、–no-heuristic 禁用启发式检测 |
用法
# Python CLI
python extract_motion_photos.py a.jpg b.jpg # 提取多个文件,输出到同目录
python extract_motion_photos.py *.jpg -o out/ # 输出到 out/ 目录
python extract_motion_photos.py a.jpg -r # 保留原文件名(不加 _photo/_video)
python extract_motion_photos.py a.jpg -d # 提取成功后删除原文件
# HTML 网页版
# 直接双击 extract_motion_photos.html,拖入动态照片即可预览并下载
依赖
- HTML 版:无任何依赖,现代浏览器即可。
- Python 版:Python 3.6+,纯标准库,零第三方依赖。
安全边界
- 纯本地处理,不上传任何服务器。
- 仅做字节切割,不修改原始文件内容(-d 选项删除原文件需用户显式指定)。
组件二:silk-converter(转码,纯前端/本地)
将提取出的 .silk / .aud / .amr 语音解码并转换为 MP3 / WAV,也可反向把音频转为该应用可发送的 Silk 格式。所有计算在本地浏览器 / 本地 Python 完成,绝不上传服务器。
用法
- 方式一(最推荐):直接双击 silk2mp3.html,完全脱机、免安装,拖入文件即转。
- 方式二(Windows 批处理):双击 run_silk2mp3.bat,按提示选「Web 界面」或「命令行批量转」。
- 方式三(Python 命令行):python silk2mp3.py –batch(需 Node.js 解码 + 可选 ffmpeg;无 ffmpeg 时退化为纯 Python 写 WAV)。
版本
| voice-extract | 1.2.1 | 语音/文字/文件目录/图片四类提取,见 voice-extract/CHANGELOG.md |
| silk-converter | 随附(第三方现代化封装) | 见 silk-converter/README_SILK2MP3.md |
| motion-photo-extractor | v1.5.2 | 动态照片拆分(HTML + Python CLI),见 motion-photo-extractor/CHANGELOG.md |
许可证
本仓库为个人私有工具集,保留所有权利。暂不公开。
网硕互联帮助中心


评论前必须登录!
注册