ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

想备份自己的QQ聊天记录?3个关键问题带你入门全平台数据库解密

想备份自己的QQ聊天记录?3个关键问题带你入门全平台数据库解密 想备份自己的QQ聊天记录3个关键问题带你入门全平台数据库解密【免费下载链接】qq-win-db-key全平台 QQ 聊天数据库解密项目地址: https://gitcode.com/gh_mirrors/qq/qq-win-db-key换手机、重装系统、清理旧电脑……每当想起那些年散落在 QQ 里的聊天记录你是不是也担心过它们某天就此消失开源项目 qq-win-db-key 就是为解决这个痛点而生的它通过逆向分析技术提取 Windows、Android、iOS、macOS、Linux 全平台 QQ 聊天数据库的解密密钥让你能把自己账号下的聊天数据真正搬回家。读完这篇文章你会弄明白三件事聊天记录为什么被锁起来、钥匙密钥是怎么被捡到的、拿到钥匙后如何开箱解密。中间穿插真实踩坑记录帮你把弯路省掉。问题一聊天记录为什么被锁在保险箱里先看一个现象QQ 的聊天记录并不是躺在某个文件夹里的明文文件而是一个经过加密的数据库。它的本质是 SQLite 数据库但套了一层名为SQLCipher的加密壳。你可以把它想象成一个上了密码锁的保险箱保险箱本身.db文件就摆在你的电脑或手机里但你没有密码只能看着一柜子资料干瞪眼。SQLCipher 的锁有两道工序加密用密钥对数据库内容做 AES 加密让任何直接打开文件的人都只能看到乱码防撬通过 KDF 迭代故意拖慢暴力破解的速度——可以理解为保险箱的密码盘每转一次都要故意多咯噔几圈。QQ 常见配置是页面大小 4096 字节、KDF 迭代 4000 次部分版本为 64000、哈希算法 SHA512。这里有个关键点加密参数必须与建库时完全一致。就像保险箱的密码盘刻度必须对齐否则即便你有钥匙也打不开。那么问题来了钥匙在哪QQ 不会把密钥写进配置文件——它是在程序运行时临时算出来的。这就引出了第二个问题。问题二密钥藏在哪里三条捡钥匙的路线既然密钥只在运行时出现思路就只有一个在 QQ 调用开锁函数的那一刻把它手里的钥匙抄下来。这个开锁函数在 NT 版 QQ 里叫nt_sqlite3_key_v2你可以把它当成保险箱的官方开锁员——所有数据库解密都要经过它而它每次开门时密钥就明晃晃地握在手里。不同平台蹲守这个开锁员的方式各不相同项目为每个平台都准备了参考实现。路线一WindowsNTQQ——调试器守株待兔脚本scripts/windows/ntqq/windows_ntqq_get_key.ps1会做两件事静态分析wrapper.nodeQQ 的 Node 原生模块加密逻辑就藏在这里找到引用nt_sqlite3_key_v2字符串的那条 LEA 指令再顺着异常表定位出它所属的函数地址用调试器启动 QQ在该函数入口写入一个断点等你在 QQ 窗口登录账号、函数被调用的瞬间从寄存器里读出那串 16 字节的密钥。整个过程像极了在开锁员必经之路上装了一个绊线他一路过就触发警报我们顺手拿走他口袋里的钥匙。路线二Linux——readelf、objdump 与 GDB 三件套scripts/linux/linux_qq_get_key.py的思路一脉相承但工具换成了 Linux 原生的调试链用readelf -lW定位.rodata段用strings找到nt_sqlite3_key_v2: db%p zDb%s字符串的偏移用objdump反汇编找出引用该字符串的指令地址最后让 GDB 接管 QQ 进程在关键函数处停下直接读取寄存器里的数据库名和密钥。有意思的是脚本会把分析结果缓存到本地ref_off_cache文件下次运行直接复用不用每次重新反汇编几十 MB 的二进制。路线三Android / iOS——Frida 动态注入移动端没有调试器那么方便项目改用Frida往 QQ 进程里注入一段 JavaScript先在内存中扫描libkernel.so的特征字节码定位key_v2函数然后拦截它把参数里的密钥直接打印出来。scripts/android/android_get_key.py和scripts/ios/ios_get_key.js走的就是这条路。至于旧版 PCQQWindows 老版本pcqq_get_key.py则 Hook 的是KernelUtil.dll里的sqlite3_key专门盯Msg3.0.db的调用。一句话总结没有银弹每个平台都有自己的入口而项目已经为每个入口都搭好了脚手架。macOS 侧甚至提供了无需关闭 SIP 的提取工具scripts/macos/arm-nosip/尽量不动系统安全设置。问题三拿到密钥后如何一步步解密数据库假设你已经拿到一串 16 字节的可见字符密钥比如abcd1234.,.,ABCD1234。接下来就是开箱环节——用 SQLCipher 命令行工具打开数据库sqlcipher encrypted.db PRAGMA key 你的密钥; PRAGMA cipher_page_size 4096; PRAGMA kdf_iter 4000; PRAGMA cipher_hmac_algorithm HMAC_SHA512; PRAGMA cipher_kdf_algorithm PBKDF2_HMAC_SHA512;如果密钥和参数都正确你就能正常执行 SQL 查询了。更推荐的做法是导出一份明文副本方便后续用 DB Browser for SQLCipher 等图形工具浏览ATTACH DATABASE decrypted.db AS plaintext KEY ; SELECT sqlcipher_export(plaintext); DETACH DATABASE plaintext;3分钟速通全平台密钥提取上手指南动手前先明确一件事这不是一个双击即用的小白工具脚本往往需要根据 QQ 版本和系统环境微调。上手指南如下git clone https://gitcode.com/gh_mirrors/qq/qq-win-db-key cd qq-win-db-key # Windows自动检测已安装的 QQ先做静态分析再附加调试器提取密钥 powershell -ExecutionPolicy Bypass -File scripts/windows/ntqq/windows_ntqq_get_key.ps1 # Linux依赖 readelf / strings / objdump / gdb且 QQ 需安装在 /opt/QQ python3 scripts/linux/linux_qq_get_key.py # Android手机需 root 并运行 frida-server传入 QQ 版本号 python3 scripts/android/android_get_key.py 8.9.58拿到密钥后回到上面的 SQLCipher 命令完成解密。整个流程的核心就三步提取密钥 → 匹配参数 → 导出明文。避坑实录解密失败的5个常见排查方向以下踩坑点大多来自脚本作者在注释里反复强调的注意提前知道能省下半天排查时间。1. 版本对不上特征码扫不到Android 脚本内置了 8.9.58、8.9.63、8.9.68、8.9.76 四个版本的特征字节码版本一更新就报Pattern NOT FOUND。解决思路确认你的 QQ 版本必要时用 IDA 等工具自己定位新版key_v2函数的特征。2. 安全机制半路拦截Android 上开着 Magisk Hide 或 ShamikoFrida 注入会被 QQ 的反调试检测拦下SELinux 处于 enforcing 状态也会导致注入失败更要注意的是x86/x64 模拟器不支持必须用 ARM 真机。脚本启动时会把这些注意事项打印出来逐条对照即可。3. 解密失败先别怀疑密钥用对的密钥却打不开库十有八九是参数不匹配KDF 迭代是 4000 还是 64000SQLCipher 是 3 还是 4就像保险箱密码盘刻度没对齐钥匙再对也白搭。建议把几种参数组合都试一遍。4. Windows 出现多个版本目录QQ 升级后安装目录的versions/下可能残留多个版本文件夹脚本无法自动判断时会抛错。此时手动指定wrapper.node的完整路径即可.\windows_ntqq_get_key.ps1 -WrapperNodePath C:\QQ\versions\9.x.x\resources\app\wrapper.node5. 缓存文件骗了你Linux 脚本的ref_off_cache缓存会校验文件哈希QQ 升级后自动重算但如果你换了 QQ 安装路径或手动改过文件记得删掉缓存再跑否则可能拿到过期的函数地址。写在动手前安全、合规与风险提示这部分必须说清楚语气不吓唬人但请你认真对待。数据安全脚本可能破坏聊天记录建议先使用 PCQQ 自带的导出消息记录mht 格式功能做一次官方备份再在虚拟机或不常用的设备上测试账号风险注入进程、附加调试器等操作可能触发 QQ 风控存在账号异常甚至封号的可能请自行评估风险合规边界本项目仅供学习交流请遵守所在地法律法规和 QQ 软件许可及服务协议不要用于法律取证、商业用途或任何越权行为使用前审查代码仓库 README 明确提醒使用前请先审查代码并备份数据——这是底线也是对自己负责。另外要说明的是本文介绍的是提取自己账号数据的密钥。对他人数据动手、或绕过账号本身的权限验证属于另一码事不在讨论范围内也不该做。最后你能带走什么下一步看什么回顾这趟旅程你从为什么聊天记录被锁出发搞懂了保险箱SQLCipher与钥匙密钥的关系看见了三条捡钥匙的路线——Windows 的调试器蹲守、Linux 的 GDB 接管、移动端的 Frida 注入——也知道了拿到钥匙后如何开箱导出。接下来你可以做的探索还有很多读一读scripts/macos/arm-nosip/目录看看不关闭 SIP的提取思路与 Windows 版有何异同研究scripts/windows/pcqq/下的pcqq_dump.py理解老版本的数据导出与重加密流程pcqq_DANGER_rekey.py连文件名都写着危险先别急着跑如果你是开发者不妨想一想同样的在开锁函数处截获密钥的思路能不能复用到其他用 SQLCipher 保护数据的应用上技术是工具边界在人心。希望这篇文章能帮你安全地把自己的数据拿回来也让你对加密与破解这对永恒博弈多一分敬畏与理解。【免费下载链接】qq-win-db-key全平台 QQ 聊天数据库解密项目地址: https://gitcode.com/gh_mirrors/qq/qq-win-db-key创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表