SQLite3:删除记录而不使用null字节覆盖它



根据这个解释[1]如何从SQLite数据库中恢复已删除的记录,删除记录时会发生两件事:包含已删除记录的区域被添加到可用列表(作为可用块),内容区域中的"标头"被覆盖。

内容本身不会被覆盖(或只有几个字节),因此,例如,通过使用十六进制编辑器打开数据库文件,您仍然可以看到已删除记录的部分内容。

因此,为了检查这是否属实,这里有一个最小的例子:

sqlite3 example.db
sqlite> CREATE TABLE 'test'(aColumn VARCHAR(25));
sqlite> INSERT INTO test VALUES('AAAAAAAAAA');
sqlite> INSERT INTO test VALUES('BBBBBBBBBB');
sqlite> INSERT INTO test VALUES('CCCCCCCCCC');
sqlite> DELETE FROM test WHERE aColumn = 'BBBBBBBBBB';

我现在期望的是,用十六进制编辑器打开文件,在CCCC…和AAAA…之间仍然有一些B(但应该覆盖B之前的一些字节或前几个B)。实际发生的情况是,包含Bs的整个区域都被null字节覆盖了。

大型数据库也会出现这种情况。内容区域总是用null字节进行清理,因此无法恢复任何内容。

有没有任何选项或标志,我必须使用它来获得博客文章中显示的结果?

我需要以这种方式创建我的SQLite数据库,以便能够使用取证工具恢复已删除的记录(或其中的一部分)。

[1]http://sandersonforensics.com/forum/content.php?222-从SQLite数据库中恢复已删除的记录

您的SQLite版本恰好是在启用SQLite_SECURE_DELETE的情况下编译的。

最新更新