QQNT 聊天数据库提取

QQNT Windows 客户端版本 9.9.18-32869 可用

使用工具:
反编译工具:IDA Pro 8.3 绿色版
加密数据库读取工具:DB Browser for SQLCipher

获取聊天信息数据库密码

  1. 使用 IDA Pro 新建项目,导入 {QQNT安装路径}\versions\{版本号}\resources\app\wrapper.node 文件,导入选项默认,如果有弹出 symbol 文件相关提示框点击 "No",等待文件加载完成。
  2. 按快捷键 Shift+F12` 打开 Strings 标签,等待页面加载完成。切换到 Strings 标签使用鼠标单击内部区域,按快捷键 Ctrl+F 打开搜索框,输入 nt_sqlite3_key_v2
    2025-04-07T04:32:22.png
  3. 双击 nt_sqlite3_key_v2: db=%p zDb=%s 一行,跳转到 IDA View-A 标签的对应行。
  4. 点击顶部导航栏 Options 中的 General... 菜单项,打开 IDA Options 窗口。在 Disassembly 标签页中,将 Display assembly lines 中的 Source line numbers 勾选上,点击 "OK" 按钮。
    2025-04-07T04:32:01.png
    2025-04-07T04:32:53.png
  5. IDA View-A 标签中,单击 nt_sqlite3_key_v2 的名称 aNtSqlite3KeyV2,按快捷键 X 打开交叉引用窗口。
    2025-04-07T04:33:25.png
  6. 双击第一条结果,转到引用位置。
    2025-04-07T04:33:43.png
  7. 按快捷键 F5 进行反编译,如果有弹出窗口点击 "Yes"。等待反编译完成。
    2025-04-07T04:34:07.png
  8. 单击引用语句的左侧蓝色圆点添加断点。
    2025-04-07T04:34:22.png
  9. 修改 Debugger 下拉框的值为 Local Windows Debugger
    2025-04-07T04:36:01.png
  10. 如果有正在运行的 QQNT 客户端,先全部退出。打开一个新的 QQNT 客户端,进入登录界面并暂停操作。
  11. 在 IDA 中点击顶部导航栏 Debugger 中的 Attach to process... 菜单项,打开 Attach to process 窗口。拉到最下方,找到从上往下数第一个 QQ.exe 进程,双击打开。
    2025-04-07T04:37:31.png
  12. 等待加载完成后按快捷键 F9 继续运行。登录 QQNT,触发断点。
  13. 在 IDA 中点击顶部导航栏 Debugger 中的 Debugger windows 菜单项,打开 Locals 选项卡。
    2025-04-07T04:38:21.png
  14. 右击 Locals 选项卡的 a3,点击 Jump to... 菜单项。
    2025-04-07T04:38:46.png
  15. 记录对应地址从 0 到 F 的 16 个字节对应的字符串,即为数据库密码。
    2025-04-07T04:39:57.png

导出聊天记录

聊天记录数据库默认在 {文档}\Tencent Files\{QQ号}\nt_qq\nt_db\nt_msg.db,前 1024 个字节中有 HMAC 加密方式,去掉前 1024 个字节后是加密数据库本体,下称前 1024 个字节为 nt_msg.head.db,本体为 nt_msg.body.db。注意复制后操作,不要影响原数据库。

  1. 打开 DB Browser for SQLCipher.exe,打开 nt_msg.body.db 文件。输入上文获取的数据库密码,将加密设置改为自定义,KDF 迭代改为 4000,HMAC 算法改为 nt_msg.head.db 中出现的算法。
    2025-04-07T05:15:49.png
  2. group_msg_table 表存有所有群聊聊天记录,40021 列为群号。可直接在 文件 下拉菜单中导出表,或执行 SQL 命令过滤出自己想要的群聊后保存为新表(保存为视图)后再导出:

    SELECT *
    FROM `group_msg_table`
    WHERE `40021` = {群号}
    2025-04-07T05:22:39.png

参考文献:

By Number_Sir On