阅读本文前,您应当已经通过其他方法,获取到了数据库的密钥。如果没有,请先阅读对应平台的教程。
(目前)数据库密钥在代码中表示为pKey
,其值为32位可见字符,例如abcd1234.,.,ABCD1234567812345678
,以下以pass
替代。密码在每次打开数据库时都可能改变,您应当在获取密码前、获取密码后均备份一份数据库,并对两份数据库均尝试使用获得的密码解密。
(目前)加密使用SQLCipher,并更改了一些参数。
本教程适用于nt_msg.db
或group_msg_fts.db
,也可能可以用于其它部分数据库,以下统一以nt_msg.db
代替。
建议使用 非 Windows 环境。
以下标有仅 Linux
字样的即代表不可直接使用 Windows 系统的CMD
或Powershell
等执行。
若为 Windows,可使用 WSL / Git Bash 等模拟 Linux 环境;若为 Android,可使用 Termux 模拟 Linux 环境。
首先,将nt_msg.db
文件删除前1024字节,这可以通过以下方式完成:
使用二进制编辑器:Android 下的 MT 管理器(需要付费)、Windows 下的 HxD 等软件均可使用,细节从略。
使用tail
命令(仅 Linux):tail -c +1025 nt_msg.db > nt_msg.clean.db
使用 Python:python -c "open('nt_msg.clean.db','wb').write(open('nt_msg.db','rb').read()[1024:])"
完成后,得到nt_msg.clean.db
文件。
打开数据库可以通过 SQLiteStudio、DB Browser for SQLite 或sqlcipher
命令行 等工具完成。
见下。注意cipher_hmac_algorithm
在旧版本中可能为HMAC_SHA256
,以下部分截图也使用了此值,请自行尝试更改。
PRAGMA key = 'pass'; -- pass 替换为之前得到的密码(32字节字符串)
PRAGMA cipher_page_size = 4096;
PRAGMA kdf_iter = 4000; -- 非默认值 256000
PRAGMA cipher_hmac_algorithm = HMAC_SHA1; -- 非默认值(见上文)
PRAGMA cipher_default_kdf_algorithm = PBKDF2_HMAC_SHA512;
PRAGMA cipher = 'aes-256-cbc';
选择 nt_msg.clean.db
,按需修改KDF iterations
与HMAC algorithm
(见上文通用配置选项修改):
数据库类型选 SQLCipher,密码(密钥)为空,加密算法配置(可选)输入上文通用配置选项中内容。
对于Linux,从包管理器安装sqlcipher
包;对于Windows,从QQBackup/sqlcipher-github-actions下载SQLCipher可执行文件。
以下命令适用于Linux环境下的Bash等shell,Windows下可使用Git Bash等代替。
sqlcipher nt_msg.clean.db "pragma key = 'pass'; pragma kdf_iter = 4000; pragma cipher_hmac_algorithm = HMAC_SHA1;" .d | tail +2 | sqlite3 nt_msg.decrypt.db
请参考 基础教程 - NTQQ 读取数据库。