手把手教你全平台QQ数据库解密:从密钥提取到聊天记录备份的完整实战指南

📅 2026/8/16 15:02:57
手把手教你全平台QQ数据库解密:从密钥提取到聊天记录备份的完整实战指南
手把手教你全平台QQ数据库解密从密钥提取到聊天记录备份的完整实战指南【免费下载链接】qq-win-db-key全平台 QQ 聊天数据库解密项目地址: https://gitcode.com/gh_mirrors/qq/qq-win-db-key很多人换手机、换电脑之后第一件事就是想把自己十几年的QQ聊天记录完整地导出来。可打开QQ的数据目录一看全是加密过的.db文件用SQLite工具根本打不开。这些数据库用了 SQLCipher 加密密钥藏在进程内存里普通用户根本无从下手。这个问题的核心就是 qq-win-db-key 这个开源项目要解决的它提供了一套覆盖 Android、iOS、Windows、macOS、Linux 五大平台的 QQ 数据库密钥提取与解密脚本让你在不修改QQ安装包、不注入进程的前提下尽可能安全地拿到数据库密钥进而备份和解密自己的聊天记录。本文不绕弯子直接讲清楚它的原理、怎么跑通、有哪些坑以及它到底值不值得你用。先别急着跑脚本它究竟是怎么做到的你可以把 QQ 的聊天数据库想象成一个上了密码锁的保险箱SQLCipher 就是那把锁而密钥就是开锁的钥匙。QQ 每次打开数据库时都要在内存里调用一个函数——nt_sqlite3_key_v2——把钥匙递给 SQLCipher。这个函数调用发生的一瞬间钥匙就明晃晃地出现在内存里。所以整个项目的思路非常简单粗暴在钥匙经过的那扇门旁边装一个摄像头拍下钥匙长什么样。不同平台拍的摄像头不同Android / iOS用 Frida 动态注入在nt_sqlite3_key_v2函数入口挂 Hook把参数也就是密钥直接打印出来。对应的脚本是 scripts/android/android_get_key.py 和 scripts/ios/ios_get_key.js。Windows比较特别QQ NT 版的加密逻辑在wrapper.node这个文件里。PowerShell 脚本 scripts/windows/ntqq/windows_ntqq_get_key.ps1 会先做静态分析在 PE 文件里找到引用nt_sqlite3_key_v2字符串的那条 LEA 指令定位到函数再用调试器附加进程、下断点、抓参数。Linux走 GDB 路线。scripts/linux/linux_qq_get_key.py 先用readelf、strings、objdump做静态定位算出函数偏移再在dlopen加载wrapper.node后下断点抓取寄存器里的密钥。macOS用 lldb 自动化scripts/macos/arm-nosip/qq_key_extractor.py 甚至不需要关闭 SIPApple Silicon 上直接 attach 后设断点就能拿密钥。旧版 PCQQ单独一套方案scripts/windows/pcqq/pcqq_get_key.py 用 Frida HookKernelUtil.dll里的sqlite3_key。一句话总结静态分析负责找门动态调试负责装摄像头两者配合密钥就拿到了。从零到一3 步跑通最小可行案例先别急着全平台铺开。最快的上手路径是 Android 平台因为它对环境的依赖最少一台已 root 的手机 电脑即可。跟着下面三步走你大概率第一次就能跑通。第 1 步准备环境pip install frida-tools adb devices # 确认手机已连接且授权手机上装好 QQ 并登录确认设备已 root然后启动 frida-server注意架构要匹配arm64 手机就用 arm64 版本。第 2 步运行提取脚本python scripts/android/android_get_key.py 8.9.76脚本会提示你先关闭 Magisk Hide 和 Shamiko禁用 SELinux然后打开 QQ 进入主界面退出登录再重新登录。重新登录的瞬间就是数据库被打开、密钥被调用的时候脚本会在此时捕获密钥并打印出来。第 3 步验证并保存密钥你会在输出里看到类似这样的内容¦- targetDB: ... ¦- *zDb: nt_msg.db ¦- *pkey: abcd1234.,.,ABCD1234567812345678 ¦- nKey: 32这就是 32 字节的数据库密钥。先别急着高兴用 SQLCipher 命令行验证一下sqlcipher encrypted.db PRAGMA key abcd1234.,.,ABCD1234567812345678; PRAGMA cipher_page_size 4096; PRAGMA kdf_iter 4000; PRAGMA cipher_hmac_algorithm HMAC_SHA512; PRAGMA cipher_kdf_algorithm PBKDF2_HMAC_SHA512; .schema能正常列出表结构说明密钥和参数都对上了恭喜你最小可行案例跑通了。完整落地五平台部署与调优要点跑通 Android 只是开始。真实使用场景往往横跨多个设备这里把每个平台的部署要点一次说清。Windows NTQQ一条命令自动搞定Windows 是最省心的平台脚本 scripts/windows/ntqq/windows_ntqq_get_key.ps1 会自动检测已安装的 QQ、定位wrapper.node然后启动 QQ 并附加调试器提取密钥.\windows_ntqq_get_key.ps1如果只想做静态分析、不想真启动 QQ 调试加一个参数即可.\windows_ntqq_get_key.ps1 -NoDebugForKey脚本兼容 Windows PowerShell 5.0 和 PowerShell Core 7.0基本开箱即用。LinuxGDB 一条龙Linux 桌面版的 QQ NT 同样把加密逻辑放在/opt/QQ/resources/app/wrapper.node。直接以 root 运行 scripts/linux/linux_qq_get_key.py脚本会走完解析 ELF → 找字符串 → 找引用 → 断点抓参的全流程并把函数偏移缓存到本地ref_off_cache文件QQ 更新后会自动检测文件哈希变化并重新计算。macOS免关 SIP 的优雅方案macOS 上最友好的入口是 scripts/macos/arm-nosip/qq_key_extractor.py。它只需要 Python 标准库和 lldbXcode Command Line Tools 自带。开两个终端# 终端 A附加并导入脚本 lldb -n QQ -w --one-line command script import /path/to/qq_key_extractor.py # 终端 B启动 QQ open /Applications/QQ.app回到终端 Aprocess continue放行、Ctrl-C 暂停、qq-setbp设断点、c继续然后在 QQ 里点登录密钥就自动打印出来了。整个过程不需要关闭 SIP安全边界保持完好。旧版 PCQQ 的特殊情况如果你还在用旧版 PCQQ非 NT 架构密钥逻辑在KernelUtil.dll用 scripts/windows/pcqq/pcqq_get_key.py 配合 Frida 处理。注意脚本里对 QQ.exe 命令行参数有判断要匹配带/hosthwnd那个完整进程直接跑可能找不到进程需要先确认 QQ 进程状态。解密阶段的通用配置无论哪个平台拿到的密钥解密时都建议统一使用这套参数对应 SQLCipher 3/4 标准参数值Page size4096 字节KDF iterations4000 次HMAC 算法SHA512KDF 算法SHA512参数必须与数据库创建时一致缺一个都解不开。若 4000 次迭代失败可尝试 64000 次新版 SQLCipher 默认值再验证。踩坑实录为什么你的密钥提取会失败这个项目把风险两个字写在了 README 最显眼的位置这不是客套话。我梳理了最常见的四类失败每一条都是真实翻车现场坑 1版本不匹配脚本直接罢工脚本里的函数特征码pattern是按特定 QQ 版本生成的。比如 Android 的android_get_backup_key.py只适配了 8.9.76android_get_key.py支持 8.9.58 到 8.9.76 的几个版本。QQ 一升级特征码对不上Memory.scanSync就找不到函数直接输出 Pattern NOT FOUND。解决办法是先看脚本注释里支持的版本号必要时自己用 IDA 或 Ghidra 重新定位函数特征。坑 2SELinux 和 Magisk 拦截Hook 静默失败Android 端脚本开头就反复强调关闭 Magisk Hide、关闭 Shamiko、禁用 SELinux。很多人在这一步翻车——Hook 看起来装上了但 SELinux 拦截了内存读写密钥怎么都抓不到。这不是脚本的问题是环境策略没放行。先setenforce 0再重试。坑 3拿到的密钥解不开数据库密钥对了、参数不对照样打不开。最常见的是 KDF 迭代次数猜错4000 vs 64000以及没设cipher_page_size 4096。建议解密前先用PRAGMA integrity_check;检查数据库完整性再逐个核对参数。坑 4平台架构差异被忽略Android 脚本明确警告别用 x86/x64 模拟器跑必须真机或 ARM 架构环境。macOS 脚本区分 ARM 与 x86Windows 脚本要解析 PE64。跨平台项目最容易出的问题就是把 A 平台的假设套到 B 平台上。关于风险必须说透这个项目官方声明得很清楚——脚本可能破坏聊天记录或触发风控导致封号。所以操作前请务必先用 PCQQ 自带的导出消息记录mht 格式做保险备份再对原始数据做完整备份Android 系统备份或电脑全盘备份最后优先在不常用设备或虚拟机里操作。能选择不注入进程的方案比如 Windows 的静态分析模式就尽量别走动态注入。有它和没它价值一目了然对比维度没有它用 qq-win-db-key拿到数据库密钥需要自己逆向定位函数、手写 Frida/GDB 脚本动辄数天平台脚本开箱即用分钟级出结果平台覆盖每个平台都要从头研究一套五大平台脚本齐备逻辑互通理解成本需要完整掌握逆向工程脚本注释详实静态/动态分析思路清晰更新维护自己踩坑自己填社区持续适配新版本贡献者可提 PR安全可控容易误操作损坏数据提供静态分析等低风险模式风险提示到位简单说它把一条从逆向分析到拿到钥匙的完整技术链路压缩成了几个可复用的脚本把你从研究原理中解放出来让你直接进入备份数据这个真正的目标。写在最后技术是工具数据是你的回到开头的疑问为什么聊天记录这么难备份因为加密是保护而保护必然带来访问的门槛。qq-win-db-key 做的事情本质上是用逆向工程的手段把只有 QQ 自己知道的钥匙找回来交还给你这个数据的主人。请记住三条原则第一这是学习交流用途的工具遵守当地法律和腾讯服务协议是底线第二操作前永远先备份数据损坏的代价远大于技术成就第三它不保证结果完整准确生成内容也不可用于法律取证。想深入研究的读者可以从 scripts/android/android_get_key.py 的 Frida 脚本读起理解特征码定位函数的思路后再看 scripts/windows/ntqq/windows_ntqq_get_key.ps1 的静态分析部分最后对比 scripts/linux/linux_qq_get_key.py 的 GDB 流程——三条技术路线看下来你对逆向工程的整体认知会上一个台阶。备份的意义在于让那些值得记住的对话不随设备和账号的变迁而消失。愿你的聊天记录从此真正属于你。【免费下载链接】qq-win-db-key全平台 QQ 聊天数据库解密项目地址: https://gitcode.com/gh_mirrors/qq/qq-win-db-key创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考