Skip to content

database disk image is malformed数据库损坏的地方貌似找到了,不知道原因和处理方法 #58

@kuyunjian

Description

@kuyunjian

可能确定了是源文件的问题,或者解密方式的问题
我有3个 qqdb 数据库
一个100MB 左右,一个 1 GB 左右,一个5.9GB 左右

  1. 100MB 的可以直接用 sqlcipher 解密db 文件为未加密的 db 文件
  2. 1 GB 的和 5.9GB 的均要在 Windows sqlcipher 解密成导出成 sql 文件,再用 msys2指令导出 sql 文件为 db 文件。msys2的这个指令把错误的行忽略跳过了,所以才能导出
  3. 上面说到的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 文件









Image







在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 文件









Image







在无法加载行的页面持续停留, Windows sqlcipher 不会持续加载
数据库这里的窗口太多,每次我拿 pixpin 截屏的时候,滑动鼠标滚轮扩大选取窗口的时候,pixpin 也不响应了


至此,数据库损坏的原因可能是清楚了,我在考虑用二进制查看器或者其他的什么,来查看一下这些损坏的数据。或者有没有办法修复?

这些损坏的数据导出为 csv 文件时,依然不能导出

Originally posted by @kuyunjian in #57

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions