-
Notifications
You must be signed in to change notification settings - Fork 76
Description
可能确定了是源文件的问题,或者解密方式的问题
我有3个 qqdb 数据库
一个100MB 左右,一个 1 GB 左右,一个5.9GB 左右
- 100MB 的可以直接用 sqlcipher 解密db 文件为未加密的 db 文件
- 1 GB 的和 5.9GB 的均要在 Windows sqlcipher 解密成导出成 sql 文件,再用 msys2指令导出 sql 文件为 db 文件。msys2的这个指令把错误的行忽略跳过了,所以才能导出
- 上面说到的msys2的指令是qq-nt-db里面的
$ cat nt_msg.sql | sed -e 's|^ROLLBACK;\( -- due to errors\)*$|COMMIT;|g' | sqlite3 nt_msg.db
经查看,我的 1 GB db数据库 c2c_msg_table 这个表在58990行开始,数据无法读取,如图所示。
该表格使用唯一 id 也就是40001行正序排列,该列与时间戳列的排序方式不一致,在无法读取的前一行,我查看时间戳是1742467919,(2025-03-20 18:51:59)与我导出整个数据库的时间无异
(关于排列方式,也可能考虑是直接把无法读取的数据库放在了后面,具体这些内容是什么,以及怎么解密,我不了解方法)
(值得一提的是,该数据库的group_msg_table 表并没有损坏)
下图的左边是 db 文件,导出为 sql 文件,再导入回 db 文件的 db 文件
右边是原始的 db 文件
在5GB db 数据库同样也出现了类似的问题,不过这次出问题的是 group_msg_table
有效的数据累计有130万条左右,包括无效的总的有700万条左右,按照首列唯一消息 id 排序,最后一条群聊消息的时间戳是1709012044(2024-02-27 13:34:25)通过筛选,可以筛选出不到36条比这个大的时间戳,但是全部是170开头的,除了有两条173开头的1737685884(2025-01-24 10:31:24)但是我在二五年的消息记录应该很多才对
故考虑是本来导出的db数据库就损坏,或者没有选对解密方式,而不是故意以另外的方式加密
下图为原始的 db 文件
在无法加载行的页面持续停留, Windows sqlcipher 不会持续加载
数据库这里的窗口太多,每次我拿 pixpin 截屏的时候,滑动鼠标滚轮扩大选取窗口的时候,pixpin 也不响应了
至此,数据库损坏的原因可能是清楚了,我在考虑用二进制查看器或者其他的什么,来查看一下这些损坏的数据。或者有没有办法修复?
这些损坏的数据导出为 csv 文件时,依然不能导出
Originally posted by @kuyunjian in #57