QQ聊天记录数据库解密终极实操:qq-win-db-key 全平台密钥提取与SQLCipher恢复指南
QQ聊天记录数据库解密终极实操qq-win-db-key 全平台密钥提取与SQLCipher恢复指南【免费下载链接】qq-win-db-key全平台 QQ 聊天数据库解密项目地址: https://gitcode.com/gh_mirrors/qq/qq-win-db-key面对nt_msg.db、Msg3.0.db这类文件很多人第一反应是用SQLite打开看看然后收到一屏乱码或file is not a database的报错。这不是文件坏了而是QQ NT 架构把聊天记录用 SQLCipher 加密锁了起来。gh_mirrors/qq/qq-win-db-key 正是为此而生——它提供覆盖 Windows、macOS、Linux、iOS、Android 的全平台密钥提取脚本帮你从正在运行的 QQ 进程里借出那把钥匙再配合 SQLCipher 参数完成解密让宝贵的聊天历史重新可读。一、故事一次换电脑差点丢了八年聊天记录朋友老周换了新笔记本把旧电脑的Documents\Tencent Files整个拷了过去。新 QQ 登录后历史消息一片空白。他去论坛求助得到的答复五花八门数据库损坏了要用专业工具修复先导 mht 备份。真相其实介于损坏和可救之间聊天记录数据库本身大概率完好无损只是没有密钥就打不开。老周缺的不是修复工具而是一把钥匙。这个项目的价值就是把找钥匙这件事从需要逆向工程师出手的活儿变成按脚本执行的流程。二、先搞懂三件事后面才不会走弯路在动手前值得花两分钟理解这套机制它能解释你遇到的大部分报错。第一数据库被 SQLCipher 加密了。QQ NT 使用 SQLCipherSQLite 的加密分支落盘没有密钥时任何标准工具读到的都是密文。密钥由运行中的 QQ 进程持有登录后动态生成。第二文件头多了 1024 字节。QQ 会在数据库文件最前面附加一段约 1KB 的特殊文件头SQLite 引擎无法识别。所以解密前要先把这 1024 字节剥掉文件才能真正被解析。第三解密不止需要密钥。就算拿到密钥还必须告诉 SQLCipher 一组匹配的参数页面大小、KDF 迭代次数、HMAC 算法等参数错一个结果依然是乱码。这组参数在下面的解密配方里给出。 一句话总结提取密钥脚本负责 移除文件头命令行负责 配置 SQLCipher 参数SQL 负责三件事做完数据库就向你敞开大门。三、平台工具地图你属于哪条路线项目把脚本按平台组织在scripts/目录下先看清地图再动手平台对应脚本目录关键技术适用对象WindowsQQ NTscripts/windows/ntqq/PowerShell 调试器新版 QQ一键脚本Windows旧版 PCQQscripts/windows/pcqq/Frida Hook老版 QQ含导出与重加密工具Linuxscripts/linux/readelf/objdump GDB深度 Linux 用户macOSApple Siliconscripts/macos/arm-nosip/LLDB 自动化无需关闭 SIP体验友好Androidscripts/android/Frida手机端取证/备份恢复iOSscripts/ios/Frida越狱环境或研究用途所有脚本的底层目标都是同一个在 QQ 调用nt_sqlite3_key_v2或旧版的sqlite3_key这个 SQLCipher 入口函数时拦截住密钥参数。理解了这一点不同平台只是用什么工具去拦截的区别。四、Windows 用户最快路径一条 PowerShell 命令拿到密钥如果你是普通 Windows 用户这是整个项目里最省事的路线。项目提供了windows_ntqq_get_key.ps1它做了三件自动化的事自动定位从注册表识别已安装的 QQ找到wrapper.node文件QQ NT 的加密核心模块静态分析在 PE 文件中定位nt_sqlite3_key_v2: db%p zDb%s字符串反推出引用它的函数地址动态提取以调试模式启动 QQ在目标函数设断点登录时自动捕获 16 字节密钥并打印。# 先放开本机脚本执行策略仅当前用户 Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser # 下载并执行一键脚本 irm https://raw.githubusercontent.com/QQBackup/qq-win-db-key/refs/heads/feat/pwsh-script-windows/windows_ntqq_get_key.ps1 | iex运行后按提示登录 QQ控制台会打印出找到密钥: xxxxxxxxxxxxxxxx。如果你只想做静态分析不想动进程可以加-NoDebugForKey参数跳过调试环节。此处建议插入一张 Windows 控制台打印出密钥的截图直观展示脚本输出效果。五、Linux 与 macOS两种优雅的钓鱼姿势LinuxGDB 断点守株待兔scripts/linux/linux_qq_get_key.py的思路很巧妙先用readelf解析wrapper.node的程序头用strings找到目标字符串的文件偏移再用objdump反汇编.text段找到引用该字符串的指令地址最后把 GDB 脚本注入进程在函数入口打印寄存器中的密钥。# 以 GDB 方式运行脚本脚本内部会自动完成静态分析与断点设置 gdb -batch -ex source linux_qq_get_key.py /opt/QQ/QQ脚本会把计算结果缓存到ref_off_cache文件同一版本的 QQ 二次运行几乎秒出结果。macOSLLDB 自动化无需关闭 SIPscripts/macos/arm-nosip/qq_key_extractor.py是一个 LLDB 自动化模块标题里的 nosip 是亮点——很多同类工具要求你关闭系统完整性保护这个方案不需要。它解析 Mach-O 的 fat binary在__TEXT段里用特征指令定位密钥函数随后在 LLDB 中设置断点回调(lldb) qq-setbp # 自动计算 slide 并设断点 (lldb) c # 放行等 QQ 登录登录瞬间断点回调读取 x2/x3 寄存器密钥自动打印QQ 全程正常运行不需要额外装依赖仅 Python 标准库 Xcode CLT。同一目录下的find_key_func.py和qq_web.py则是辅助脚本分别用于独立查找函数地址和 Web 端调试。此处建议插入一张 macOS 终端里 LLDB 打印密钥的过程截图。六、Android 与 iOSFrida 钩子实现手机端取证移动端的脚本全部基于 Frida。Android 的android_get_key.py通过特征字节码如FD 7B BD A9 F6 57 01 A9...在libkernel.so里定位key_v2函数用Interceptor.attach在调用时打印数据库名与密钥。它支持 Termux 环境也可以从桌面电脑通过 adb 远程注入# 设备端先启动 frida-server然后执行 python android_get_key.py 8.9.76android_get_backup_key.py则是为系统备份恢复场景准备的——配合 Android 系统备份功能导出的数据库也能用同样思路取回密钥。iOS 的ios_get_key.js原理一致只是换成了按偏移地址定位sqlite3_key_v2代码注释里甚至标注了对应版本 SQLCipher v4.5.1。⚠️ 移动端脚本要求关闭 Magisk Hide / Shamiko 并临时禁用 SELinux属于侵入性较强的操作务必在闲置设备上尝试。七、拿到密钥之后解密数据库的完整配方钥匙到手剩下两步就能打开数据库。这里给出一份可直接照抄的配方。第一步剥离 1024 字节文件头# Linux/macOS 下用 tail 直接截取第 1025 字节开始的内容 tail -c 1025 nt_msg.db nt_msg.clean.db第二步用 SQLCipher 参数打开在 DB Browser for SQLite勾选 SQLCipher 支持或 sqlcipher 命令行中执行PRAGMA key 这里填脚本输出的密钥; PRAGMA cipher_page_size 4096; PRAGMA kdf_iter 4000; PRAGMA cipher_hmac_algorithm HMAC_SHA1; PRAGMA cipher_default_kdf_algorithm PBKDF2_HMAC_SHA512; PRAGMA cipher aes-256-cbc;打开后建议立刻做一次完整性体检PRAGMA integrity_check; -- 检查数据完整性 SELECT name FROM sqlite_master WHERE typetable; -- 查看表结构 SELECT COUNT(*) FROM buddy_list; -- 验证消息表能否正常读取如果 integrity_check 返回ok说明数据完好解密成功后就能用 SQL 导出消息、按会话分组、生成 HTML 存档完成换机迁移的最后一公里。八、避坑清单动手前必读的五条红线这个项目在 README 顶部就用加粗字体反复强调风险我替各位划出重点先备份再动手。最稳妥的方式是先用 PCQQ 自带的导出消息记录mht 格式做一次官方备份再用系统备份功能或全盘备份兜底pcqq_DANGER_rekey.py千万别碰。脚本第一行就写着别用必定损坏原始数据库rekey 之后原密钥将永远失效纯属教学演示用途优先选择不注入进程的方式。能静态分析就别挂调试器能跑在虚拟机/闲置设备就别碰主力机脚本可能随 QQ 版本失效。密钥提取依赖特定版本的函数特征升级 QQ 后脚本可能需要按新版本调整使用前先审查代码仅限个人数据恢复与学习。项目声明明确不可用于法律取证须遵守所在地法律法规与软件许可协议。九、接下来从哪一步开始如果你是 Windows 用户直接跳到第四条路线今天就能跑通如果想先看完整代码再决定请先阅读根目录README.md再按scripts/windows/ntqq/→scripts/linux/→scripts/macos/arm-nosip/的顺序浏览各平台实现理解定位字符串 → 反查函数 → 断点拦截这套通用套路。动手前记得三件事备份原文件、准备闲置环境、审查你要运行的脚本。解密成功的那一刻看到多年前的消息重新浮出水面你会觉得这一切都值得。【免费下载链接】qq-win-db-key全平台 QQ 聊天数据库解密项目地址: https://gitcode.com/gh_mirrors/qq/qq-win-db-key创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

最新新闻

日新闻

周新闻

月新闻